<?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>215208</bug_id>
          
          <creation_ts>2020-08-05 20:11:33 -0700</creation_ts>
          <short_desc>JS API access capture and their linking with executing scripts</short_desc>
          <delta_ts>2020-08-12 20:12:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Umar Iqbal">uiqbal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>umar-iqbal</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1678186</commentid>
    <comment_count>0</comment_count>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-05 20:11:33 -0700</bug_when>
    <thetext>JS API access capture and their linking with executing scripts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678187</commentid>
    <comment_count>1</comment_count>
      <attachid>406070</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-05 20:29:28 -0700</bug_when>
    <thetext>Created attachment 406070
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678260</commentid>
    <comment_count>2</comment_count>
      <attachid>406084</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-06 08:53:13 -0700</bug_when>
    <thetext>Created attachment 406084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678414</commentid>
    <comment_count>3</comment_count>
      <attachid>406118</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-06 14:30:08 -0700</bug_when>
    <thetext>Created attachment 406118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678478</commentid>
    <comment_count>4</comment_count>
      <attachid>406118</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-08-06 17:27:34 -0700</bug_when>
    <thetext>Comment on attachment 406118
Patch

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

Nice job on the bots!

I see a lot of repetition in the if (RuntimeEnabledFeatures::sharedFeatures().webAPIStatisticsEnabled()) checks. Is it possible to split that code out into a separate function that takes a String argument?

I mostly left comments on how to combine some lines of code.

&gt; Source/WebCore/loader/ExecutionStack.h:62
&gt; +    // This HashMap maintains the mapping between FrameID, ScriptID, and Script URLs

Comment is missing a period.

&gt; Source/WebCore/loader/ExecutionStack.h:65
&gt; +    // This HashMap maintains the APIs called by a script in a docuemnt.

Oops, typo -- this should be document.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:104
&gt; +    RELEASE_ASSERT(!isEphemeral());

Do we want this to crash in this case? It shouldn&apos;t be possible to hit this code, but maybe a debug assert would be better here?

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:281
&gt; +    RegistrableDomain registrableDomain { document.url() };

I think you can delete this line and just initialize in the function call, see below.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:282
&gt; +    uint64_t frameID { document.frameID()-&gt;toUInt64() };

You can use auto here, it&apos;s shorter.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:284
&gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);

auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(RegistrableDomain{ document.url() });

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:286
&gt; +    // register script id with script url for each frame

Comments usually start with a capital letter and end with a period.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:290
&gt; +        // add will ensure that the exisitng script URL does not get overwritten.

Ditto here about capitalization.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:325
&gt; +    uint64_t frameID { document.frameID()-&gt;toUInt64() };

Ditto about using auto.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:327
&gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);

auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(RegistrableDomain{ document.url() });

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:334
&gt; +            temp = executingScriptsStackIterator-&gt;value.last();

auto temp = executingScriptsStackIterator-&gt;value.last(); ?

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:359
&gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);

Same comments as above.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:378
&gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);

Same comments as above.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:419
&gt; +    auto&amp; statistics = ensureExecutionStackForRegistrableDomain(registrableDomain);

Same comments here as above -- you can use auto for the frameID and call RegistrableDomain { document.url() } in the function call.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:430
&gt; +            documentWithScriptsIterator-&gt;value.set(activeScriptID, apis);

I think you can use WTFMove(apis) here and subsequent calls.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:437
&gt; +        apisExecutingInScript.set(activeScriptID, apis);

Ditto, WTFMove(apis)

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:455
&gt; +    auto&amp; statistics = ensureExecutionStackForRegistrableDomain(registrableDomain);

auto&amp; statistics = ensureExecutionStackForRegistrableDomain(RegistrableDomain { document.url() });

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:456
&gt; +    String APIJSONString = statistics.toJSONString(frameID);

String APIJSONString = statistics.toJSONString(frameID { document.frameID()-&gt;toUInt64() });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678682</commentid>
    <comment_count>5</comment_count>
      <attachid>406198</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 12:06:48 -0700</bug_when>
    <thetext>Created attachment 406198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678690</commentid>
    <comment_count>6</comment_count>
      <attachid>406201</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 12:28:23 -0700</bug_when>
    <thetext>Created attachment 406201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678695</commentid>
    <comment_count>7</comment_count>
      <attachid>406201</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-07 12:46:02 -0700</bug_when>
    <thetext>Comment on attachment 406201
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        These hooks capture eval/Function, callbacks, and microtasks execution.

Can you add a note that this isn&apos;t going to ship in production. Otherwise, this code looks very scary from a performance POV :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678699</commentid>
    <comment_count>8</comment_count>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 13:01:49 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #7)
&gt; Comment on attachment 406201 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406201&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        These hooks capture eval/Function, callbacks, and microtasks execution.
&gt; 
&gt; Can you add a note that this isn&apos;t going to ship in production. Otherwise,
&gt; this code looks very scary from a performance POV :P

Thanks for the feedback. I will update the change log to reflect that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678705</commentid>
    <comment_count>9</comment_count>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 13:07:30 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #4)
&gt; Comment on attachment 406118 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406118&amp;action=review
&gt; 
&gt; Nice job on the bots!
&gt; 
&gt; I see a lot of repetition in the if
&gt; (RuntimeEnabledFeatures::sharedFeatures().webAPIStatisticsEnabled()) checks.
&gt; Is it possible to split that code out into a separate function that takes a
&gt; String argument?

Moved the checks inside the if statement block to WebCore::WebResourceLoadObserver

&gt; I mostly left comments on how to combine some lines of code.
&gt; 
&gt; &gt; Source/WebCore/loader/ExecutionStack.h:62
&gt; &gt; +    // This HashMap maintains the mapping between FrameID, ScriptID, and Script URLs
&gt; 
&gt; Comment is missing a period.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/loader/ExecutionStack.h:65
&gt; &gt; +    // This HashMap maintains the APIs called by a script in a docuemnt.
&gt; 
&gt; Oops, typo -- this should be document.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:104
&gt; &gt; +    RELEASE_ASSERT(!isEphemeral());
&gt; 
&gt; Do we want this to crash in this case? It shouldn&apos;t be possible to hit this
&gt; code, but maybe a debug assert would be better here?
&gt; 

I used RELEASE_ASSERT because the WebResourceLoadObserver ::ensureResourceStatisticsForRegistrableDomain also uses it. 

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:281
&gt; &gt; +    RegistrableDomain registrableDomain { document.url() };
&gt; 
&gt; I think you can delete this line and just initialize in the function call,
&gt; see below.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:282
&gt; &gt; +    uint64_t frameID { document.frameID()-&gt;toUInt64() };
&gt; 
&gt; You can use auto here, it&apos;s shorter.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:284
&gt; &gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; auto&amp; executionStack =
&gt; ensureExecutionStackForRegistrableDomain(RegistrableDomain{ document.url()
&gt; });

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:286
&gt; &gt; +    // register script id with script url for each frame
&gt; 
&gt; Comments usually start with a capital letter and end with a period.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:290
&gt; &gt; +        // add will ensure that the exisitng script URL does not get overwritten.
&gt; 
&gt; Ditto here about capitalization.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:325
&gt; &gt; +    uint64_t frameID { document.frameID()-&gt;toUInt64() };
&gt; 
&gt; Ditto about using auto.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:327
&gt; &gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; auto&amp; executionStack =
&gt; ensureExecutionStackForRegistrableDomain(RegistrableDomain{ document.url()
&gt; });

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:334
&gt; &gt; +            temp = executingScriptsStackIterator-&gt;value.last();
&gt; 
&gt; auto temp = executingScriptsStackIterator-&gt;value.last(); ?
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:359
&gt; &gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; Same comments as above.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:378
&gt; &gt; +    auto&amp; executionStack = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; Same comments as above.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:419
&gt; &gt; +    auto&amp; statistics = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; Same comments here as above -- you can use auto for the frameID and call
&gt; RegistrableDomain { document.url() } in the function call.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:430
&gt; &gt; +            documentWithScriptsIterator-&gt;value.set(activeScriptID, apis);
&gt; 
&gt; I think you can use WTFMove(apis) here and subsequent calls.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:437
&gt; &gt; +        apisExecutingInScript.set(activeScriptID, apis);
&gt; 
&gt; Ditto, WTFMove(apis)

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:455
&gt; &gt; +    auto&amp; statistics = ensureExecutionStackForRegistrableDomain(registrableDomain);
&gt; 
&gt; auto&amp; statistics =
&gt; ensureExecutionStackForRegistrableDomain(RegistrableDomain { document.url()
&gt; });

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:456
&gt; &gt; +    String APIJSONString = statistics.toJSONString(frameID);
&gt; 
&gt; String APIJSONString = statistics.toJSONString(frameID {
&gt; document.frameID()-&gt;toUInt64() });

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678713</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-08-07 13:13:35 -0700</bug_when>
    <thetext>(In reply to Umar Iqbal from comment #8)
&gt; (In reply to Keith Miller from comment #7)
&gt; &gt; Comment on attachment 406201 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=406201&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; &gt; +        These hooks capture eval/Function, callbacks, and microtasks execution.
&gt; &gt; 
&gt; &gt; Can you add a note that this isn&apos;t going to ship in production. Otherwise,
&gt; &gt; this code looks very scary from a performance POV :P
&gt; 
&gt; Thanks for the feedback. I will update the change log to reflect that.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678756</commentid>
    <comment_count>11</comment_count>
      <attachid>406201</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-08-07 14:59:42 -0700</bug_when>
    <thetext>Comment on attachment 406201
Patch

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

Looks good to me. I trust Keith has reviewed the JSC parts which I&apos;m not proficient in. I focused on the observer.

&gt; Source/WebCore/dom/Document.h:639
&gt; +        Optional&lt;FrameIdentifier&gt; frameID() const;

Double indent.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:288
&gt; +        // We use HashMap.add here because there is a chance that script URL is none (in case of microtasks).

I typically put empty parenthesis after function names to make it obvious that they are functions. Here that would be HashMap.add().

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:289
&gt; +        // HashMap.add will ensure that the exisitng script URL does not get overwritten.

Ditto.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:320
&gt; +        return 0;

Is 0 guaranteed to mean &quot;empty&quot; here? Or do we risk having all scripts be identified as 0? A better way is to use Optional&lt;&gt; with WTF::nullopt representing the empty result.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:331
&gt; +            auto temp = executingScriptsStackIterator-&gt;value.last();

Can we come up with a better variable name than temp?

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:344
&gt; +    return 0;

Same thing for 0 here.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:350
&gt; +        return 0;

Same thing for 0 here.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:364
&gt; +    return 0;

Same thing for 0 here.

&gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:370
&gt; +        return { };

Is an empty string the right thing to return here or could Optional&lt;&gt; work? This one doesn&apos;t seem as important though since it&apos;s just for text output. Not commenting further on returning empty strings. Doesn&apos;t seem like a big issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678785</commentid>
    <comment_count>12</comment_count>
      <attachid>406222</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 16:00:23 -0700</bug_when>
    <thetext>Created attachment 406222
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678787</commentid>
    <comment_count>13</comment_count>
      <attachid>406223</attachid>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 16:03:09 -0700</bug_when>
    <thetext>Created attachment 406223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678813</commentid>
    <comment_count>14</comment_count>
    <who name="Umar Iqbal">uiqbal</who>
    <bug_when>2020-08-07 16:32:26 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #11)
&gt; Comment on attachment 406201 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406201&amp;action=review
&gt; 
&gt; Looks good to me. I trust Keith has reviewed the JSC parts which I&apos;m not
&gt; proficient in. I focused on the observer.
&gt; 
&gt; &gt; Source/WebCore/dom/Document.h:639
&gt; &gt; +        Optional&lt;FrameIdentifier&gt; frameID() const;
&gt; 
&gt; Double indent.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:288
&gt; &gt; +        // We use HashMap.add here because there is a chance that script URL is none (in case of microtasks).
&gt; 
&gt; I typically put empty parenthesis after function names to make it obvious
&gt; that they are functions. Here that would be HashMap.add().

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:289
&gt; &gt; +        // HashMap.add will ensure that the exisitng script URL does not get overwritten.
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:320
&gt; &gt; +        return 0;
&gt; 
&gt; Is 0 guaranteed to mean &quot;empty&quot; here? Or do we risk having all scripts be
&gt; identified as 0? A better way is to use Optional&lt;&gt; with WTF::nullopt
&gt; representing the empty result.

Thanks for the suggestion. I use Optional&lt;&gt; now.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:331
&gt; &gt; +            auto temp = executingScriptsStackIterator-&gt;value.last();
&gt; 
&gt; Can we come up with a better variable name than temp?
&gt;

Changed name to scriptID.
 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:344
&gt; &gt; +    return 0;
&gt; 
&gt; Same thing for 0 here.

Fixed.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:350
&gt; &gt; +        return 0;
&gt; 
&gt; Same thing for 0 here.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:364
&gt; &gt; +    return 0;
&gt; 
&gt; Same thing for 0 here.
&gt; 

Fixed.

&gt; &gt; Source/WebKit/WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:370
&gt; &gt; +        return { };
&gt; 
&gt; Is an empty string the right thing to return here or could Optional&lt;&gt; work?
&gt; This one doesn&apos;t seem as important though since it&apos;s just for text output.
&gt; Not commenting further on returning empty strings. Doesn&apos;t seem like a big
&gt; issue.


Using Optional&lt;String&gt; now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679905</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-12 20:12:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/66955639&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406070</attachid>
            <date>2020-08-05 20:29:28 -0700</date>
            <delta_ts>2020-08-06 08:53:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200805222926.patch</filename>
            <type>text/plain</type>
            <size>52995</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1Mjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
OGY1ZWVmZjlhNzliOGZmNWQ3YzliOGM5YmQ0YTJmMGFmYTVmY2NhLi4yY2QyMzcyMDhhM2QzNGQ3
MzI2NGEyNTY5OTczODk5ZDI4YTk1Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMC0wOC0wNSAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKworICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwp
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisKIDIwMjAtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGFzc2VydGlvbnMgLyBpbmxpbmUgY2FwYWNpdHkgdG8gY2hlY2tw
b2ludCBzaWRlIHN0YXRlIHN0YWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGYwZmI2NDA1ZTI3ZWM4NWU4NThk
YTEwMGMyNmVhMjA5NjIwNjY2MjQuLmRjZDhjYThlMjUyN2EyNGUwZDYzZThiYzlhNmQ3N2RlMjAy
YjZjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAyMC0wOC0wNSAgVW1hciBJcWJh
bCAgPHVpcWJhbEBhcHBsZS5jb20+CisKKyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFu
ZCB0aGVpciBsaW5raW5nIHdpdGggZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRv
IGNhcHR1cmUgYWNjZXNzIG9mIHdlYiBBUElzLiAKKyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEg
c3RhY2sgb2YgZXhlY3V0aW5nIHNjcmlwdHMsIHRoYXQgYWxsb3dzIHVzIAorICAgICAgICB0byBh
dHRyaWJ1dGUgQVBJIGFjY2Vzc2VzIHRvIHRoZSByZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAg
ICBUZXN0IGNhc2VzIHRvIGJlIGFkZGVkIGxhdGVyLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3dCYXNlOjpyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4
ZWN1dGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEds
b2JhbFNjb3BlQmFzZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29y
bGQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAg
ICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6CisgICAgICAgIChH
ZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRl
T3BlcmF0aW9uQm9keURlZmluaXRpb24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQ
SXMpOgorCiAyMDIwLTA4LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIGNvbnN0cnVjdG9yIHRvIENvbnZvbHZlck5vZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWI2OWNm
MTdhNTI0NzcyMWU1YTIwYzczYWM1ZTkzOWZlYzZlYTViMy4uMTZiYmIzNGRhZWVhZmRmMjY3YmQz
YjAzZmEyNTI4MjI3OGRmOTU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wOC0w
NSAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisKKyAgICAgICAgSlMgQVBJIGFjY2Vz
cyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTIwOAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lz
dHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cG9wQWN0aXZlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnBlZWtBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0FjY2Vzc2VkQVBJcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrQWNjZXNzZWRBUElzKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmg6
CisKIDIwMjAtMDgtMDUgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtDb2NvYV0gUmVtb3ZlIG9ic29sZXRlIHNhbmRib3ggZXh0ZW5zaW9uIGFmdGVyIHIy
NjQxNzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxP
YmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1t
CmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0ZjA5MDIzYjg3YWVhMjdiMDQyMzYzOWUuLmM3MmZlM2Vm
OTlmMDM5YzMyYjYzZjc2MWVlOGQ5ZTNkZjA1OWZiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtNjgsNiArNjgsMTAgQEAgY29uc3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVs
bHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3Ry
ZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyBy
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0LAor
ICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kLAorI2VuZGlmCiB9OwogCiB2b2lkIEpTQVBJR2xvYmFsT2JqZWN0OjpyZXBv
cnRVbmNhdWdodEV4Y2VwdGlvbkF0RXZlbnRMb29wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNGU3Y2RjMWY3YzMyNzU1MTBkZTQ5ZmU3
OWFlYTBiYjNiY2QxOGE3Yy4uYTQ0ZDBlMTYwNGM3ZjM2YTEwMGFiMzYxOWYwNjIwZWM5MjNmZjA4
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCkBAIC0xNTMsOSArMTUzLDIzIEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRUNNQU1vZGUgZWNtYU1vCiAgICAg
ICAgIGNhbGxlckNvZGVCbG9jay0+ZGlyZWN0RXZhbENvZGVDYWNoZSgpLnNldChnbG9iYWxPYmpl
Y3QsIGNhbGxlckNvZGVCbG9jaywgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyQ2FsbFNpdGVJbmRleCwg
ZXZhbCk7CiAgICAgfQogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KQorICAgICAgICBnbG9iYWxP
YmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoZ2xvYmFsT2JqZWN0LCBldmFsLT5zb3Vy
Y2UoKS5wcm92aWRlcklEKCksIGV2YWwtPnNvdXJjZVVSTCgpKTsKKyNlbmRpZgorCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBjYWxsZXJGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyID0gdm0uaW50ZXJwcmV0ZXI7CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBpbnRlcnBy
ZXRlci0+ZXhlY3V0ZShldmFsLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVD
aGFpbik7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisg
ICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJF
dmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0
KTsKKyAgICByZXR1cm4gdGVtcDsKKyNlbHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgY2Fs
bGVyU2NvcGVDaGFpbikpOworI2VuZGlmCiB9CiAKIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZp
cnN0VmFyQXJnT2Zmc2V0KQpAQCAtODk2LDYgKzkxMCwyMyBAQCBKU1ZhbHVlIEludGVycHJldGVy
OjpleGVjdXRlQ2FsbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqCiAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUsIGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOwogICAgIH0K
IAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgaWYgKGlzSlNDYWxsICYmIGds
b2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5j
dGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydCkgeworICAgICAgICBpZiAoanND
YXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiktPnNvdXJjZUNvZGUoKSkgeworICAgICAgICAgICAg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwganND
YXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiktPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXJJRCgpLCBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKS0+c291cmNlQ29kZSgpLT5wcm92aWRlcigpLT5z
b3VyY2VVUkwoKSk7CisgICAgICAgICAgICAvLyBXZSBjYW4gY2FsbCB0ZW1wRnVuY3Rpb24tPnNv
dXJjZUNvZGUoKS0+cHJvdmlkZXIoKS0+c291cmNlKCkudXRmOCgpLmRhdGEoKSB0byBnZXQgdGhl
IHNjcmlwdCBzb3VyY2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjYWxsRGF0
YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXIoKSkKKyAgICAg
ICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lz
dGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoZ2xvYmFs
T2JqZWN0LCBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJv
dmlkZXJJRCgpLCBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCku
cHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFs
T3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3Qs
IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklE
KCksICJVbmF2YWlsYWJsZSIpOworICAgICAgICAgICAgLy8gVGhpcyBlbHNlIGNvbmRpdGlvbiBj
YXRlcnMgbWljcm90YXNrcy4gV2UgdHJ5IHRvIGxpbmsgY29kZSBleGVjdXRlZCBpbiBtaWNyb3Rh
c2tzIHRvIHRoZWlyIHBhcmVudCBzY3JpcHQgbGlrZSBhbnkgb3RoZXIgY2FsbGJhY2suCisgICAg
ICAgICAgICAvLyBIb3dldmVyLCBtaWNyb3Rhc2tzIHNlZW0gdG8gaGF2ZSB0aGVpciBvd24gaWRl
bnRpZmVyIHdoZW4gYWNjZXNzZWQgd2l0aCAoY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxl
LT5laXRoZXJDb2RlQmxvY2soKS0+c291cmNlKCkucHJvdmlkZXJJRCgpKS4KKyAgICAgICAgICAg
IC8vIFdlIGNhbGwgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgp
LnByb3ZpZGVySUQoKSB0byBnZXQgdGhlIHBhcmVudCBJRCAodGhlIHNjcmlwdCB0aGF0IGNyZWF0
ZWQgdGhlIG1pY3JvdGFzaykgb2YgYSBtaWNyb3Rhc2suCisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKwogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAg
aWYgKGlzSlNDYWxsKSB7CkBAIC05MDQsOSArOTM1LDIxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVj
dCoKICAgICAgICAgcmVzdWx0ID0gaml0Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFt
ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50
cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24ucmF3UG9pbnRlcigpLCAmdm0sICZw
cm90b0NhbGxGcmFtZSkpOworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgaWYg
KGlzSlNDYWxsICYmIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVn
aXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdp
c3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZChnbG9iYWxP
YmplY3QpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorI2Vsc2UK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOworI2Vu
ZGlmCiAgICAgfQogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoaXNK
U0NhbGwgJiYgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZChnbG9iYWxPYmplY3QpOworI2Vu
ZGlmCiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCBlMzIxZTJiZDI1ODg1YWM2MTJjMWVlYmM4NWQzMjQ0ZmE1ZDZhNzM3Li4wYjE3
ZWVkYTIzYWE5ZTFhMzdhZWI4OTUwMTQ3NmYxOTJkZDEwNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cApAQCAtNjc4LDYgKzY3OCwxMCBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBHbG9i
YWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8g
ZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51
bGxwdHIsIC8vIGluc3RhbnRpbmF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJ
U1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25TdGFydCwKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogR2xv
YmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRl
eCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZkNjA1M2JlYWRjNTVmNzBjMzY1Li44Y2Q4NjIzOWZjYjk5
YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0ZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0zOTYsNiArMzk2LDEwIEBAIGNvbnN0
IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xvYmFsT2JqZWN0OjpzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlID0gewogICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxw
dHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVh
bWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVn
aXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAg
IG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIC8qIFNvdXJjZSBmb3IgSlNHbG9iYWxPYmplY3QubHV0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmlu
ZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEzMjNmODg2MDQ0YTBiNjYwNDNhODQuLmYwYjRkNDhhOWNl
MzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVmMjgyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMjQwLDYgKzI0MCwxNCBAQCBzdHJ1Y3Qg
R2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFudGlh
dGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2JqZWN0KiwgSlNQcm9taXNlKiwgSlNWYWx1ZSwgSlNP
YmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0cmVhbWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWlu
ZzsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgdHlwZWRlZiBib29sICgq
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0
cikoY29uc3QgSlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7
CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydFB0ciByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0OworCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQ
dHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQ7
CisjZW5kaWYKIH07CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmluZGV4IDQyNGUxNTFhYWViZDI5NDM1
MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIuLjQwMmM2YTIyYzAxNTE0ZWI0NzVmNzVjYWU1ODUyMjBm
YjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTQ5NCw3ICs0OTQsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnIKICAgICBpZiAoIWV2YWwpCiAgICAgICAgIHJldHVybiBlbmNvZGVk
SlNWYWx1ZSgpOwogCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChn
bG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVu
Y3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQpCisgICAgICAgIGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGV2YWwtPnNvdXJj
ZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+c291cmNlVVJMKCkpOworI2VuZGlmCisKKyNpZiBFTkFC
TEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRl
bXAgPSBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxT
Y29wZSgpKSk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUo
KS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQp
CisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNlbHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxT
Y29wZSgpKSkpOworI2VuZGlmCiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xv
YmFsRnVuY1BhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAyNzc2ZmNhYjIzNWExNGEyZmFjMmFkYTE1N2Qy
ZTA5MzNiNDJkNjQyLi40MjI0MTI0NjNiZjk0ZDdiMjliMGI2OGQxNjJhYWI2YTQxZmVmYjlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMTQ2Nyw2ICsxNDY3LDcgQEAgbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcAogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVu
dFdyaXRlci5jcHAKIGxvYWRlci9FbXB0eUNsaWVudHMuY3BwCitsb2FkZXIvRXhlY3V0aW9uU3Rh
Y2suY3BwCiBsb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmNwcAogbG9hZGVyL0ZldGNoSWRpb21z
LmNwcAogbG9hZGVyL0Zvcm1TdGF0ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMzZlZmRjMzIzY2I5ZWEzMDMxODI2MGE0
OGFkNjA0OTFhZDQ4YmFjLi5iZWM1NGRiZmJhODI0ZjNjOTliMTA3NDYwNmVjMjRjYmNiY2NlNmRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC01MTY2LDYgKzUxNjYsNyBAQAogCQlGNUMwNDFEQjBGRkNBN0NFMDA4MzlENEEgLyog
SFRNTERhdGFMaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjVDMDQxRDgwRkZDQTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1l
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
NUMwNDFFNzBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUMwNDFFMjBGRkNBOTZE
MDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi87IH07CiAJCUY1RTBDNjVDMTY0
M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVFMEM2NUExNjQz
QzQyQzAwRDZDQjY5IC8qIEJhc2VDaG9vc2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmggKi87
IH07CisJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY0MDgzMzcyNEMyN0I3
RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjkxNkM0OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGOTE2QzQ4QzBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8q
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjlGMEVENzcwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oICovOyB9OwogCQlGQTY1NEE2QzExMDhBQkVEMDAyNjE1RTAg
LyogTWF0aE1MVG9rZW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQTY1NEE2QTExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVG9rZW5FbGVt
ZW50LmggKi87IH07CkBAIC0xNjEwMyw2ICsxNjEwNCw4IEBACiAJCUY1QzA0MUUyMEZGQ0E5NkQw
MDgzOUQ0QSAvKiBKU0hUTUxEYXRhTGlzdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MRGF0YUxpc3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUY1RTBDNjU5MTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRl
QW5kVGltZUlucHV0VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUY1RTBDNjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9u
bHlEYXRlQW5kVGltZUlucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGNjQwODMzNjI0QzI3QjdFMDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0aW9uU3RhY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNjQwODMzNzI0QzI3QjdFMDA4OTMyNkUgLyogRXhlY3V0aW9uU3Rh
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9uU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRjc1QTA1OUFGMTcwRDhGQUE1QjhDQUJFIC8qIE1hdGhNTFNlbGVjdEVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MU2VsZWN0
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY4MjE2Mjk5MDI5RjRG
QjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJRjkxNkM0OEIwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNjQ1NSw2ICsyNjQ1OCw4IEBACiAJCQkJRjUyQUQ1RTMxNTM0MjQ1RjAwNTlGQkU2IC8q
IEVtcHR5Q2xpZW50cy5jcHAgKi8sCiAJCQkJQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVt
cHR5Q2xpZW50cy5oICovLAogCQkJCTQxNERFREU1MUY5RkU5MTUwMDQ3QzQwRCAvKiBFbXB0eUZy
YW1lTG9hZGVyQ2xpZW50LmggKi8sCisJCQkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8qIEV4
ZWN1dGlvblN0YWNrLmNwcCAqLywKKwkJCQlGNjQwODMzNzI0QzI3QjdFMDA4OTMyNkUgLyogRXhl
Y3V0aW9uU3RhY2suaCAqLywKIAkJCQlDRUJCOEMzMjIwNzg2RENCMDAwMzk1NDcgLyogRmV0Y2hJ
ZGlvbXMuY3BwICovLAogCQkJCUNFQkI4QzMxMjA3ODZEQ0IwMDAzOTU0NyAvKiBGZXRjaElkaW9t
cy5oICovLAogCQkJCTQxQUQ3NTM5MUNFRjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAq
LywKQEAgLTMwOTE1LDYgKzMwOTIwLDcgQEAKIAkJCQk1MUY2NDU2MjFGNDUzOThGMDBCNTRERUQg
LyogRXhjZXB0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyOTM4NkIyMzVGNkI2OTAw
QzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDE5NjMx
MUQ2Q0FCNzYwMEZDN0U0NyAvKiBFeGNlcHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjY0
MDgzMzgyNEMyN0I4OTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4MzdGQjM0NTFGOUVBMDZEMDBEMEZDMzEgLyogRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQ0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVk
Q29sb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zR0wuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKaW5kZXggZjkzZTNmZDMxYzY1ZTRiMmU1MjI3NDU3OTg3
M2FhYTFkYzRmNzE2Yy4uNjY1ZmNiYThmMzg2MGYwOTNiOTJkMmNlM2VjYzMyYmUzNDY5NzI4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBA
IC02MSw2ICs2MSw5IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlND
OwpAQCAtODgsNiArOTEsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNET01X
aW5kb3dCYXNlOjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIsCiAg
ICAgbnVsbHB0ciwKICNlbmRpZgorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAg
JnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQs
CisgICAgJnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9u
RW5kLAorI2VuZGlmCiB9OwogCiBKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdywgSlNX
aW5kb3dQcm94eSogcHJveHkpCkBAIC00ODcsNCArNDk0LDI2IEBAIHZvaWQgSlNET01XaW5kb3dC
YXNlOjppbnN0YW50aWF0ZVN0cmVhbWluZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCitib29s
IEpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25TdGFydChjb25zdCBKU0dsb2JhbE9iamVjdCogb2JqZWN0LCBjb25zdCB1aW50
NjRfdCBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwpCit7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOworICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucHVzaEFjdGl2ZVNjcmlwdCgqdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmZyYW1lKCktPmRvY3VtZW50KCksIHNjcmlwdElELCBzY3JpcHRVUkwpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTRE9N
V2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVj
dXRpb25FbmQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGNvbnN0IEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEpTRE9NV2luZG93QmFzZSo+KG9iamVjdCk7CisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKnRoaXNPYmplY3QtPndyYXBw
ZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCmluZGV4IGVjNmRk
YzE3MDIxMDhlOTljZjk5ZGMzNjMzNWUyNWUwMDY0NWQ4NWEuLmFhZGI5OTY2YTY4ODFmMmU2ZjUw
NzliNzdiYzYzOTI1NWE0ZWMyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5oCkBAIC04NSw2ICs4NSwxMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93Kik7CiAK
KyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHN0YXRpYyBib29sIHJlZ2lzdGVy
RXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgYm9vbCByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvbkVuZChjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKwogcHJvdGVjdGVk
OgogICAgIEpTRE9NV2luZG93QmFzZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8
RE9NV2luZG93PiYmLCBKU1dpbmRvd1Byb3h5Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJiwgSlNXaW5kb3dQcm94eSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAKaW5kZXggZGNlNzM4MjBiYmJmZDliOTVj
NTg3OWQxM2VmNjVlYWI5OGE5MDQxOC4uN2ZiMmI3NmRhYjZkOWM5ZTg5MTgyOWQwMTJjNTAwODU1
OWEyOGMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVE
T01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90
ZURPTVdpbmRvd0Jhc2UuY3BwCkBAIC01MSw2ICs1MSwxMCBAQCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUgPQogICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNv
bXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFs
T3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIs
IC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5k
CisjZW5kaWYKIH07CiAKIEpTUmVtb3RlRE9NV2luZG93QmFzZTo6SlNSZW1vdGVET01XaW5kb3dC
YXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZlB0cjxSZW1vdGVET01XaW5kb3c+
JiYgd2luZG93LCBKU1dpbmRvd1Byb3h5KiBwcm94eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcAppbmRleCBjNDRmMmZi
M2EwYjA1ZGFhYjFhOGE5ZTJmODliNTJkODUxZWI0MzY4Li45ZWIwYWZjY2QzMDk3N2FmOWM5OGUz
OTc2ZTMzMjRlMTYwNTJjZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCkBAIC02OSw2ICs2OSwxMCBAQCBjb25z
dCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6c19nbG9i
YWxPYmplY3RNZXRob2RUYWJsZQogICAgICZkZWZhdWx0TGFuZ3VhZ2UsCiAgICAgbnVsbHB0ciwg
Ly8gY29tcGlsZVN0cmVhbWluZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5n
CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVs
bHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRp
b25FbmQKKyNlbmRpZgogfTsKIAogSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6OkpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQ
dHI8V29ya2VyR2xvYmFsU2NvcGU+JiYgaW1wbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCmluZGV4IGIxNGI4MTU0
MmRiODg5ZWM2ZDI1OWJjNWI3MGVmMmE1MDk5Yzk2ZDEuLmQ4MmM4YjMxYTYxY2E4ZDEyZTMxNmYz
M2Y3ZDA4OWQ3YTFmY2YzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtNjEsNiArNjEsMTAgQEAgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmwKICAgICAmZGVmYXVsdExhbmd1YWdlLAogICAgIG51bGxwdHIs
IC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWlu
ZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51
bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0
aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2xldEdsb2JhbFNjb3BlQmFzZTo6SlNXb3JrbGV0
R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBS
ZWZQdHI8V29ya2xldEdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDQ2MmI5ODRiMzRkZjI3YzI0Mjlm
N2YyMTE2ZGE3MjI1MTNlNGQ5N2EuLmVjYjE4Njg5YTg3ZWI3ZjQyYjdiYzJiODdkZWE2NGFjYzNj
MTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVk
ZSAiUGF5bWVudENvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJ1bkphdmFTY3JpcHRQ
YXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMTM5LDYgKzE0MCw5IEBAIFZhbHVl
T3JFeGNlcHRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjCiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsK
ICAgICBTZXRGb3JTY29wZTxjb25zdCBVUkwqPiBzb3VyY2VVUkxTY29wZShtX3NvdXJjZVVSTCwg
JnNvdXJjZVVSTCk7CisgICAgCisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQo
KSwganNTb3VyY2VDb2RlLnByb3ZpZGVySUQoKSwgc291cmNlVVJMLnN0cmluZygpKTsKIAogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUsIHNv
dXJjZVVSTC5zdHJpbmcoKSwgc291cmNlQ29kZS5zdGFydExpbmUoKSwgc291cmNlQ29kZS5zdGFy
dENvbHVtbigpKTsKIApAQCAtMTU0LDkgKzE1OCwxNSBAQCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlw
dENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3Vy
YwogICAgICAgICBvcHRpb25hbERldGFpbHMgPSBXVEZNb3ZlKGRldGFpbHMpOwogICAgIH0KIAot
ICAgIGlmIChvcHRpb25hbERldGFpbHMpCisgICAgaWYgKG9wdGlvbmFsRGV0YWlscykgeworICAg
ICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLnBvcEFjdGl2ZVNjcmlwdCgqbV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCpvcHRpb25hbERldGFpbHMpOworICAgIH0KIAorICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3Rp
dmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgCiAgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCmluZGV4IDM1NWRkYzdhNzU1Yjg4NTU0OGYwMTEwNzg4ODM2YjQwZjE3ZWU1
ZjkuLmMyN2Y2MjY5NTNhYzFiYmEzYjVhYzcyNmY4ZmRiOWFhOTdkNzJlOWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC01
MDE1LDYgKzUwMTUsNDkgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlR2V0dGVyQm9keURlZmluaXRp
b24KICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTtcbiIpOwogICAgIH0KICAgICAKKyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3
KEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQgSlNHQ09ic2VydmF0aW9uIEpTTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5ncyBKU01lbW9yeUluZm8gSlNNYWxsb2NTdGF0aXN0aWNzIEpTSW50ZXJu
YWxTZXR0aW5ncyBKU01vY2tDRE1GYWN0b3J5IEpTTW9ja1BheW1lbnRDb29yZGluYXRvciBKU0lu
dGVybmFsc01hcExpa2UgSlNJbnRlcm5hbHNTZXRMaWtlIEpTU2VydmljZVdvcmtlckludGVybmFs
cyApOworICAgIG15ICRzaG91bGRJbnN0cnVtZW50ID0gMTsKKworICAgIGZvciAoQGFwaXNOb3RU
b0luc3RydW1lbnQpIHsKKyAgICAgICAgaWYgKCRfIGVxICRjbGFzc05hbWUpIHsKKyAgICAgICAg
ICAgICRzaG91bGRJbnN0cnVtZW50ID0gMDsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoJHNob3VsZEluc3RydW1lbnQpIHsKKyAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIlJlc291cmNlTG9hZE9ic2VydmVyLmgiKTsKKyAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpO1xuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NO
YW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAgICAgICBteSAk
YXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmli
dXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xj
Zmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwg
JGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPm5h
bWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9IEV2ZW50
SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgfSBlbHNpZiAo
JGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7Cisg
ICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbXkgQHRlbXAgPSAoKTsKKyAgICAgICAgICAgICgkYXBpRnVuY05h
bWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1
ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlm
IChzY2FsYXIgQHRlbXAgPiAwKSB7CisgICAgICAgICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6
IiAuIGpvaW4oIjoiLCBAdGVtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgXCIke2FwaUNsYXNzTmFtZX06
OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgICAgIH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgIH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICB9XG4i
KTsKKyAgICB9CisKICAgICBpZiAoJGhhc0N1c3RvbUdldHRlcikgewogICAgICAgICBteSAkaW1w
bEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRhdHRyaWJ1
dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9IHx8ICRhdHRyaWJ1dGUtPm5h
bWUpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRoaXNPYmplY3Qu
JHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfShsZXhpY2FsR2xvYmFsT2JqZWN0KTtcbiIpOwpAQCAt
NTE0OSw2ICs1MTkyLDUzIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZpbml0
aW9uCiAKICAgICBHZW5lcmF0ZUN1c3RvbUVsZW1lbnRSZWFjdGlvbnNTdGFja0lmTmVlZGVkKCRv
dXRwdXRBcnJheSwgJGF0dHJpYnV0ZSwgImxleGljYWxHbG9iYWxPYmplY3QiKTsKIAorICAgIG15
IEBhcGlzTm90VG9JbnN0cnVtZW50ID0gcXcoSlNRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudCBK
U0dDT2JzZXJ2YXRpb24gSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzIEpTTWVtb3J5SW5mbyBK
U01hbGxvY1N0YXRpc3RpY3MgSlNJbnRlcm5hbFNldHRpbmdzIEpTTW9ja0NETUZhY3RvcnkgSlNN
b2NrUGF5bWVudENvb3JkaW5hdG9yIEpTSW50ZXJuYWxzTWFwTGlrZSBKU0ludGVybmFsc1NldExp
a2UgSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzICk7CisgICAgbXkgJHNob3VsZEluc3RydW1lbnQg
PSAxOworCisgICAgZm9yIChAYXBpc05vdFRvSW5zdHJ1bWVudCkgeworICAgICAgICBpZiAoJF8g
ZXEgJGNsYXNzTmFtZSkgeworICAgICAgICAgICAgJHNob3VsZEluc3RydW1lbnQgPSAwOworICAg
ICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkc2hvdWxkSW5zdHJ1
bWVudCkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
Iik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkge1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7XG4iKTsKKworICAgICAgICBteSAkYXBp
Q2xhc3NOYW1lID0gc3Vic3RyKCRjbGFzc05hbWUsIDIpOworICAgICAgICBteSAkYXBpRnVuY05h
bWUgPSAiTm9uZSI7CisgICAgICAgIG15ICRhcGlBcmd1bWVudHMgPSAiIjsKKworICAgICAgICBp
ZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05h
bWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5uYW1lKTsKKyAgICAg
ICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIikgewor
ICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gRXZlbnRIYW5kbGVyQXR0cmlidXRlRXZlbnROYW1l
KCRhdHRyaWJ1dGUpOworICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1
Y3RvclR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9
ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0g
JGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9KSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAk
YXR0cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgQHRlbXAg
PSAoKTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJhdG9y
LT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1l
LCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7CisgICAg
ICAgICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgXCIke2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVu
dHN9XCIpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIH1c
biIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICB9XG4iKTsKKyAgICB9CisKICAgICBpZiAoJG5lZWRT
ZWN1cml0eUNoZWNrKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdT
ZWN1cml0eS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnR5cGUt
Pm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTUzNjYsNiArNTQ1Niw0MiBAQCBzdWIgR2VuZXJh
dGVPcGVyYXRpb25Cb2R5RGVmaW5pdGlvbgogCiAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVh
Y3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICIqbGV4aWNhbEds
b2JhbE9iamVjdCIpIHVubGVzcyAkZ2VuZXJhdGluZ092ZXJsb2FkRGlzcGF0Y2hlcjsKIAorICAg
IG15IEBhcGlzTm90VG9JbnN0cnVtZW50ID0gcXcoSlNNb2NrUGFnZU92ZXJsYXkgSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQgSlNHQ09ic2Vy
dmF0aW9uIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncyBKU01lbW9yeUluZm8gSlNNYWxsb2NT
dGF0aXN0aWNzIEpTSW50ZXJuYWxTZXR0aW5ncyBKU01vY2tDRE1GYWN0b3J5IEpTTW9ja1BheW1l
bnRDb29yZGluYXRvciBKU0ludGVybmFsc01hcExpa2UgSlNJbnRlcm5hbHNTZXRMaWtlIEpTU2Vy
dmljZVdvcmtlckludGVybmFscyApOworICAgIG15ICRzaG91bGRJbnN0cnVtZW50ID0gMTsKKwor
ICAgIGZvciAoQGFwaXNOb3RUb0luc3RydW1lbnQpIHsKKyAgICAgICAgaWYgKCRfIGVxICRjbGFz
c05hbWUpIHsKKyAgICAgICAgICAgICRzaG91bGRJbnN0cnVtZW50ID0gMDsKKyAgICAgICAgICAg
IGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJHNob3VsZEluc3RydW1lbnQpIHsK
KyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJlc291cmNlTG9hZE9ic2VydmVyLmgiKTsKKyAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkge1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkge1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7XG4iKTsKKworICAgICAgICBteSAkYXBpQ2xhc3NOYW1l
ID0gc3Vic3RyKCRjbGFzc05hbWUsIDIpOworICAgICAgICBteSAkYXBpRnVuY05hbWUgPSAiTm9u
ZSI7CisKKyAgICAgICAgaWYgKCRnZW5lcmF0aW5nT3ZlcmxvYWREaXNwYXRjaGVyKSB7CisgICAg
ICAgICAgICAkYXBpRnVuY05hbWUgPSAkZnVuY3Rpb25OYW1lOworICAgICAgICB9IGVsc2lmIChI
YXNDdXN0b21NZXRob2QoJG9wZXJhdGlvbikpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9
ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICRhcGlGdW5jTmFtZSA9ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZTsKKyAgICAgICAg
fQorCisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCBcIiR7YXBp
Q2xhc3NOYW1lfTo6JHthcGlGdW5jTmFtZX1cIik7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICAgICAgfVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgfVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgIH1cbiIpOwor
ICAgIH0KKwogICAgICMgRm9yIG92ZXJsb2Fkcywgd2UgZ2VuZXJhdGUgdGhlIHNlY3VyaXR5IGNo
ZWNrIGluIHRoZSBvdmVybG9hZCBkaXNwYXRjaGVyLCBpbnN0ZWFkIG9mIHRoZSBib2R5IG9mIGVh
Y2ggb3ZlcmxvYWQsIGFzIHBlciBzcGVjaWZpY2F0aW9uOgogICAgICMgaHR0cHM6Ly9oZXljYW0u
Z2l0aHViLmlvL3dlYmlkbC8jZGZuLWNyZWF0ZS1vcGVyYXRpb24tZnVuY3Rpb24KICAgICBpZiAo
ISRpc092ZXJsb2FkZWQgfHwgJGdlbmVyYXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKaW5kZXggNDFjOWZlYzYxZTI4YmFjMzg3Y2NjN2I5YjMzZjVmZDBkOGYzNDFl
Mi4uZTMwOTJiN2U5ZjUyNmU4MjE2MDhmOTM5N2YyZTVkNjNiZmQyOWQyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKQEAgLTYzMyw3ICs2MzMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBWE9i
amVjdENhY2hlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQYWdlSWRlbnRpZmll
cj4gcGFnZUlEKCkgY29uc3Q7Ci0gICAgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlE
KCkgY29uc3Q7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBXRUJDT1JFX0VY
UE9SVCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQoKSBjb25zdDsKKyNlbHNlCisg
ICAgICAgIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0OworI2VuZGlm
CiAKICAgICAvLyB0byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBoZWJyZXcgYW5kIGFyYWJpYyBwYWdl
cyByaWdodAogICAgIHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0V4ZWN1dGlvblN0YWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmQ1YWQ4MmU2ODljODNmMGU4M2Qz
N2JiN2EzYjE5MjQ2MjhjNGQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0V4ZWN1dGlvblN0YWNrLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNU
SUNTKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uU3RhY2suaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgRXhlY3V0aW9uU3RhY2s6OnRvSlNPTlN0
cmluZyh1aW50NjRfdCBmcmFtZUlEKQoreworICAgIGlmIChkb2N1bWVudElkVVJMTWFwLmZpbmQo
ZnJhbWVJRCkgPT0gZG9jdW1lbnRJZFVSTE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAKKyAgICBhdXRvIGRvY3VtZW50VVJMID0gZG9jdW1lbnRJZFVSTE1hcC5nZXQoZnJhbWVJ
RCk7CisKKyAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgb2Jq
ZWN0LT5zZXRTdHJpbmcoIlRvcExldmVsRG9tYWluIiwgcmVnaXN0cmFibGVEb21haW4uc3RyaW5n
KCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJUb3BMZXZlbFVSTCIsIGRvY3VtZW50VVJMLnN0
cmluZygpKTsKKyAgICBvYmplY3QtPnNldEludGVnZXIoIkZyYW1lSUQiLCBmcmFtZUlEKTsKKyAg
ICBhdXRvIHNjcmlwdEV4ZWN1dGlvbiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAKKyAg
ICBpZiAoYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCkgPT0gYXBp
c0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAgIG9iamVjdC0+c2V0
QXJyYXkoIlNjcmlwdEV4ZWN1dGlvbiIsIFdURk1vdmUoc2NyaXB0RXhlY3V0aW9uKSk7CisgICAg
ICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOworICAgIH0KKyAgICAKKyAgICBhdXRv
IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50ID0gYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9j
dW1lbnRzLmdldChmcmFtZUlEKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gc2NyaXB0V2l0aEFQSXNL
ZXkgOiBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudC5rZXlzKCkpIHsKKyAgICAgICAgYXV0
byBzY3JpcHRXaXRoQVBJcyA9IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50LmdldChzY3Jp
cHRXaXRoQVBJc0tleSk7CisgICAgICAgIGF1dG8gYWNjZXNzZWRBUElzID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOworICAgICAgICBmb3IgKGF1dG8gY29uc3QmIEFQSU5hbWUgOiBzY3JpcHRXaXRo
QVBJcykgeworICAgICAgICAgICAgYXV0byB0ZW1wID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIHRlbXAtPnNldEludGVnZXIoQVBJTmFtZS5rZXksIEFQSU5hbWUudmFsdWUp
OworICAgICAgICAgICAgYWNjZXNzZWRBUElzLT5wdXNoT2JqZWN0KFdURk1vdmUodGVtcCkpOwor
ICAgICAgICB9CisgICAgICAgIGF1dG8gYXBpRXhlY3V0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXBpRXhlY3V0aW9uLT5zZXRJbnRlZ2VyKCJTY3JpcHRJRCIsIHNjcmlw
dFdpdGhBUElzS2V5KTsKKyAgICAgICAgCisgICAgICAgIGlmIChkb2N1bWVudElkQW5kU2NyaXB0
SWRVUkxNYXAuZmluZChmcmFtZUlEKSA9PSBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZW5k
KCkpCisgICAgICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygiU2NyaXB0VVJMIiwgIlVu
YXZhaWxhYmxlIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBkb2N1bWVudElk
QW5kU2NyaXB0SWRVUkxzID0gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmdldChmcmFtZUlE
KTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLmZpbmQoc2NyaXB0
V2l0aEFQSXNLZXkpID09IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMuZW5kKCkpCisgICAgICAg
ICAgICAgICAgYXBpRXhlY3V0aW9uLT5zZXRTdHJpbmcoIlNjcmlwdFVSTCIsICJVbmF2YWlsYWJs
ZSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0
U3RyaW5nKCJTY3JpcHRVUkwiLCBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLmdldChzY3JpcHRX
aXRoQVBJc0tleSkpOworICAgICAgICB9CisgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0QXJyYXko
IkFjY2Vzc2VkQVBJcyIsIFdURk1vdmUoYWNjZXNzZWRBUElzKSk7CisgICAgICAgIHNjcmlwdEV4
ZWN1dGlvbi0+cHVzaE9iamVjdChXVEZNb3ZlKGFwaUV4ZWN1dGlvbikpOworICAgIH0KKyAgICAK
KyAgICBvYmplY3QtPnNldEFycmF5KCJTY3JpcHRFeGVjdXRpb24iLCBXVEZNb3ZlKHNjcmlwdEV4
ZWN1dGlvbikpOworICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOworfQorCit9Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5o
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI4
MTYxMjM0MzZlMTc2ZmY3MGU3MGY2NzU5MjgzOGQ5MjgwMWVjYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5oCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJlZ2lzdHJh
YmxlRG9tYWluLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXhlY3V0aW9uU3RhY2sgeworICAg
IGV4cGxpY2l0IEV4ZWN1dGlvblN0YWNrKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4p
CisgICAgICAgIDogcmVnaXN0cmFibGVEb21haW4geyBkb21haW4gfQorICAgIHsKKyAgICB9CisK
KyAgICBFeGVjdXRpb25TdGFjaygpID0gZGVmYXVsdDsKKyAgICBFeGVjdXRpb25TdGFjayhjb25z
dCBFeGVjdXRpb25TdGFjayYpID0gZGVsZXRlOworICAgIEV4ZWN1dGlvblN0YWNrJiBvcGVyYXRv
cj0oY29uc3QgRXhlY3V0aW9uU3RhY2smKSA9IGRlbGV0ZTsKKyAgICBFeGVjdXRpb25TdGFjayhF
eGVjdXRpb25TdGFjayYmKSA9IGRlZmF1bHQ7CisgICAgRXhlY3V0aW9uU3RhY2smIG9wZXJhdG9y
PShFeGVjdXRpb25TdGFjayYmKSA9IGRlZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdG9KU09OU3RyaW5nKHVpbnQ2NF90IC8qIEZyYW1lSUQgKi8pOworCisgICAgUmVnaXN0cmFi
bGVEb21haW4gcmVnaXN0cmFibGVEb21haW47CisKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRh
aW5zIHRoZSBtYXBwaW5nIGJldHdlZW4gRnJhbWVJRCBhbmQgRG9jdW1lbnQgVVJMLgorICAgIEhh
c2hNYXA8dWludDY0X3QsIFVSTD4gZG9jdW1lbnRJZFVSTE1hcDsKKyAgICAKKyAgICAvLyBUaGlz
IEhhc2hNYXAgbWFpbnRhaW5zIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNjcmlwdHMgaW4gZWFjaCBk
b2N1bWVudC4KKyAgICAvLyBDdXJyZW50bHksIGl0IG9ubHkgY2FwdHVyZXMgY2xhc3NpYyBzY3Jp
cHRzLgorICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3Rvcjx1aW50NjRfdD4+IGV4ZWN1dGluZ1Nj
cmlwdHNJbkRvY3VtZW50czsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRo
ZSBtYXBwaW5nIGJldHdlZW4gRnJhbWVJRCwgU2NyaXB0SUQsIGFuZCBTY3JpcHQgVVJMcworICAg
IEhhc2hNYXA8dWludDY0X3QsIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4+IGRvY3VtZW50SWRB
bmRTY3JpcHRJZFVSTE1hcDsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRo
ZSBBUElzIGNhbGxlZCBieSBhIHNjcmlwdCBpbiBhIGRvY3VlbW50LgorICAgIC8vIEhhc2hNYXA8
RnJhbWVJRCwgSGFzaE1hcDxTY3JpcHRJRCwgSGFzaENvdW50ZWRTZXQ8Q291bnRPZkFQSU5hbWVz
Pj4+CisgICAgSGFzaE1hcDx1aW50NjRfdCwgSGFzaE1hcDx1aW50NjRfdCwgSGFzaENvdW50ZWRT
ZXQ8U3RyaW5nPj4+IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50czsKK307CisKK30KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRl
eCA2N2ZiZmZjMmQyMGFiMmZkOGJhNTZhOGRmYTRkNGFlNzhhOTVlYjIwLi4wMWQ4YzA2MGJiYTBk
ZjEwYjY0Mzk5ZDNkNzhjNzU4NDM2MjA2MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1VSTC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDYgKzU4LDE0IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9j
dW1lbnQmLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmdGb3JUZXN0aW5nKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiAvKiBmaXJzdFBhcnR5RG9tYWluICovLCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgLyogdGhpcmRQYXJ0eURvbWFpbiAqLywgYm9vbCAvKiBzaG91bGRTY2hlZHVsZU5vdGlm
aWNhdGlvbiAqLykgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFjdGl2ZVNjcmlwdChjb25z
dCBEb2N1bWVudCYsIGNvbnN0IHVpbnQ2NF90IC8qIHNjcmlwdElEICovLCBjb25zdCBTdHJpbmcm
IC8qIHNjcmlwdFVSTCAqLykgeyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBwb3BBY3RpdmVTY3Jp
cHQoY29uc3QgRG9jdW1lbnQmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBw
ZWVrQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgU3RyaW5nIHBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBEb2N1bWVudCYpIHsgcmV0
dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCB2b2lkIGxvZ0FjY2Vzc2VkQVBJcyhjb25zdCBEb2N1
bWVudCYsIGNvbnN0IFN0cmluZyYgLyogYXBpTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCBTdHJp
bmcgcGVla0FjY2Vzc2VkQVBJcyhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsgfQorCiAg
ICAgdmlydHVhbCBTdHJpbmcgc3RhdGlzdGljc0ZvclVSTChjb25zdCBVUkwmKSB7IHJldHVybiB7
IH07IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSgpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZE9ic2VydmVyLmNwcAppbmRleCBlMjNjNzkxNzJhNTg5YjdlNjg3ZTcwYTg2MGI0ODVlYmVl
NGZjNGRjLi4zOTFjMWY5YmJjZDdlMzEwMTQ3NjZiMWI1ODUzMDFiZjIzOWRkZGQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTk4LDYgKzk4LDE3IEBAIFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKK0V4ZWN1dGlvblN0YWNrJiBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VwaGVt
ZXJhbCgpKTsKKworICAgIHJldHVybiBtX2V4ZWN1dGlvblN0YWNrTWFwLmVuc3VyZShkb21haW4s
IFsmZG9tYWluXSB7CisgICAgICAgIHJldHVybiBFeGVjdXRpb25TdGFjayhkb21haW4pOworICAg
IH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlJlc291cmNlTG9hZE9i
c2VydmVyOjpzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpKSB7CkBAIC0yNjEsNiArMjcyLDE5NSBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnB1c2hBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCB1
aW50NjRfdCBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwpCit7CisgICAgaWYgKGlz
RXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJ
U1RJQ1MpCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVu
dC51cmwoKSB9OworICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRv
VUludDY0KCkgfTsKKworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9u
U3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgCisgICAg
Ly8gcmVnaXN0ZXIgc2NyaXB0IGlkIHdpdGggc2NyaXB0IHVybCBmb3IgZWFjaCBmcmFtZQorICAg
IGlmIChleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZmluZChmcmFt
ZUlEKSAhPSBleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZW5kKCkp
IHsKKyAgICAgICAgYXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzID0gZXhlY3V0aW9uU3Rh
Y2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIC8v
IHdlIHVzZSBhZGQgaGVyZSBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgc2NyaXB0IFVS
TCBpcyBub25lIChpbiBjYXNlIG9mIG1pY3JvdGFza3MpLgorICAgICAgICAvLyBhZGQgd2lsbCBl
bnN1cmUgdGhhdCB0aGUgZXhpc2l0bmcgc2NyaXB0IFVSTCBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0
ZW4uCisgICAgICAgIGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMtPnZhbHVlLmFkZChzY3JpcHRJ
RCwgc2NyaXB0VVJMKTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgSGFzaE1hcDx1
aW50NjRfdCwgU3RyaW5nPiBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzOworICAgICAgICBkb2N1
bWVudElkQW5kU2NyaXB0SWRVUkxzLnNldChzY3JpcHRJRCwgc2NyaXB0VVJMKTsKKyAgICAgICAg
ZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLnNldChmcmFtZUlELCBk
b2N1bWVudElkQW5kU2NyaXB0SWRVUkxzKTsKKyAgICB9CisgICAgCisgICAgaWYgKGV4ZWN1dGlv
blN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1
dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBh
dXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0
aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIGV4ZWN1dGluZ1Nj
cmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc2NyaXB0SUQpOworCisgICAgfSBlbHNl
IHsKKyAgICAgICAgCisgICAgICAgIFZlY3Rvcjx1aW50NjRfdD4gZXhlY3V0aW5nU2NyaXB0c1N0
YWNrOworICAgICAgICBleGVjdXRpbmdTY3JpcHRzU3RhY2suYXBwZW5kKHNjcmlwdElEKTsKKyAg
ICAgICAgZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLnNldChmcmFt
ZUlELCBleGVjdXRpbmdTY3JpcHRzU3RhY2spOworICAgICAgICAKKyAgICAgICAgZXhlY3V0aW9u
U3RhY2suZG9jdW1lbnRJZFVSTE1hcC5zZXQoZnJhbWVJRCwgZG9jdW1lbnQudXJsKCkpOworICAg
IH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
c2NyaXB0SUQpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHRVUkwpOworI2VuZGlmCit9CisKK3Vp
bnQ2NF90IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwb3BBY3RpdmVTY3JpcHQoY29uc3QgRG9j
dW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1
cm4gMDsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVE
b21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90
IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8m
IGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFp
bihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1Nj
cmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGlu
Z1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRvIGV4ZWN1dGluZ1Njcmlw
dHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1l
bnRzLmZpbmQoZnJhbWVJRCk7CisKKyAgICAgICAgaWYgKCFleGVjdXRpbmdTY3JpcHRzU3RhY2tJ
dGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKSB7CisKKyAgICAgICAgICAgIHVpbnQ2NF90IHRlbXAg
PSAwOworICAgICAgICAgICAgdGVtcCA9IGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52
YWx1ZS5sYXN0KCk7CisKKyAgICAgICAgICAgIGlmIChleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVy
YXRvci0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGV4ZWN1dGlvblN0YWNrLmV4
ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5yZW1vdmUoZnJhbWVJRCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVl
LnJlbW92ZUxhc3QoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRlbXA7CisgICAgICAgIH0KKyAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1
cm4gMDsKK30KKwordWludDY0X3QgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY3RpdmVT
Y3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgp
KQorICAgICAgICByZXR1cm4gMDsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisg
ICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9
OworICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkg
fTsKKworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JS
ZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKGV4ZWN1dGlvblN0
YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlv
blN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRv
IGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5n
U2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIGlmICghZXhlY3V0aW5n
U2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUubGFzdCgpOworICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgorICAgIHJldHVybiAwOwor
fQorCitTdHJpbmcgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtTY3JpcHRFeGVjdXRpb25T
dGFjayhjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkg
fTsKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVn
aXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOworCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUmVnaXN0cmFibGUgZG9tYWluOiAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChyZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSk7CisKKyAg
ICBmb3IgKGF1dG8ga2V5IDogZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1l
bnRzLmtleXMoKSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkZyYW1lIElEOiAi
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoa2V5KSk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiU2NyaXB0IFN0YWNrOiBbIik7CisgICAgICAgIGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0
YWNrSXRlcmF0b3IgPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMu
ZmluZChrZXkpOworCisgICAgICAgIGZvciAoYXV0byBjb25zdCYgZXhlY3V0aW5nU2NyaXB0IDog
ZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihleGVjdXRpbmdTY3JpcHQpKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICwiKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIl0iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuIik7CisgICAg
fQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShkb2N1bWVudCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIGFwaU5hbWUpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisgICAg
ICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgYXV0byBh
Y3RpdmVTY3JpcHRJRCA9IHBlZWtBY3RpdmVTY3JpcHQoZG9jdW1lbnQpOworCisgICAgaWYgKCFh
Y3RpdmVTY3JpcHRJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaXN0cmFibGVEb21haW4g
cmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90IGZyYW1l
SUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lzdHJh
YmxlRG9tYWluKTsKKworICAgIGlmIChzdGF0aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRv
Y3VtZW50cy5maW5kKGZyYW1lSUQpICE9IHN0YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2NyaXB0c0lu
RG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAgIGF1dG8gZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJh
dG9yID0gc3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFt
ZUlEKTsKKworICAgICAgICBpZiAoZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5m
aW5kKGFjdGl2ZVNjcmlwdElEKSAhPSBkb2N1bWVudFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVl
LmVuZCgpKSB7CisgICAgICAgICAgICBhdXRvIHNjcmlwdHNXaXRoQVBJc0l0ZXJhdG9yID0gZG9j
dW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5maW5kKGFjdGl2ZVNjcmlwdElEKTsKKyAg
ICAgICAgICAgIHNjcmlwdHNXaXRoQVBJc0l0ZXJhdG9yLT52YWx1ZS5hZGQoYXBpTmFtZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IGFwaXM7
CisgICAgICAgICAgICBhcGlzLmFkZChhcGlOYW1lKTsKKyAgICAgICAgICAgIGRvY3VtZW50V2l0
aFNjcmlwdHNJdGVyYXRvci0+dmFsdWUuc2V0KGFjdGl2ZVNjcmlwdElELCBhcGlzKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEhhc2hDb3VudGVk
U2V0PFN0cmluZz4+IGFwaXNFeGVjdXRpbmdJblNjcmlwdDsKKyAgICAgICAgSGFzaENvdW50ZWRT
ZXQ8U3RyaW5nPiBhcGlzOworICAgICAgICBhcGlzLmFkZChhcGlOYW1lKTsKKworICAgICAgICBh
cGlzRXhlY3V0aW5nSW5TY3JpcHQuc2V0KGFjdGl2ZVNjcmlwdElELCBhcGlzKTsKKyAgICAgICAg
c3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuc2V0KGZyYW1lSUQsIGFw
aXNFeGVjdXRpbmdJblNjcmlwdCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9j
dW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShhcGlOYW1lKTsKKyNlbmRpZgorfQorCitTdHJpbmcg
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVE
b21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90
IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJl
Z2lzdHJhYmxlRG9tYWluKTsKKyAgICBTdHJpbmcgQVBJSlNPTlN0cmluZyA9IHN0YXRpc3RpY3Mu
dG9KU09OU3RyaW5nKGZyYW1lSUQpOworICAgIHJldHVybiBBUElKU09OU3RyaW5nOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIHJldHVybiB7IH07CisjZW5kaWYKK30K
Kwogdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNv
bnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBGZXRjaERlc3RpbmF0aW9uSXNT
Y3JpcHRMaWtlIGlzU2NyaXB0TGlrZSkKIHsKICAgICBpZiAoaXNFcGhlbWVyYWwoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKaW5kZXggMTg2ZmFhMTNmNjg0MjRkMDIzZmZlNzRi
YTk1NzQ4MDNmMjNkN2M4My4uNzIxNTFhNjFjNTBhMDA5NWYxZGZhZWZhZGM1OGZhMTZlN2ZlYjY3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlJlc291cmNlTG9hZE9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAK
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKKyNpbmNsdWRlIDxXZWJD
b3JlL0V4ZWN1dGlvblN0YWNrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KQEAgLTUyLDYgKzUzLDE0IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSBmaW5h
bDsKICAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZ0ZvclRlc3RpbmcoY29uc3QgV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90
aWZpY2F0aW9uKTsKIAorICAgIHZvaWQgcHVzaEFjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3JlOjpE
b2N1bWVudCYsIGNvbnN0IHVpbnQ2NF90IHNjcmlwdElELCBjb25zdCBTdHJpbmcmIHNjcmlwdFVS
TCkgZmluYWw7CisgICAgdWludDY0X3QgcG9wQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRv
Y3VtZW50JikgZmluYWw7CisgICAgdWludDY0X3QgcGVla0FjdGl2ZVNjcmlwdChjb25zdCBXZWJD
b3JlOjpEb2N1bWVudCYpIGZpbmFsOworICAgIFN0cmluZyBwZWVrU2NyaXB0RXhlY3V0aW9uU3Rh
Y2soY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKworICAgIHZvaWQgbG9nQWNjZXNz
ZWRBUElzKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBhcGlOYW1lKSBm
aW5hbDsKKyAgICBTdHJpbmcgcGVla0FjY2Vzc2VkQVBJcyhjb25zdCBXZWJDb3JlOjpEb2N1bWVu
dCYpIGZpbmFsOworCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQg
c2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpOwogI2VuZGlmCkBAIC03OCw2ICs4Nywx
MSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwog
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdURjo6V2FsbFRpbWU+IG1f
bGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKKyAgICBXZWJDb3JlOjpFeGVjdXRpb25TdGFjayYgZW5zdXJlRXhlY3V0aW9uU3Rh
Y2tGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYp
OworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OkV4ZWN1
dGlvblN0YWNrPiBtX2V4ZWN1dGlvblN0YWNrTWFwOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpU
aW1lciBtX25vdGlmaWNhdGlvblRpbWVyOwogCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406084</attachid>
            <date>2020-08-06 08:53:13 -0700</date>
            <delta_ts>2020-08-06 14:30:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200806105312.patch</filename>
            <type>text/plain</type>
            <size>53097</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi44ZGE3ODAxYjJmMDY4YjY4
OTVjZmU5ZDUyZGQ2YWNlZTdhOGNhMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMC0wOC0wNiAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKworICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwp
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisKIDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4x
NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEu
LjgxZDFhMDliYjA3YzVjMzY2Y2JlYTY0NDIwZDViZTEyMzliNDdmMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOSBAQAorMjAyMC0wOC0wNiAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+
CisKKyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGgg
ZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdl
YiBBUElzLiAKKyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNj
cmlwdHMsIHRoYXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2Vz
IHRvIHRoZSByZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFk
ZGVkIGxhdGVyLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFz
ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1
dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRl
ckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRp
b24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21l
IG1vcmUgQW5pbWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMy
NmI3YTcyZWYzYTkzMTVjMTlkNTcuLjNjOTFkNjJlYmZjOWM1ZmVmYWRjNWZhNGU1ODRlZmJkMmNh
NWE2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDYgIFVtYXIgSXFiYWwg
IDx1aXFiYWxAYXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQg
dGhlaXIgbGlua2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2
ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWN0aXZlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0
ZjA5MDIzYjg3YWVhMjdiMDQyMzYzOWUuLmM3MmZlM2VmOTlmMDM5YzMyYjYzZjc2MWVlOGQ5ZTNk
ZjA1OWZiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9i
YWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQpAQCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
SlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVs
bHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWlu
ZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JD
YWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0LAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVy
RXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kLAorI2VuZGlmCiB9
OwogCiB2b2lkIEpTQVBJR2xvYmFsT2JqZWN0OjpyZXBvcnRVbmNhdWdodEV4Y2VwdGlvbkF0RXZl
bnRMb29wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggNGU3Y2RjMWY3YzMyNzU1MTBkZTQ5ZmU3OWFlYTBiYjNiY2QxOGE3Yy4uYTQ0ZDBl
MTYwNGM3ZjM2YTEwMGFiMzYxOWYwNjIwZWM5MjNmZjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNTMsOSArMTUzLDIz
IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRUNNQU1vZGUgZWNtYU1vCiAgICAgICAgIGNhbGxlckNvZGVCbG9jay0+ZGly
ZWN0RXZhbENvZGVDYWNoZSgpLnNldChnbG9iYWxPYmplY3QsIGNhbGxlckNvZGVCbG9jaywgcHJv
Z3JhbVNvdXJjZSwgY2FsbGVyQ2FsbFNpdGVJbmRleCwgZXZhbCk7CiAgICAgfQogCisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0KQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0
aW9uU3RhcnQoZ2xvYmFsT2JqZWN0LCBldmFsLT5zb3VyY2UoKS5wcm92aWRlcklEKCksIGV2YWwt
PnNvdXJjZVVSTCgpKTsKKyNlbmRpZgorCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsZXJG
cmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gdm0uaW50
ZXJwcmV0ZXI7CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBnbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgaWYgKGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNl
bHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBpbnRlcnByZXRlci0+ZXhlY3V0ZShl
dmFsLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbikpOworI2VuZGlm
CiB9CiAKIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQpAQCAtODk2
LDYgKzkxMCwyMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmplY3QqCiAgICAgICAgIHByb3RvQ2FsbEZy
YW1lLmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUs
IGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgaWYgKGlzSlNDYWxsICYmIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydCkgeworICAgICAgICBpZiAoanNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKSkgeworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXJJRCgpLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0
aW9uKS0+c291cmNlQ29kZSgpLT5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7CisgICAgICAgICAg
ICAvLyBXZSBjYW4gY2FsbCB0ZW1wRnVuY3Rpb24tPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXIoKS0+
c291cmNlKCkudXRmOCgpLmRhdGEoKSB0byBnZXQgdGhlIHNjcmlwdCBzb3VyY2UKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUt
PmNsYXNzU291cmNlKCkucHJvdmlkZXIoKSkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpLCBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXIoKS0+c291cmNlVVJMKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksICJVbmF2YWlsYWJsZSIpOworICAg
ICAgICAgICAgLy8gVGhpcyBlbHNlIGNvbmRpdGlvbiBjYXRlcnMgbWljcm90YXNrcy4gV2UgdHJ5
IHRvIGxpbmsgY29kZSBleGVjdXRlZCBpbiBtaWNyb3Rhc2tzIHRvIHRoZWlyIHBhcmVudCBzY3Jp
cHQgbGlrZSBhbnkgb3RoZXIgY2FsbGJhY2suCisgICAgICAgICAgICAvLyBIb3dldmVyLCBtaWNy
b3Rhc2tzIHNlZW0gdG8gaGF2ZSB0aGVpciBvd24gaWRlbnRpZmVyIHdoZW4gYWNjZXNzZWQgd2l0
aCAoY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5laXRoZXJDb2RlQmxvY2soKS0+c291
cmNlKCkucHJvdmlkZXJJRCgpKS4KKyAgICAgICAgICAgIC8vIFdlIGNhbGwgY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSB0byBnZXQgdGhl
IHBhcmVudCBJRCAodGhlIHNjcmlwdCB0aGF0IGNyZWF0ZWQgdGhlIG1pY3JvdGFzaykgb2YgYSBt
aWNyb3Rhc2suCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIEpTVmFsdWUgcmVzdWx0
OwogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MDQs
OSArOTM1LDIxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICAgICAgcmVzdWx0ID0gaml0
Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24ucmF3UG9pbnRlcigpLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOworI2lmIEVO
QUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgaWYgKGlzSlNDYWxsICYmIGdsb2JhbE9iamVj
dC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOworI2VuZGlmCiAgICAgfQogCisjaWYgRU5BQkxF
KFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZChnbG9iYWxPYmplY3QpOworI2VuZGlmCiAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4ocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlMzIxZTJiZDI1ODg1
YWM2MTJjMWVlYmM4NWQzMjQ0ZmE1ZDZhNzM3Li4wYjE3ZWVkYTIzYWE5ZTFhMzdhZWI4OTUwMTQ3
NmYxOTJkZDEwNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNjc4LDYgKzY3OCwxMCBAQCBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVs
bHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpbmF0ZVN0
cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8g
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydCwK
KyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3Qo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZk
NjA1M2JlYWRjNTVmNzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0
ZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCkBAIC0zOTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
IEpTR2xvYmFsT2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxw
dHIsIC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcK
ICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZh
bE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAK
IC8qIFNvdXJjZSBmb3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEz
MjNmODg2MDQ0YTBiNjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVm
MjgyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaApAQCAtMjQwLDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
ewogCiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFs
T2JqZWN0KiwgSlNQcm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0
ZVN0cmVhbWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5j
dGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBi
b29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25F
bmRQdHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpT
R2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwCmluZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIu
LjQwMmM2YTIyYzAxNTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAKQEAgLTQ5NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBp
ZiAoIWV2YWwpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFC
TEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uU3RhcnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRp
b25TdGFydChnbG9iYWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+
c291cmNlVVJMKCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0u
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmds
b2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsK
KyNlbHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0u
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmds
b2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAxMDVlYzc5ZTc2N2JjYTA0NmI1ZWE5YjljNTg1MTVkOTI0MjQyYTJjLi5iNjM4MTU1ZmVl
ZWU3YmE1MDdkYWI2ZTc4ZTliYzQxMjFiYjk0ODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTQ2Nyw2
ICsxNDY3LDcgQEAgbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKIGxvYWRlci9FbXB0
eUNsaWVudHMuY3BwCitsb2FkZXIvRXhlY3V0aW9uU3RhY2suY3BwCiBsb2FkZXIvRlRQRGlyZWN0
b3J5UGFyc2VyLmNwcAogbG9hZGVyL0ZldGNoSWRpb21zLmNwcAogbG9hZGVyL0Zvcm1TdGF0ZS5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA0OGVkNDFiMTAxM2JmNTM3MzY0MTgzN2M3MDRlMTdmMTQwMTE1ZDkwLi5kM2M4NWEy
NzhkMGJmODA1ZDk3OWQ0ZmZhMWZiZWU3Mjg0ZmFhZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MTY3LDYgKzUxNjcsNyBA
QAogCQlGNUMwNDFEQjBGRkNBN0NFMDA4MzlENEEgLyogSFRNTERhdGFMaXN0RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMDQxRDgwRkZD
QTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGNUMwNDFFNzBGRkNBOTZEMDA4MzlENEEg
LyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNUMwNDFFMjBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxp
c3RFbGVtZW50LmggKi87IH07CiAJCUY1RTBDNjVDMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hv
b3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjVFMEM2NUExNjQzQzQyQzAwRDZDQjY5IC8qIEJhc2VDaG9v
c2VyT25seURhdGVBbmRUaW1lSW5wdXRUeXBlLmggKi87IH07CisJCUY2NDA4MzM4MjRDMjdCODkw
MDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0
YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RjkxNkM0OEUwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGOTE2QzQ4
QzBEQjUxMEY4MDA3NkNEODMgLyogSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsg
fTsKIAkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjlG
MEVENzcwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oICov
OyB9OwogCQlGQTY1NEE2QzExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVG9rZW5FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQTY1NEE2QTEx
MDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVG9rZW5FbGVtZW50LmggKi87IH07CkBAIC0xNjEwNiw2
ICsxNjEwNyw4IEBACiAJCUY1QzA0MUUyMEZGQ0E5NkQwMDgzOUQ0QSAvKiBKU0hUTUxEYXRhTGlz
dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGF0YUxp
c3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1RTBDNjU5MTY0M0M0
MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1RTBDNjVB
MTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNjQwODMzNjI0
QzI3QjdFMDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXhlY3V0aW9uU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNjQwODMz
NzI0QzI3QjdFMDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhl
Y3V0aW9uU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjc1QTA1OUFGMTcw
RDhGQUE1QjhDQUJFIC8qIE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY4MjE2Mjk5MDI5RjRGQjUwMTAwMDEzMSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
azsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRjkxNkM0OEIwREI1MTBG
ODAwNzZDRDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ1OCw2ICsyNjQ2MSw4IEBA
CiAJCQkJRjUyQUQ1RTMxNTM0MjQ1RjAwNTlGQkU2IC8qIEVtcHR5Q2xpZW50cy5jcHAgKi8sCiAJ
CQkJQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovLAogCQkJCTQx
NERFREU1MUY5RkU5MTUwMDQ3QzQwRCAvKiBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50LmggKi8sCisJ
CQkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmNwcCAqLywKKwkJ
CQlGNjQwODMzNzI0QzI3QjdFMDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2suaCAqLywKIAkJCQlD
RUJCOEMzMjIwNzg2RENCMDAwMzk1NDcgLyogRmV0Y2hJZGlvbXMuY3BwICovLAogCQkJCUNFQkI4
QzMxMjA3ODZEQ0IwMDAzOTU0NyAvKiBGZXRjaElkaW9tcy5oICovLAogCQkJCTQxQUQ3NTM5MUNF
RjZCQ0UwMEEzMTQ4NiAvKiBGZXRjaE9wdGlvbnMuaCAqLywKQEAgLTMwOTIxLDYgKzMwOTI2LDcg
QEAKIAkJCQk1MUY2NDU2MjFGNDUzOThGMDBCNTRERUQgLyogRXhjZXB0aW9uRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkQyOTM4NkIyMzVGNkI2OTAwQzdGM0IyIC8qIEV4Y2VwdGlvbkRldGFp
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDE5NjMxMUQ2Q0FCNzYwMEZDN0U0NyAvKiBFeGNl
cHRpb25Pci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjY0MDgzMzgyNEMyN0I4OTAwODkzMjZFIC8q
IEV4ZWN1dGlvblN0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzdGQjM0NTFGOUVBMDZEMDBE
MEZDMzEgLyogRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFE
Q0RGNDQxREExQzQ1NDAwRUE1QjkzIC8qIEV4dGVuZGVkQ29sb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zR0wuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAK
aW5kZXggZjkzZTNmZDMxYzY1ZTRiMmU1MjI3NDU3OTg3M2FhYTFkYzRmNzE2Yy4uNjY1ZmNiYThm
Mzg2MGYwOTNiOTJkMmNlM2VjYzMyYmUzNDY5NzI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCkBAIC02MSw2ICs2MSw5IEBACiAjaW5jbHVk
ZSAiQ2hyb21lQ2xpZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJ
Q1MpCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtODgsNiArOTEsMTAgQEAgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNET01XaW5kb3dCYXNlOjpzX2dsb2JhbE9iamVj
dE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIsCiAgICAgbnVsbHB0ciwKICNlbmRpZgorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgJnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQsCisgICAgJnJlZ2lzdGVyRXZhbE9yRnVu
Y3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kLAorI2VuZGlmCiB9OwogCiBKU0RP
TVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBSZWZQdHI8RE9NV2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCkBAIC00
ODcsNCArNDk0LDI2IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjppbnN0YW50aWF0ZVN0cmVhbWlu
ZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCitib29sIEpTRE9NV2luZG93QmFzZTo6cmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydChjb25zdCBK
U0dsb2JhbE9iamVjdCogb2JqZWN0LCBjb25zdCB1aW50NjRfdCBzY3JpcHRJRCwgY29uc3QgU3Ry
aW5nJiBzY3JpcHRVUkwpCit7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBK
U0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRv
d0Jhc2UqPihvYmplY3QpOworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
cHVzaEFjdGl2ZVNjcmlwdCgqdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCktPmRvY3VtZW50
KCksIHNjcmlwdElELCBzY3JpcHRVUkwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFs
T3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQoY29uc3QgSlNHbG9iYWxP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGNvbnN0IEpT
RE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PGNvbnN0IEpTRE9NV2luZG93
QmFzZSo+KG9iamVjdCk7CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5w
b3BBY3RpdmVTY3JpcHQoKnRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5oCmluZGV4IGVjNmRkYzE3MDIxMDhlOTljZjk5ZGMzNjMzNWUy
NWUwMDY0NWQ4NWEuLmFhZGI5OTY2YTY4ODFmMmU2ZjUwNzliNzdiYzYzOTI1NWE0ZWMyNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCkBAIC04NSw2
ICs4NSwxMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBmaXJlRnJhbWVDbGVhcmVkV2F0
Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93Kik7CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFU
SVNUSUNTKQorICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0
IHVpbnQ2NF90LCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCByZWdpc3RlckV2YWxP
ckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZChjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIEpTRE9NV2luZG93QmFzZShK
U0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWZQdHI8RE9NV2luZG93PiYmLCBKU1dpbmRvd1By
b3h5Kik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNXaW5kb3dQcm94eSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5k
b3dCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
QmFzZS5jcHAKaW5kZXggZGNlNzM4MjBiYmJmZDliOTVjNTg3OWQxM2VmNjVlYWI5OGE5MDQxOC4u
N2ZiMmI3NmRhYjZkOWM5ZTg5MTgyOWQwMTJjNTAwODU1OWEyOGMyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCkBAIC01
MSw2ICs1MSwxMCBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU1JlbW90ZURPTVdp
bmRvd0Jhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPQogICAgIG51bGxwdHIsIC8vIGRl
ZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxs
cHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJ
Q1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rp
b25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTUmVtb3Rl
RE9NV2luZG93QmFzZTo6SlNSZW1vdGVET01XaW5kb3dCYXNlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFJlZlB0cjxSZW1vdGVET01XaW5kb3c+JiYgd2luZG93LCBKU1dpbmRvd1Byb3h5
KiBwcm94eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVCYXNlLmNwcAppbmRleCBjNDRmMmZiM2EwYjA1ZGFhYjFhOGE5ZTJmODliNTJk
ODUxZWI0MzY4Li45ZWIwYWZjY2QzMDk3N2FmOWM5OGUzOTc2ZTMzMjRlMTYwNTJjZDNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29w
ZUJhc2UuY3BwCkBAIC02OSw2ICs2OSwxMCBAQCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSBKU1dvcmtlckdsb2JhbFNjb3BlQmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZQogICAg
ICZkZWZhdWx0TGFuZ3VhZ2UsCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAg
IG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JG
dW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQKKyNlbmRpZgogfTsKIAogSlNX
b3JrZXJHbG9iYWxTY29wZUJhc2U6OkpTV29ya2VyR2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8V29ya2VyR2xvYmFsU2NvcGU+JiYg
aW1wbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEds
b2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRH
bG9iYWxTY29wZUJhc2UuY3BwCmluZGV4IGIxNGI4MTU0MmRiODg5ZWM2ZDI1OWJjNWI3MGVmMmE1
MDk5Yzk2ZDEuLmQ4MmM4YjMxYTYxY2E4ZDEyZTMxNmYzM2Y3ZDA4OWQ3YTFmY2YzNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGVCYXNlLmNwcApAQCAtNjEsNiArNjEsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUgSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlOjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmwKICAg
ICAmZGVmYXVsdExhbmd1YWdlLAogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAg
ICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9y
RnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8V29ya2xldEdsb2JhbFNjb3Bl
PiYmIGltcGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuY3BwCmluZGV4IDQ2MmI5ODRiMzRkZjI3YzI0MjlmN2YyMTE2ZGE3MjI1MTNlNGQ5N2EuLmVj
YjE4Njg5YTg3ZWI3ZjQyYjdiYzJiODdkZWE2NGFjYzNjMTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGF5bWVudENvb3JkaW5hdG9yLmgi
CiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgogI2luY2x1ZGUgIlJ1bkphdmFTY3JpcHRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAi
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgpAQCAtMTM5LDYgKzE0MCw5IEBAIFZhbHVlT3JFeGNlcHRpb24gU2NyaXB0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjCiAKICAg
ICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKICAgICBTZXRGb3JTY29wZTxjb25zdCBV
UkwqPiBzb3VyY2VVUkxTY29wZShtX3NvdXJjZVVSTCwgJnNvdXJjZVVSTCk7CisgICAgCisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1
c2hBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQoKSwganNTb3VyY2VDb2RlLnByb3ZpZGVy
SUQoKSwgc291cmNlVVJMLnN0cmluZygpKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUsIHNvdXJjZVVSTC5zdHJpbmcoKSwgc291cmNl
Q29kZS5zdGFydExpbmUoKSwgc291cmNlQ29kZS5zdGFydENvbHVtbigpKTsKIApAQCAtMTU0LDkg
KzE1OCwxNSBAQCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
b3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogICAgICAgICBvcHRpb25hbERldGFp
bHMgPSBXVEZNb3ZlKGRldGFpbHMpOwogICAgIH0KIAotICAgIGlmIChvcHRpb25hbERldGFpbHMp
CisgICAgaWYgKG9wdGlvbmFsRGV0YWlscykgeworICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnBvcEFjdGl2ZVNjcmlwdCgq
bV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCpvcHRp
b25hbERldGFpbHMpOworICAgIH0KIAorICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1l
bnQoKSk7CisgICAgCiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDM1NWRk
YzdhNzU1Yjg4NTU0OGYwMTEwNzg4ODM2YjQwZjE3ZWU1ZjkuLjFlMmZhYjc3Y2I2NzUzNGMyMDky
YmQ3OGE4ZDM1NGZlN2ZmMzEyNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC01MDE1LDYgKzUwMTUsNTAgQEAgc3ViIEdl
bmVyYXRlQXR0cmlidXRlR2V0dGVyQm9keURlZmluaXRpb24KICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgIH0KICAgICAK
KyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnQgSlNHQ09ic2VydmF0aW9uIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncyBKU01lbW9y
eUluZm8gSlNNYWxsb2NTdGF0aXN0aWNzIEpTSW50ZXJuYWxTZXR0aW5ncyBKU01vY2tDRE1GYWN0
b3J5IEpTTW9ja1BheW1lbnRDb29yZGluYXRvciBKU0ludGVybmFsc01hcExpa2UgSlNJbnRlcm5h
bHNTZXRMaWtlIEpTU2VydmljZVdvcmtlckludGVybmFscyApOworICAgIG15ICRzaG91bGRJbnN0
cnVtZW50ID0gMTsKKworICAgIGZvciAoQGFwaXNOb3RUb0luc3RydW1lbnQpIHsKKyAgICAgICAg
aWYgKCRfIGVxICRjbGFzc05hbWUpIHsKKyAgICAgICAgICAgICRzaG91bGRJbnN0cnVtZW50ID0g
MDsKKyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJHNob3Vs
ZEluc3RydW1lbnQpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRvY3VtZW50LmgiKTsK
KyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJlc291cmNlTG9hZE9ic2VydmVyLmgiKTsKKyAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkge1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpO1xuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFt
ZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5v
bmUiOworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1
c3RvbUdldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNv
ZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRh
dHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRh
cGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsK
KyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRy
aWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5u
YW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgQHRlbXAgPSAoKTsKKyAgICAg
ICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHBy
ZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAkYXR0cmlidXRl
KTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7CisgICAgICAgICAgICAgICAg
JGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
XCIke2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIH1cbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICB9XG4iKTsKKyAgICB9CisKICAgICBpZiAoJGhhc0N1c3RvbUdldHRlcikg
ewogICAgICAgICBteSAkaW1wbEdldHRlckZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5X
S19sY2ZpcnN0KCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9
IHx8ICRhdHRyaWJ1dGUtPm5hbWUpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cmV0dXJuIHRoaXNPYmplY3QuJHtpbXBsR2V0dGVyRnVuY3Rpb25OYW1lfShsZXhpY2FsR2xvYmFs
T2JqZWN0KTtcbiIpOwpAQCAtNTE0OSw2ICs1MTkzLDU0IEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0
ZVNldHRlckJvZHlEZWZpbml0aW9uCiAKICAgICBHZW5lcmF0ZUN1c3RvbUVsZW1lbnRSZWFjdGlv
bnNTdGFja0lmTmVlZGVkKCRvdXRwdXRBcnJheSwgJGF0dHJpYnV0ZSwgImxleGljYWxHbG9iYWxP
YmplY3QiKTsKIAorICAgIG15IEBhcGlzTm90VG9JbnN0cnVtZW50ID0gcXcoSlNRdWlja1RpbWVQ
bHVnaW5SZXBsYWNlbWVudCBKU0dDT2JzZXJ2YXRpb24gSlNNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzIEpTTWVtb3J5SW5mbyBKU01hbGxvY1N0YXRpc3RpY3MgSlNJbnRlcm5hbFNldHRpbmdzIEpT
TW9ja0NETUZhY3RvcnkgSlNNb2NrUGF5bWVudENvb3JkaW5hdG9yIEpTSW50ZXJuYWxzTWFwTGlr
ZSBKU0ludGVybmFsc1NldExpa2UgSlNTZXJ2aWNlV29ya2VySW50ZXJuYWxzICk7CisgICAgbXkg
JHNob3VsZEluc3RydW1lbnQgPSAxOworCisgICAgZm9yIChAYXBpc05vdFRvSW5zdHJ1bWVudCkg
eworICAgICAgICBpZiAoJF8gZXEgJGNsYXNzTmFtZSkgeworICAgICAgICAgICAgJHNob3VsZElu
c3RydW1lbnQgPSAwOworICAgICAgICAgICAgbGFzdDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICgkc2hvdWxkSW5zdHJ1bWVudCkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRG9j
dW1lbnQuaCIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkge1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkge1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7XG4iKTsKKworICAgICAgICBteSAk
YXBpQ2xhc3NOYW1lID0gc3Vic3RyKCRjbGFzc05hbWUsIDIpOworICAgICAgICBteSAkYXBpRnVu
Y05hbWUgPSAiTm9uZSI7CisgICAgICAgIG15ICRhcGlBcmd1bWVudHMgPSAiIjsKKworICAgICAg
ICBpZiAoSGFzQ3VzdG9tU2V0dGVyKCRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAkYXBpRnVu
Y05hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkYXR0cmlidXRlLT5uYW1lKTsKKyAg
ICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSBlcSAiRXZlbnRIYW5kbGVyIikg
eworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gRXZlbnRIYW5kbGVyQXR0cmlidXRlRXZlbnRO
YW1lKCRhdHRyaWJ1dGUpOworICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25z
dHJ1Y3RvclR5cGUoJGF0dHJpYnV0ZS0+dHlwZSkpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFt
ZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e1JlcGxhY2VhYmxlfSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1l
ID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57UHV0Rm9yd2FyZHN9KSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUg
PSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgQHRl
bXAgPSAoKTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJh
dG9yLT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5u
YW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgXCIke2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1
bWVudHN9XCIpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAg
IH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICB9XG4iKTsKKyAgICB9CisKICAgICBpZiAoJG5l
ZWRTZWN1cml0eUNoZWNrKSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPnR5
cGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTUzNjYsNiArNTQ1OCw0MyBAQCBzdWIgR2Vu
ZXJhdGVPcGVyYXRpb25Cb2R5RGVmaW5pdGlvbgogCiAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50
UmVhY3Rpb25zU3RhY2tJZk5lZWRlZCgkb3V0cHV0QXJyYXksICRvcGVyYXRpb24sICIqbGV4aWNh
bEdsb2JhbE9iamVjdCIpIHVubGVzcyAkZ2VuZXJhdGluZ092ZXJsb2FkRGlzcGF0Y2hlcjsKIAor
ICAgIG15IEBhcGlzTm90VG9JbnN0cnVtZW50ID0gcXcoSlNNb2NrUGFnZU92ZXJsYXkgSlNJbnRl
cm5hbFNldHRpbmdzR2VuZXJhdGVkIEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQgSlNHQ09i
c2VydmF0aW9uIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncyBKU01lbW9yeUluZm8gSlNNYWxs
b2NTdGF0aXN0aWNzIEpTSW50ZXJuYWxTZXR0aW5ncyBKU01vY2tDRE1GYWN0b3J5IEpTTW9ja1Bh
eW1lbnRDb29yZGluYXRvciBKU0ludGVybmFsc01hcExpa2UgSlNJbnRlcm5hbHNTZXRMaWtlIEpT
U2VydmljZVdvcmtlckludGVybmFscyApOworICAgIG15ICRzaG91bGRJbnN0cnVtZW50ID0gMTsK
KworICAgIGZvciAoQGFwaXNOb3RUb0luc3RydW1lbnQpIHsKKyAgICAgICAgaWYgKCRfIGVxICRj
bGFzc05hbWUpIHsKKyAgICAgICAgICAgICRzaG91bGRJbnN0cnVtZW50ID0gMDsKKyAgICAgICAg
ICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJHNob3VsZEluc3RydW1lbnQp
IHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRvY3VtZW50LmgiKTsKKyAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlJlc291cmNlTG9hZE9ic2VydmVyLmgiKTsKKyAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIpOworICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkge1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7XG4iKTsKKworICAgICAgICBteSAkYXBpQ2xhc3NOYW1lID0gc3Vic3RyKCRj
bGFzc05hbWUsIDIpOworICAgICAgICBteSAkYXBpRnVuY05hbWUgPSAiTm9uZSI7CisKKyAgICAg
ICAgaWYgKCRnZW5lcmF0aW5nT3ZlcmxvYWREaXNwYXRjaGVyKSB7CisgICAgICAgICAgICAkYXBp
RnVuY05hbWUgPSAkZnVuY3Rpb25OYW1lOworICAgICAgICB9IGVsc2lmIChIYXNDdXN0b21NZXRo
b2QoJG9wZXJhdGlvbikpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRmdW5jdGlvbklt
cGxlbWVudGF0aW9uTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRhcGlGdW5j
TmFtZSA9ICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZTsKKyAgICAgICAgfQorCisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCBcIiR7YXBpQ2xhc3NOYW1lfTo6
JHthcGlGdW5jTmFtZX1cIik7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICAgICAgfVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgfVxu
Iik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgIH1cbiIpOworICAgIH0KKwogICAg
ICMgRm9yIG92ZXJsb2Fkcywgd2UgZ2VuZXJhdGUgdGhlIHNlY3VyaXR5IGNoZWNrIGluIHRoZSBv
dmVybG9hZCBkaXNwYXRjaGVyLCBpbnN0ZWFkIG9mIHRoZSBib2R5IG9mIGVhY2ggb3ZlcmxvYWQs
IGFzIHBlciBzcGVjaWZpY2F0aW9uOgogICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jZGZuLWNyZWF0ZS1vcGVyYXRpb24tZnVuY3Rpb24KICAgICBpZiAoISRpc092ZXJsb2Fk
ZWQgfHwgJGdlbmVyYXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgK
aW5kZXggNDFjOWZlYzYxZTI4YmFjMzg3Y2NjN2I5YjMzZjVmZDBkOGYzNDFlMi4uZTMwOTJiN2U5
ZjUyNmU4MjE2MDhmOTM5N2YyZTVkNjNiZmQyOWQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAg
LTYzMyw3ICs2MzMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJBWE9iamVjdENhY2hlKCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxQYWdlSWRlbnRpZmllcj4gcGFnZUlEKCkg
Y29uc3Q7Ci0gICAgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKCkgY29uc3Q7Cisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQoKSBjb25zdDsKKyNlbHNlCisgICAgICAgIE9wdGlv
bmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0OworI2VuZGlmCiAKICAgICAvLyB0
byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBoZWJyZXcgYW5kIGFyYWJpYyBwYWdlcyByaWdodAogICAg
IHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRXhlY3V0aW9uU3RhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlv
blN0YWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmQ1YWQ4MmU2ODljODNmMGU4M2QzN2JiN2EzYjE5MjQ2
MjhjNGQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlv
blN0YWNrLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhlY3V0aW9uU3RhY2suaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTdHJpbmcgRXhlY3V0aW9uU3RhY2s6OnRvSlNPTlN0cmluZyh1aW50NjRf
dCBmcmFtZUlEKQoreworICAgIGlmIChkb2N1bWVudElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgPT0g
ZG9jdW1lbnRJZFVSTE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBh
dXRvIGRvY3VtZW50VVJMID0gZG9jdW1lbnRJZFVSTE1hcC5nZXQoZnJhbWVJRCk7CisKKyAgICBh
dXRvIG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgb2JqZWN0LT5zZXRTdHJp
bmcoIlRvcExldmVsRG9tYWluIiwgcmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOworICAgIG9i
amVjdC0+c2V0U3RyaW5nKCJUb3BMZXZlbFVSTCIsIGRvY3VtZW50VVJMLnN0cmluZygpKTsKKyAg
ICBvYmplY3QtPnNldEludGVnZXIoIkZyYW1lSUQiLCBmcmFtZUlEKTsKKyAgICBhdXRvIHNjcmlw
dEV4ZWN1dGlvbiA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAKKyAgICBpZiAoYXBpc0Nh
bGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCkgPT0gYXBpc0NhbGxlZEJ5U2Ny
aXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAgIG9iamVjdC0+c2V0QXJyYXkoIlNjcmlw
dEV4ZWN1dGlvbiIsIFdURk1vdmUoc2NyaXB0RXhlY3V0aW9uKSk7CisgICAgICAgIHJldHVybiBv
YmplY3QtPnRvSlNPTlN0cmluZygpOworICAgIH0KKyAgICAKKyAgICBhdXRvIGFwaXNDYWxsZWRC
eVNjcmlwdHNJbkRvY3VtZW50ID0gYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmdldChm
cmFtZUlEKTsKKyAgICAKKyAgICBmb3IgKGF1dG8gc2NyaXB0V2l0aEFQSXNLZXkgOiBhcGlzQ2Fs
bGVkQnlTY3JpcHRzSW5Eb2N1bWVudC5rZXlzKCkpIHsKKyAgICAgICAgYXV0byBzY3JpcHRXaXRo
QVBJcyA9IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50LmdldChzY3JpcHRXaXRoQVBJc0tl
eSk7CisgICAgICAgIGF1dG8gYWNjZXNzZWRBUElzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwor
ICAgICAgICBmb3IgKGF1dG8gY29uc3QmIEFQSU5hbWUgOiBzY3JpcHRXaXRoQVBJcykgeworICAg
ICAgICAgICAgYXV0byB0ZW1wID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAg
IHRlbXAtPnNldEludGVnZXIoQVBJTmFtZS5rZXksIEFQSU5hbWUudmFsdWUpOworICAgICAgICAg
ICAgYWNjZXNzZWRBUElzLT5wdXNoT2JqZWN0KFdURk1vdmUodGVtcCkpOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8gYXBpRXhlY3V0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXBpRXhlY3V0aW9uLT5zZXRJbnRlZ2VyKCJTY3JpcHRJRCIsIHNjcmlwdFdpdGhBUElzS2V5
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZmlu
ZChmcmFtZUlEKSA9PSBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZW5kKCkpCisgICAgICAg
ICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygiU2NyaXB0VVJMIiwgIlVuYXZhaWxhYmxlIik7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRV
UkxzID0gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmdldChmcmFtZUlEKTsKKyAgICAgICAg
ICAgIGlmIChkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLmZpbmQoc2NyaXB0V2l0aEFQSXNLZXkp
ID09IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMuZW5kKCkpCisgICAgICAgICAgICAgICAgYXBp
RXhlY3V0aW9uLT5zZXRTdHJpbmcoIlNjcmlwdFVSTCIsICJVbmF2YWlsYWJsZSIpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5nKCJTY3Jp
cHRVUkwiLCBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLmdldChzY3JpcHRXaXRoQVBJc0tleSkp
OworICAgICAgICB9CisgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0QXJyYXkoIkFjY2Vzc2VkQVBJ
cyIsIFdURk1vdmUoYWNjZXNzZWRBUElzKSk7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbi0+cHVz
aE9iamVjdChXVEZNb3ZlKGFwaUV4ZWN1dGlvbikpOworICAgIH0KKyAgICAKKyAgICBvYmplY3Qt
PnNldEFycmF5KCJTY3JpcHRFeGVjdXRpb24iLCBXVEZNb3ZlKHNjcmlwdEV4ZWN1dGlvbikpOwor
ICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOworfQorCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI4MTYxMjM0MzZlMTc2
ZmY3MGU3MGY2NzU5MjgzOGQ5MjgwMWVjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRXhlY3V0aW9uU3RhY2sgeworICAgIGV4cGxpY2l0IEV4
ZWN1dGlvblN0YWNrKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCisgICAgICAgIDog
cmVnaXN0cmFibGVEb21haW4geyBkb21haW4gfQorICAgIHsKKyAgICB9CisKKyAgICBFeGVjdXRp
b25TdGFjaygpID0gZGVmYXVsdDsKKyAgICBFeGVjdXRpb25TdGFjayhjb25zdCBFeGVjdXRpb25T
dGFjayYpID0gZGVsZXRlOworICAgIEV4ZWN1dGlvblN0YWNrJiBvcGVyYXRvcj0oY29uc3QgRXhl
Y3V0aW9uU3RhY2smKSA9IGRlbGV0ZTsKKyAgICBFeGVjdXRpb25TdGFjayhFeGVjdXRpb25TdGFj
ayYmKSA9IGRlZmF1bHQ7CisgICAgRXhlY3V0aW9uU3RhY2smIG9wZXJhdG9yPShFeGVjdXRpb25T
dGFjayYmKSA9IGRlZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9KU09OU3Ry
aW5nKHVpbnQ2NF90IC8qIEZyYW1lSUQgKi8pOworCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVn
aXN0cmFibGVEb21haW47CisKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRoZSBtYXBw
aW5nIGJldHdlZW4gRnJhbWVJRCBhbmQgRG9jdW1lbnQgVVJMLgorICAgIEhhc2hNYXA8dWludDY0
X3QsIFVSTD4gZG9jdW1lbnRJZFVSTE1hcDsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFp
bnRhaW5zIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNjcmlwdHMgaW4gZWFjaCBkb2N1bWVudC4KKyAg
ICAvLyBDdXJyZW50bHksIGl0IG9ubHkgY2FwdHVyZXMgY2xhc3NpYyBzY3JpcHRzLgorICAgIEhh
c2hNYXA8dWludDY0X3QsIFZlY3Rvcjx1aW50NjRfdD4+IGV4ZWN1dGluZ1NjcmlwdHNJbkRvY3Vt
ZW50czsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRoZSBtYXBwaW5nIGJl
dHdlZW4gRnJhbWVJRCwgU2NyaXB0SUQsIGFuZCBTY3JpcHQgVVJMcworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4+IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVS
TE1hcDsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRoZSBBUElzIGNhbGxl
ZCBieSBhIHNjcmlwdCBpbiBhIGRvY3VlbW50LgorICAgIC8vIEhhc2hNYXA8RnJhbWVJRCwgSGFz
aE1hcDxTY3JpcHRJRCwgSGFzaENvdW50ZWRTZXQ8Q291bnRPZkFQSU5hbWVzPj4+CisgICAgSGFz
aE1hcDx1aW50NjRfdCwgSGFzaE1hcDx1aW50NjRfdCwgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPj4+
IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50czsKK307CisKK30KKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCA2N2ZiZmZjMmQy
MGFiMmZkOGJhNTZhOGRmYTRkNGFlNzhhOTVlYjIwLi4wMWQ4YzA2MGJiYTBkZjEwYjY0Mzk5ZDNk
NzhjNzU4NDM2MjA2MWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU3LDYgKzU4LDE0IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgbG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmLCBjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmdGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiAvKiBmaXJzdFBhcnR5RG9tYWluICovLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgLyogdGhp
cmRQYXJ0eURvbWFpbiAqLywgYm9vbCAvKiBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiAqLykg
eyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaEFjdGl2ZVNjcmlwdChjb25zdCBEb2N1bWVudCYs
IGNvbnN0IHVpbnQ2NF90IC8qIHNjcmlwdElEICovLCBjb25zdCBTdHJpbmcmIC8qIHNjcmlwdFVS
TCAqLykgeyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBwb3BBY3RpdmVTY3JpcHQoY29uc3QgRG9j
dW1lbnQmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB1aW50NjRfdCBwZWVrQWN0aXZlU2Ny
aXB0KGNvbnN0IERvY3VtZW50JikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBl
ZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsgfQor
CisgICAgdmlydHVhbCB2b2lkIGxvZ0FjY2Vzc2VkQVBJcyhjb25zdCBEb2N1bWVudCYsIGNvbnN0
IFN0cmluZyYgLyogYXBpTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGVla0FjY2Vz
c2VkQVBJcyhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsgfQorCiAgICAgdmlydHVhbCBT
dHJpbmcgc3RhdGlzdGljc0ZvclVSTChjb25zdCBVUkwmKSB7IHJldHVybiB7IH07IH0KICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSgpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBjbGVhclN0YXRlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVy
LmNwcAppbmRleCBlMjNjNzkxNzJhNTg5YjdlNjg3ZTcwYTg2MGI0ODVlYmVlNGZjNGRjLi4zOTFj
MWY5YmJjZDdlMzEwMTQ3NjZiMWI1ODUzMDFiZjIzOWRkZGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTk4LDYgKzk4LDE3IEBAIFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUElf
U1RBVElTVElDUykKK0V4ZWN1dGlvblN0YWNrJiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5z
dXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VwaGVtZXJhbCgpKTsKKwor
ICAgIHJldHVybiBtX2V4ZWN1dGlvblN0YWNrTWFwLmVuc3VyZShkb21haW4sIFsmZG9tYWluXSB7
CisgICAgICAgIHJldHVybiBFeGVjdXRpb25TdGFjayhkb21haW4pOworICAgIH0pLml0ZXJhdG9y
LT52YWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzY2hl
ZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuaXNFbXB0eSgpKSB7CkBAIC0yNjEsNiArMjcyLDE5NSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnB1c2hB
Y3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCB1aW50NjRfdCBzY3Jp
cHRJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkp
CisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAg
UmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9Owor
ICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsK
KworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdp
c3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgCisgICAgLy8gcmVnaXN0ZXIg
c2NyaXB0IGlkIHdpdGggc2NyaXB0IHVybCBmb3IgZWFjaCBmcmFtZQorICAgIGlmIChleGVjdXRp
b25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZmluZChmcmFtZUlEKSAhPSBleGVj
dXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZW5kKCkpIHsKKyAgICAgICAg
YXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzID0gZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJ
ZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIC8vIHdlIHVzZSBhZGQg
aGVyZSBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgc2NyaXB0IFVSTCBpcyBub25lIChp
biBjYXNlIG9mIG1pY3JvdGFza3MpLgorICAgICAgICAvLyBhZGQgd2lsbCBlbnN1cmUgdGhhdCB0
aGUgZXhpc2l0bmcgc2NyaXB0IFVSTCBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisgICAgICAg
IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMtPnZhbHVlLmFkZChzY3JpcHRJRCwgc2NyaXB0VVJM
KTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3Ry
aW5nPiBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzOworICAgICAgICBkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLnNldChzY3JpcHRJRCwgc2NyaXB0VVJMKTsKKyAgICAgICAgZXhlY3V0aW9uU3Rh
Y2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLnNldChmcmFtZUlELCBkb2N1bWVudElkQW5k
U2NyaXB0SWRVUkxzKTsKKyAgICB9CisgICAgCisgICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1
dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4
ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRvIGV4ZWN1dGlu
Z1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0lu
RG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0
ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc2NyaXB0SUQpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg
CisgICAgICAgIFZlY3Rvcjx1aW50NjRfdD4gZXhlY3V0aW5nU2NyaXB0c1N0YWNrOworICAgICAg
ICBleGVjdXRpbmdTY3JpcHRzU3RhY2suYXBwZW5kKHNjcmlwdElEKTsKKyAgICAgICAgZXhlY3V0
aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLnNldChmcmFtZUlELCBleGVjdXRp
bmdTY3JpcHRzU3RhY2spOworICAgICAgICAKKyAgICAgICAgZXhlY3V0aW9uU3RhY2suZG9jdW1l
bnRJZFVSTE1hcC5zZXQoZnJhbWVJRCwgZG9jdW1lbnQudXJsKCkpOworICAgIH0KKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oc2NyaXB0SUQpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JpcHRVUkwpOworI2VuZGlmCit9CisKK3VpbnQ2NF90IFdlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpwb3BBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gMDsKKworI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0
cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBk
b2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8mIGV4ZWN1dGlvblN0
YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJs
ZURvbWFpbik7CisgICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3Vt
ZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRv
Y3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJh
dG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJh
bWVJRCk7CisKKyAgICAgICAgaWYgKCFleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFs
dWUuaXNFbXB0eSgpKSB7CisKKyAgICAgICAgICAgIHVpbnQ2NF90IHRlbXAgPSAwOworICAgICAg
ICAgICAgdGVtcCA9IGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5sYXN0KCk7
CisKKyAgICAgICAgICAgIGlmIChleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1Njcmlw
dHNJbkRvY3VtZW50cy5yZW1vdmUoZnJhbWVJRCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLnJlbW92ZUxhc3Qo
KTsKKworICAgICAgICAgICAgcmV0dXJuIHRlbXA7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwor
dWludDY0X3QgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY3RpdmVTY3JpcHQoY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFi
bGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2
NF90IGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1
dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURv
bWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGlu
Z1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1
dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRvIGV4ZWN1dGluZ1Nj
cmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9j
dW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIGlmICghZXhlY3V0aW5nU2NyaXB0c1N0YWNr
SXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBleGVjdXRpbmdT
Y3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUubGFzdCgpOworICAgIH0KKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitTdHJpbmcg
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIFJlZ2lzdHJh
YmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRv
JiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21h
aW4ocmVnaXN0cmFibGVEb21haW4pOworCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUmVnaXN0cmFibGUgZG9tYWluOiAiKTsKKyAgICBidWls
ZGVyLmFwcGVuZChyZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSk7CisKKyAgICBmb3IgKGF1dG8g
a2V5IDogZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmtleXMoKSkg
eworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkZyYW1lIElEOiAiKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoa2V5KSk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiICAgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiU2NyaXB0
IFN0YWNrOiBbIik7CisgICAgICAgIGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3Ig
PSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChrZXkpOwor
CisgICAgICAgIGZvciAoYXV0byBjb25zdCYgZXhlY3V0aW5nU2NyaXB0IDogZXhlY3V0aW5nU2Ny
aXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChT
dHJpbmc6Om51bWJlcihleGVjdXRpbmdTY3JpcHQpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiICwiKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIl0iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuIik7CisgICAgfQorICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7
CisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpsb2dBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJp
bmcmIGFwaU5hbWUpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybjsK
KworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgYXV0byBhY3RpdmVTY3JpcHRJ
RCA9IHBlZWtBY3RpdmVTY3JpcHQoZG9jdW1lbnQpOworCisgICAgaWYgKCFhY3RpdmVTY3JpcHRJ
RCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVE
b21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBkb2N1bWVu
dC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1
cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lzdHJhYmxlRG9tYWluKTsK
KworICAgIGlmIChzdGF0aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5maW5k
KGZyYW1lSUQpICE9IHN0YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmVu
ZCgpKSB7CisgICAgICAgIGF1dG8gZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yID0gc3RhdGlz
dGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKTsKKworICAg
ICAgICBpZiAoZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5maW5kKGFjdGl2ZVNj
cmlwdElEKSAhPSBkb2N1bWVudFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVlLmVuZCgpKSB7Cisg
ICAgICAgICAgICBhdXRvIHNjcmlwdHNXaXRoQVBJc0l0ZXJhdG9yID0gZG9jdW1lbnRXaXRoU2Ny
aXB0c0l0ZXJhdG9yLT52YWx1ZS5maW5kKGFjdGl2ZVNjcmlwdElEKTsKKyAgICAgICAgICAgIHNj
cmlwdHNXaXRoQVBJc0l0ZXJhdG9yLT52YWx1ZS5hZGQoYXBpTmFtZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IGFwaXM7CisgICAgICAgICAg
ICBhcGlzLmFkZChhcGlOYW1lKTsKKyAgICAgICAgICAgIGRvY3VtZW50V2l0aFNjcmlwdHNJdGVy
YXRvci0+dmFsdWUuc2V0KGFjdGl2ZVNjcmlwdElELCBhcGlzKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEhhc2hDb3VudGVkU2V0PFN0cmluZz4+
IGFwaXNFeGVjdXRpbmdJblNjcmlwdDsKKyAgICAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiBh
cGlzOworICAgICAgICBhcGlzLmFkZChhcGlOYW1lKTsKKworICAgICAgICBhcGlzRXhlY3V0aW5n
SW5TY3JpcHQuc2V0KGFjdGl2ZVNjcmlwdElELCBhcGlzKTsKKyAgICAgICAgc3RhdGlzdGljcy5h
cGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuc2V0KGZyYW1lSUQsIGFwaXNFeGVjdXRpbmdJ
blNjcmlwdCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAg
IFVOVVNFRF9QQVJBTShhcGlOYW1lKTsKKyNlbmRpZgorfQorCitTdHJpbmcgV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQor
eworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0
cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIHVpbnQ2NF90IGZyYW1lSUQgeyBk
b2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lzdHJhYmxlRG9t
YWluKTsKKyAgICBTdHJpbmcgQVBJSlNPTlN0cmluZyA9IHN0YXRpc3RpY3MudG9KU09OU3RyaW5n
KGZyYW1lSUQpOworICAgIHJldHVybiBBUElKU09OU3RyaW5nOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZG9jdW1lbnQpOworICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKwogdm9pZCBXZWJS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBm
cmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlLCBGZXRjaERlc3RpbmF0aW9uSXNTY3JpcHRMaWtlIGlz
U2NyaXB0TGlrZSkKIHsKICAgICBpZiAoaXNFcGhlbWVyYWwoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZE9ic2VydmVyLmgKaW5kZXggMTg2ZmFhMTNmNjg0MjRkMDIzZmZlNzRiYTk1NzQ4MDNmMjNk
N2M4My4uNzIxNTFhNjFjNTBhMDA5NWYxZGZhZWZhZGM1OGZhMTZlN2ZlYjY3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9h
ZE9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKKyNpbmNsdWRlIDxXZWJDb3JlL0V4ZWN1dGlv
blN0YWNrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MuaD4KQEAgLTUyLDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSBmaW5hbDsKICAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZ0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uKTsK
IAorICAgIHZvaWQgcHVzaEFjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYsIGNv
bnN0IHVpbnQ2NF90IHNjcmlwdElELCBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCkgZmluYWw7Cisg
ICAgdWludDY0X3QgcG9wQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmlu
YWw7CisgICAgdWludDY0X3QgcGVla0FjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3JlOjpEb2N1bWVu
dCYpIGZpbmFsOworICAgIFN0cmluZyBwZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29uc3QgV2Vi
Q29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKworICAgIHZvaWQgbG9nQWNjZXNzZWRBUElzKGNvbnN0
IFdlYkNvcmU6OkRvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBhcGlOYW1lKSBmaW5hbDsKKyAgICBT
dHJpbmcgcGVla0FjY2Vzc2VkQVBJcyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOwor
CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkTG9n
VXNlckludGVyYWN0aW9uKGJvb2wpOwogI2VuZGlmCkBAIC03OCw2ICs4NywxMSBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAgIEhhc2hNYXA8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVk
VXNlckludGVyYWN0aW9uTWFwOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAg
ICBXZWJDb3JlOjpFeGVjdXRpb25TdGFjayYgZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3Ry
YWJsZURvbWFpbihjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIEhhc2hN
YXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OkV4ZWN1dGlvblN0YWNrPiBt
X2V4ZWN1dGlvblN0YWNrTWFwOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpUaW1lciBtX25vdGlm
aWNhdGlvblRpbWVyOwogCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4g
bV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406118</attachid>
            <date>2020-08-06 14:30:08 -0700</date>
            <delta_ts>2020-08-07 12:06:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200806163006.patch</filename>
            <type>text/plain</type>
            <size>802792</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi44ZGE3ODAxYjJmMDY4YjY4
OTVjZmU5ZDUyZGQ2YWNlZTdhOGNhMmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMC0wOC0wNiAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKworICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwp
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisKIDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4x
NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEu
LjgxZDFhMDliYjA3YzVjMzY2Y2JlYTY0NDIwZDViZTEyMzliNDdmMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOSBAQAorMjAyMC0wOC0wNiAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+
CisKKyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGgg
ZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdl
YiBBUElzLiAKKyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNj
cmlwdHMsIHRoYXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2Vz
IHRvIHRoZSByZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFk
ZGVkIGxhdGVyLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFz
ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1
dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRl
ckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRp
b24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21l
IG1vcmUgQW5pbWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMy
NmI3YTcyZWYzYTkzMTVjMTlkNTcuLjNjOTFkNjJlYmZjOWM1ZmVmYWRjNWZhNGU1ODRlZmJkMmNh
NWE2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDYgIFVtYXIgSXFiYWwg
IDx1aXFiYWxAYXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQg
dGhlaXIgbGlua2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2
ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWN0aXZlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0
ZjA5MDIzYjg3YWVhMjdiMDQyMzYzOWUuLmM3MmZlM2VmOTlmMDM5YzMyYjYzZjc2MWVlOGQ5ZTNk
ZjA1OWZiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9i
YWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQpAQCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
SlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVs
bHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWlu
ZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JD
YWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0LAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVy
RXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kLAorI2VuZGlmCiB9
OwogCiB2b2lkIEpTQVBJR2xvYmFsT2JqZWN0OjpyZXBvcnRVbmNhdWdodEV4Y2VwdGlvbkF0RXZl
bnRMb29wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKaW5kZXggNGU3Y2RjMWY3YzMyNzU1MTBkZTQ5ZmU3OWFlYTBiYjNiY2QxOGE3Yy4uYTQ0ZDBl
MTYwNGM3ZjM2YTEwMGFiMzYxOWYwNjIwZWM5MjNmZjA4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0xNTMsOSArMTUzLDIz
IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRUNNQU1vZGUgZWNtYU1vCiAgICAgICAgIGNhbGxlckNvZGVCbG9jay0+ZGly
ZWN0RXZhbENvZGVDYWNoZSgpLnNldChnbG9iYWxPYmplY3QsIGNhbGxlckNvZGVCbG9jaywgcHJv
Z3JhbVNvdXJjZSwgY2FsbGVyQ2FsbFNpdGVJbmRleCwgZXZhbCk7CiAgICAgfQogCisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0KQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0
aW9uU3RhcnQoZ2xvYmFsT2JqZWN0LCBldmFsLT5zb3VyY2UoKS5wcm92aWRlcklEKCksIGV2YWwt
PnNvdXJjZVVSTCgpKTsKKyNlbmRpZgorCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsZXJG
cmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gdm0uaW50
ZXJwcmV0ZXI7CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBpbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBnbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgaWYgKGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNl
bHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBpbnRlcnByZXRlci0+ZXhlY3V0ZShl
dmFsLCBnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgY2FsbGVyU2NvcGVDaGFpbikpOworI2VuZGlm
CiB9CiAKIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KQpAQCAtODk2
LDYgKzkxMCwyMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmplY3QqCiAgICAgICAgIHByb3RvQ2FsbEZy
YW1lLmluaXQobmV3Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uLCB0aGlzVmFsdWUs
IGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgaWYgKGlzSlNDYWxsICYmIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydCkgeworICAgICAgICBpZiAoanNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKSkgeworICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXJJRCgpLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0
aW9uKS0+c291cmNlQ29kZSgpLT5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7CisgICAgICAgICAg
ICAvLyBXZSBjYW4gY2FsbCB0ZW1wRnVuY3Rpb24tPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXIoKS0+
c291cmNlKCkudXRmOCgpLmRhdGEoKSB0byBnZXQgdGhlIHNjcmlwdCBzb3VyY2UKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUt
PmNsYXNzU291cmNlKCkucHJvdmlkZXIoKSkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoZ2xvYmFsT2JqZWN0LCBjYWxsRGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpLCBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXIoKS0+c291cmNlVVJMKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksICJVbmF2YWlsYWJsZSIpOworICAg
ICAgICAgICAgLy8gVGhpcyBlbHNlIGNvbmRpdGlvbiBjYXRlcnMgbWljcm90YXNrcy4gV2UgdHJ5
IHRvIGxpbmsgY29kZSBleGVjdXRlZCBpbiBtaWNyb3Rhc2tzIHRvIHRoZWlyIHBhcmVudCBzY3Jp
cHQgbGlrZSBhbnkgb3RoZXIgY2FsbGJhY2suCisgICAgICAgICAgICAvLyBIb3dldmVyLCBtaWNy
b3Rhc2tzIHNlZW0gdG8gaGF2ZSB0aGVpciBvd24gaWRlbnRpZmVyIHdoZW4gYWNjZXNzZWQgd2l0
aCAoY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5laXRoZXJDb2RlQmxvY2soKS0+c291
cmNlKCkucHJvdmlkZXJJRCgpKS4KKyAgICAgICAgICAgIC8vIFdlIGNhbGwgY2FsbERhdGEuanMu
ZnVuY3Rpb25FeGVjdXRhYmxlLT5jbGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSB0byBnZXQgdGhl
IHBhcmVudCBJRCAodGhlIHNjcmlwdCB0aGF0IGNyZWF0ZWQgdGhlIG1pY3JvdGFzaykgb2YgYSBt
aWNyb3Rhc2suCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIEpTVmFsdWUgcmVzdWx0
OwogICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgaWYgKGlzSlNDYWxsKSB7CkBAIC05MDQs
OSArOTM1LDIxIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVjdCoKICAgICAgICAgcmVzdWx0ID0gaml0
Q29kZS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb05hdGl2ZShjYWxsRGF0YS5uYXRp
dmUuZnVuY3Rpb24ucmF3UG9pbnRlcigpLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOworI2lmIEVO
QUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgaWYgKGlzSlNDYWxsICYmIGdsb2JhbE9iamVj
dC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZChnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBKU1ZhbHVlKCkpOworI2VuZGlmCiAgICAgfQogCisjaWYgRU5BQkxF
KFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0LT5n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmpl
Y3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZChnbG9iYWxPYmplY3QpOworI2VuZGlmCiAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4ocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCBlMzIxZTJiZDI1ODg1
YWM2MTJjMWVlYmM4NWQzMjQ0ZmE1ZDZhNzM3Li4wYjE3ZWVkYTIzYWE5ZTFhMzdhZWI4OTUwMTQ3
NmYxOTJkZDEwNGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNjc4LDYgKzY3OCwxMCBAQCBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVs
bHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpbmF0ZVN0
cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8g
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydCwK
KyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3Qo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZk
NjA1M2JlYWRjNTVmNzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0
ZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCkBAIC0zOTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
IEpTR2xvYmFsT2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxw
dHIsIC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcK
ICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZh
bE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAK
IC8qIFNvdXJjZSBmb3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEz
MjNmODg2MDQ0YTBiNjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVm
MjgyZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaApAQCAtMjQwLDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
ewogCiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFs
T2JqZWN0KiwgSlNQcm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0
ZVN0cmVhbWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3Qq
LCBjb25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5j
dGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBi
b29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25F
bmRQdHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpT
R2xvYmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwCmluZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIu
LjQwMmM2YTIyYzAxNTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAKQEAgLTQ5NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
bG9iYWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBp
ZiAoIWV2YWwpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFC
TEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uU3RhcnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRp
b25TdGFydChnbG9iYWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+
c291cmNlVVJMKCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0u
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmds
b2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsK
KyNlbHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0u
aW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmds
b2JhbFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggMDZlMzUxOWEwZDc0ZmRjYzBhMGYwMWNkYTk4NDZmZmVmMjk4OGZiYi4uNGM2MmFi
ZjlhZTExYmM0YTE1NDk4MGRmZjI5YjUzOWYzZTdiMjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC03MTIsNiArNzEyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIGxvYWRlci9Eb2N1bWVudFdyaXRlci5oCiAgICAgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCiAg
ICAgbG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaAorICAgIGxvYWRlci9FeGVjdXRpb25T
dGFjay5oCiAgICAgbG9hZGVyL0ZldGNoT3B0aW9ucy5oCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5o
CiAgICAgbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTA1ZWM3OWU3
NjdiY2EwNDZiNWVhOWI5YzU4NTE1ZDkyNDI0MmEyYy4uYjYzODE1NWZlZWVlN2JhNTA3ZGFiNmU3
OGU5YmM0MTIxYmI5NDgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNiArMTQ2Nyw3IEBAIGxv
YWRlci9Eb2N1bWVudExvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwCiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcAor
bG9hZGVyL0V4ZWN1dGlvblN0YWNrLmNwcAogbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAK
IGxvYWRlci9GZXRjaElkaW9tcy5jcHAKIGxvYWRlci9Gb3JtU3RhdGUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDhlZDQx
YjEwMTNiZjUzNzM2NDE4MzdjNzA0ZTE3ZjE0MDExNWQ5MC4uZDNjODVhMjc4ZDBiZjgwNWQ5Nzlk
NGZmYTFmYmVlNzI4NGZhYWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE2Nyw2ICs1MTY3LDcgQEAKIAkJRjVDMDQxREIw
RkZDQTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAv
KiBIVE1MRGF0YUxpc3RFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFM
aXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjVDMDQxRTIwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICov
OyB9OwogCQlGNUUwQzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFu
ZFRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1RTBDNjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5k
VGltZUlucHV0VHlwZS5oICovOyB9OworCQlGNjQwODMzODI0QzI3Qjg5MDA4OTMyNkUgLyogRXhl
Y3V0aW9uU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY2NDA4MzM3MjRDMjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY5MTZDNDhFMERCNTEw
RjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZD
RDgzIC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUY5RjBFRDdB
MERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIw
MEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRkE2NTRB
NkMxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRva2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkExMTA4QUJFRDAwMjYxNUUw
IC8qIE1hdGhNTFRva2VuRWxlbWVudC5oICovOyB9OwpAQCAtMTYxMDYsNiArMTYxMDcsOCBAQAog
CQlGNUMwNDFFMjBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFMaXN0RWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1OTE2NDNDNDJDMDBENkNCNjkgLyog
QmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1QTE2NDNDNDJDMDBENkNC
NjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZF
IC8qIEV4ZWN1dGlvblN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzcyNEMyN0I3RTAwODkz
MjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY3NUEwNTlBRjE3MEQ4RkFBNUI4Q0FCRSAv
KiBNYXRoTUxTZWxlY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3Jr
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBl
ci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBK
U1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY0NTgsNiArMjY0NjEsOCBAQAogCQkJCUY1MkFENUUz
MTUzNDI0NUYwMDU5RkJFNiAvKiBFbXB0eUNsaWVudHMuY3BwICovLAogCQkJCUIyNTU5OTBEMEQw
MEQ4QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLywKIAkJCQk0MTRERURFNTFGOUZFOTE1
MDA0N0M0MEQgLyogRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oICovLAorCQkJCUY2NDA4MzM2MjRD
MjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5jcHAgKi8sCisJCQkJRjY0MDgzMzcyNEMy
N0I3RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggKi8sCiAJCQkJQ0VCQjhDMzIyMDc4NkRD
QjAwMDM5NTQ3IC8qIEZldGNoSWRpb21zLmNwcCAqLywKIAkJCQlDRUJCOEMzMTIwNzg2RENCMDAw
Mzk1NDcgLyogRmV0Y2hJZGlvbXMuaCAqLywKIAkJCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYg
LyogRmV0Y2hPcHRpb25zLmggKi8sCkBAIC0zMDkyMSw2ICszMDkyNiw3IEBACiAJCQkJNTFGNjQ1
NjIxRjQ1Mzk4RjAwQjU0REVEIC8qIEV4Y2VwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEMjkzODZCMjM1RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVu
ZGFibGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQw
MEVBNUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEy
ODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGY5M2UzZmQz
MWM2NWU0YjJlNTIyNzQ1Nzk4NzNhYWExZGM0ZjcxNmMuLjY2NWZjYmE4ZjM4NjBmMDkzYjkyZDJj
ZTNlY2MzMmJlMzQ2OTcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmNwcApAQCAtNjEsNiArNjEsOSBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTg4LDYgKzkxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlIEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9
IHsKICAgICBudWxscHRyLAogICAgIG51bGxwdHIsCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FQ
SV9TVEFUSVNUSUNTKQorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvblN0YXJ0LAorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogSlNET01XaW5kb3dCYXNlOjpK
U0RPTVdpbmRvd0Jhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPERPTVdp
bmRvdz4mJiB3aW5kb3csIEpTV2luZG93UHJveHkqIHByb3h5KQpAQCAtNDg3LDQgKzQ5NCwyNiBA
QCB2b2lkIEpTRE9NV2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQ
SV9TVEFUSVNUSUNTKQorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rp
b25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNHbG9iYWxPYmplY3Qq
IG9iamVjdCwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJM
KQoreworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgY29uc3QgSlNET01XaW5kb3dCYXNl
KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0
KTsKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3Jp
cHQoKnRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpLCBzY3JpcHRJRCwg
c2NyaXB0VVJMKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNh
bGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2Uq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3Qp
OworICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0
KCp0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuaAppbmRleCBlYzZkZGMxNzAyMTA4ZTk5Y2Y5OWRjMzYzMzVlMjVlMDA2NDVkODVhLi5h
YWRiOTk2NmE2ODgxZjJlNmY1MDc5Yjc3YmM2MzkyNTVhNGVjMjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtODUsNiArODUsMTEgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2lu
ZG93KERPTVdpbmRvdyopOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBz
dGF0aWMgYm9vbCByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvblN0YXJ0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29u
c3QgU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
I2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6
U3RydWN0dXJlKiwgUmVmUHRyPERPTVdpbmRvdz4mJiwgSlNXaW5kb3dQcm94eSopOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTV2luZG93UHJveHkqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCmluZGV4
IGRjZTczODIwYmJiZmQ5Yjk1YzU4NzlkMTNlZjY1ZWFiOThhOTA0MTguLjdmYjJiNzZkYWI2ZDlj
OWU4OTE4MjlkMDEyYzUwMDg1NTlhMjhjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApAQCAtNTEsNiArNTEsMTAgQEAg
Y29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNSZW1vdGVET01XaW5kb3dCYXNlOjpzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlID0KICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UK
ICAgICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFu
dGlhdGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxw
dHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9u
U3RhcnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09y
UHJvbWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6
OkpTUmVtb3RlRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQ
dHI8UmVtb3RlRE9NV2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFz
ZS5jcHAKaW5kZXggYzQ0ZjJmYjNhMGIwNWRhYWIxYThhOWUyZjg5YjUyZDg1MWViNDM2OC4uOWVi
MGFmY2NkMzA5NzdhZjljOThlMzk3NmUzMzI0ZTE2MDUyY2QzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAt
NjksNiArNjksMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrZXJHbG9i
YWxTY29wZUJhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUKICAgICAmZGVmYXVsdExhbmd1
YWdlLAogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBp
bnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAg
bnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVj
dXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2VyR2xvYmFsU2Nv
cGVCYXNlOjpKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNl
LmNwcAppbmRleCBiMTRiODE1NDJkYjg4OWVjNmQyNTliYzViNzBlZjJhNTA5OWM5NmQxLi5kODJj
OGIzMWE2MWNhOGQxMmUzMTZmMzNmN2QwODlkN2ExZmNmMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAg
LTYxLDYgKzYxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTV29ya2xldEds
b2JhbFNjb3BlQmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsCiAgICAgJmRlZmF1bHRMYW5n
dWFnZSwKICAgICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8g
aW5zdGFudGlhdGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uU3RhcnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1dvcmtsZXRHbG9iYWxT
Y29wZUJhc2U6OkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0
NjJiOTg0YjM0ZGYyN2MyNDI5ZjdmMjExNmRhNzIyNTEzZTRkOTdhLi5lY2IxODY4OWE4N2ViN2Y0
MmI3YmMyYjg3ZGVhNjRhY2MzYzE3ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXdCYXNlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJSdW5KYXZhU2NyaXB0UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTEz
OSw2ICsxNDAsOSBAQCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogCiAgICAgUmVmPEZyYW1lPiBw
cm90ZWN0b3IobV9mcmFtZSk7CiAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgVVJMKj4gc291cmNlVVJM
U2NvcGUobV9zb3VyY2VVUkwsICZzb3VyY2VVUkwpOworICAgIAorICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wdXNoQWN0aXZlU2NyaXB0
KCptX2ZyYW1lLmRvY3VtZW50KCksIGpzU291cmNlQ29kZS5wcm92aWRlcklEKCksIHNvdXJjZVVS
TC5zdHJpbmcoKSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5l
KCksIHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKSk7CiAKQEAgLTE1NCw5ICsxNTgsMTUgQEAgVmFs
dWVPckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2Ny
aXB0U291cmNlQ29kZSYgc291cmMKICAgICAgICAgb3B0aW9uYWxEZXRhaWxzID0gV1RGTW92ZShk
ZXRhaWxzKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxEZXRhaWxzKQorICAgIGlmIChvcHRp
b25hbERldGFpbHMpIHsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1l
bnQoKSk7CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgqb3B0aW9uYWxEZXRhaWxzKTsK
KyAgICB9CiAKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIAog
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNTVkZGM3YTc1NWI4ODU1NDhm
MDExMDc4ODgzNmI0MGYxN2VlNWY5Li4xZTJmYWI3N2NiNjc1MzRjMjA5MmJkNzhhOGQzNTRmZTdm
ZjMxMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtNTAxNSw2ICs1MDE1LDUwIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0
ZUdldHRlckJvZHlEZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAgICAgCisgICAgbXkgQGFwaXNO
b3RUb0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNl
cnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9j
U3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXlt
ZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1Nl
cnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisK
KyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xh
c3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAg
ICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7
CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJEb2N1bWVudC5oIik7CisgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTtcbiIpOworCisgICAgICAgIG15ICRhcGlDbGFzc05hbWUgPSBzdWJzdHIoJGNs
YXNzTmFtZSwgMik7CisgICAgICAgIG15ICRhcGlGdW5jTmFtZSA9ICJOb25lIjsKKyAgICAgICAg
bXkgJGFwaUFyZ3VtZW50cyA9ICIiOworCisgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0
dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5X
S19sY2ZpcnN0KCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9
IHx8ICRhdHRyaWJ1dGUtPm5hbWUpOworICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT50eXBl
LT5uYW1lIGVxICJFdmVudEhhbmRsZXIiKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSBF
dmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7CisgICAgICAgIH0gZWxz
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVHlwZSgkYXR0cmlidXRlLT50eXBlKSkg
eworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAgICAgICAgICAoJGFwaUZ1
bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJ
bmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAg
ICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAgICRhcGlBcmd1bWVudHMg
PSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsIFwiJHthcGlDbGFzc05h
bWV9Ojoke2FwaUZ1bmNOYW1lfSR7YXBpQXJndW1lbnRzfVwiKTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICB9XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
fVxuIik7CisgICAgfQorCiAgICAgaWYgKCRoYXNDdXN0b21HZXR0ZXIpIHsKICAgICAgICAgbXkg
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkYXR0
cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfSB8fCAkYXR0cmlidXRl
LT5uYW1lKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0aGlzT2Jq
ZWN0LiR7aW1wbEdldHRlckZ1bmN0aW9uTmFtZX0obGV4aWNhbEdsb2JhbE9iamVjdCk7XG4iKTsK
QEAgLTUxNDksNiArNTE5Myw1NCBAQCBzdWIgR2VuZXJhdGVBdHRyaWJ1dGVTZXR0ZXJCb2R5RGVm
aW5pdGlvbgogCiAgICAgR2VuZXJhdGVDdXN0b21FbGVtZW50UmVhY3Rpb25zU3RhY2tJZk5lZWRl
ZCgkb3V0cHV0QXJyYXksICRhdHRyaWJ1dGUsICJsZXhpY2FsR2xvYmFsT2JqZWN0Iik7CiAKKyAg
ICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQgSlNHQ09ic2VydmF0aW9uIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5ncyBKU01lbW9yeUlu
Zm8gSlNNYWxsb2NTdGF0aXN0aWNzIEpTSW50ZXJuYWxTZXR0aW5ncyBKU01vY2tDRE1GYWN0b3J5
IEpTTW9ja1BheW1lbnRDb29yZGluYXRvciBKU0ludGVybmFsc01hcExpa2UgSlNJbnRlcm5hbHNT
ZXRMaWtlIEpTU2VydmljZVdvcmtlckludGVybmFscyApOworICAgIG15ICRzaG91bGRJbnN0cnVt
ZW50ID0gMTsKKworICAgIGZvciAoQGFwaXNOb3RUb0luc3RydW1lbnQpIHsKKyAgICAgICAgaWYg
KCRfIGVxICRjbGFzc05hbWUpIHsKKyAgICAgICAgICAgICRzaG91bGRJbnN0cnVtZW50ID0gMDsK
KyAgICAgICAgICAgIGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJHNob3VsZElu
c3RydW1lbnQpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkRvY3VtZW50LmgiKTsKKyAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJlc291cmNlTG9hZE9ic2VydmVyLmgiKTsKKyAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkge1xuIik7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpO1xuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9
IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUi
OworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3Rv
bVNldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVH
ZW5lcmF0b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYg
KCRhdHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAg
ICRhcGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRl
KTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRh
dHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRl
LT5uYW1lOworICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntSZXBsYWNlYWJsZX0pIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRhdHRyaWJ1dGUt
Pm5hbWU7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e1B1dEZvcndhcmRzfSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+
bmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAg
ICAgICAgICAoJGFwaUZ1bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhw
cmVzc2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0
ZSk7CisgICAgICAgICAgICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAg
ICRhcGlBcmd1bWVudHMgPSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
IFwiJHthcGlDbGFzc05hbWV9Ojoke2FwaUZ1bmNOYW1lfSR7YXBpQXJndW1lbnRzfVwiKTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICB9XG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgfVxuIik7CisgICAgfQorCiAgICAgaWYgKCRuZWVkU2VjdXJpdHlDaGVj
aykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIs
ICRjb25kaXRpb25hbCk7CiAgICAgICAgIGlmICgkaW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJE
T01XaW5kb3ciKSB7CkBAIC01MzY2LDYgKzU0NTgsNDMgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9u
Qm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNr
SWZOZWVkZWQoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmplY3Qi
KSB1bmxlc3MgJGdlbmVyYXRpbmdPdmVybG9hZERpc3BhdGNoZXI7CiAKKyAgICBteSBAYXBpc05v
dFRvSW5zdHJ1bWVudCA9IHF3KEpTTW9ja1BhZ2VPdmVybGF5IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZCBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBK
U0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0
b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBh
cGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7Cisg
ICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJEb2N1bWVudC5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpO1xu
Iik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsK
KyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworCisgICAgICAgIGlmICgkZ2VuZXJh
dGluZ092ZXJsb2FkRGlzcGF0Y2hlcikgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1
bmN0aW9uTmFtZTsKKyAgICAgICAgfSBlbHNpZiAoSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRpb24p
KSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5h
bWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkZnVuY3Rp
b25JbXBsZW1lbnRhdGlvbk5hbWU7CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgXCIke2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9
XCIpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIH1cbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICB9XG4iKTsKKyAgICB9CisKICAgICAjIEZvciBvdmVybG9h
ZHMsIHdlIGdlbmVyYXRlIHRoZSBzZWN1cml0eSBjaGVjayBpbiB0aGUgb3ZlcmxvYWQgZGlzcGF0
Y2hlciwgaW5zdGVhZCBvZiB0aGUgYm9keSBvZiBlYWNoIG92ZXJsb2FkLCBhcyBwZXIgc3BlY2lm
aWNhdGlvbjoKICAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1jcmVh
dGUtb3BlcmF0aW9uLWZ1bmN0aW9uCiAgICAgaWYgKCEkaXNPdmVybG9hZGVkIHx8ICRnZW5lcmF0
aW5nT3ZlcmxvYWREaXNwYXRjaGVyKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU01hcExpa2UuY3BwCmluZGV4IDNjYzczODA3ZDIyMWJkYjNm
NTU4NGI3ODI3YWQ5YzAxYmM4YjYwYmYuLmE3YjdlYTRmYjNmMGY3N2E4ZTk1YjRlYWVlMmQ3YjRi
OTk3YmRmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU01hcExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU01hcExpa2UuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJK
U0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFt
ZXMuaD4KQEAgLTIxNiw2ICsyMTksMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzTWFwTGlr
ZVNpemVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEoKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJNYXBMaWtlOjpzaXplIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3
YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0K
IApAQCAtMjMwLDYgKzI0MiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXRCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJNYXBMaWtlOjpnZXQiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0OSw2ICsyNzAsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1
bmN0aW9uSGFzQm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiTWFwTGlrZTo6aGFzIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CkBAIC0yNjgsNiArMjk4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpT
Qzo6SlNHCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIk1h
cExpa2U6OmVudHJpZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+
KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4Miw2ICszMjEsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHko
SlNDOjpKU0dsb2IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiTWFwTGlrZTo6a2V5cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFu
eT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjk2LDYgKzM0NCwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5
KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJNYXBMaWtlOjp2YWx1ZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMzEwLDYgKzM2NywxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNo
Qm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJNYXBMaWtlOjpmb3JFYWNoIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC0zMjksNiArMzk1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvblNldEJvZHkoSlNDOjpKU0dsb2JhCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIk1hcExpa2U6OnNl
dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzUxLDYg
KzQyNiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsbwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJNYXBMaWtlOjpjbGVhciIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgZm9yd2Fy
ZENsZWFyVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVk
VGhpcyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM2
Nyw2ICs0NTEsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlr
ZVByb3RvdHlwZUZ1bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiTWFwTGlrZTo6ZGVsZXRlIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNw
cAppbmRleCA0NDZiYTM5MDdmNzlmOWM5OTg1NDJjODg5MTc1MmRmOTI3YWFmZDBlLi5kYTdjMGI0
YzgwNDUyYjc2YTE4MDkyODAzZmUwMTc4MjhkNzVlOWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlr
ZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgog
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzIsNiArMzMsOCBA
QAogI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgi
CiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtMjEwLDYg
KzIxMywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXplR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlJlYWRPbmx5TWFwTGlrZTo6c2l6ZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2FyZFNpemVU
b01hcExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7CiB9CiAKQEAgLTIy
NCw2ICsyMzYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9u
bHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25HZXRCb2R5KEpTQzoKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiUmVhZE9ubHlNYXBMaWtlOjpnZXQiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0Myw2ICsyNjQsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJv
dG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiUmVhZE9ubHlNYXBMaWtlOjpoYXMiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI2Miw2ICsyOTIsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiUmVhZE9ubHlNYXBMaWtlOjplbnRyaWVzIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yNzYsNiArMzE1LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVBy
b3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlJlYWRPbmx5TWFwTGlrZTo6a2V5cyIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjkwLDYg
KzMzOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1h
cExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkoSgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJSZWFkT25seU1hcExpa2U6OnZhbHVlcyIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvTWFwTGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQog
CkBAIC0zMDQsNiArMzYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlJlYWRPbmx5TWFwTGlrZTo6Zm9y
RWFjaCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlT
ZXRMaWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Jl
YWRPbmx5U2V0TGlrZS5jcHAKaW5kZXggZWM0NDRmNTZkZjU5ZjJlZjlhYjgyNWE2NzJjNzE2NTU5
NTBkN2Y0MC4uZDk0OTM5MWU1NTVhYjdhOWZiYzQzMzExZjVlNzEzOTUwMWEzMTE0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlT
ZXRMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNSZWFkT25seVNldExpa2UuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkpTRE9NU2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFt
ZXMuaD4KQEAgLTIwOCw2ICsyMTEsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzUmVhZE9u
bHlTZXRMaWtlU2l6ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJSZWFkT25seVNldExpa2U6OnNpemUi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGZvcndhcmRTaXplVG9TZXRMaWtlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3Qp
KSkpOwogfQogCkBAIC0yMjIsNiArMjM0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlJlYWRPbmx5U2V0
TGlrZTo6aGFzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBA
IC0yNDEsNiArMjYyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Jl
YWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uRW50cmllc0JvZHkoCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlJlYWRPbmx5U2V0TGlrZTo6ZW50cmll
cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJp
ZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlz
KSkpKTsKIH0KIApAQCAtMjU1LDYgKzI4NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJSZWFkT25seVNl
dExpa2U6OmtleXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZv
cndhcmRLZXlzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2Fz
dGVkVGhpcykpKSk7CiB9CiAKQEAgLTI2OSw2ICszMDgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNC
b2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiUmVh
ZE9ubHlTZXRMaWtlOjp2YWx1ZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExBbnk+KGZvcndhcmRWYWx1ZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxs
RnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjgzLDYgKzMzMSwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2hCb2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJSZWFkT25seVNldExpa2U6OmZvckVhY2giKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1NldExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKaW5kZXggYWE2ZjA4ODIzYWZkMTlkN2YyYzQz
ZTY4OTU2MjhkMDU0ODBiNGQxMC4uY2E0ODRlN2RmMzA2ZGEzZTdlYjVmNjdjZmU2NzkwYmI5MWNm
ZGVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTU2V0TGlrZS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURP
TU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAt
MzIsNiArMzMsOCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNE
T01TZXRMaWtlLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5o
PgpAQCAtMjE0LDYgKzIxNywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNTZXRMaWtlU2l6
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlNldExpa2U6OnNpemUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGZvcndhcmRT
aXplVG9TZXRMaWtlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpKSkpOwogfQogCkBA
IC0yMjgsNiArMjQwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Nl
dExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOjpKU0dsb2JhCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlNldExpa2U6OmhhcyIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQ3LDYgKzI2OCwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25FbnRyaWVzQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJTZXRMaWtlOjplbnRyaWVzIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkRW50cmllc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yNjEsNiArMjkxLDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVG
dW5jdGlvbktleXNCb2R5KEpTQzo6SlNHbG9iCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlNldExpa2U6OmtleXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI3NSw2ICszMTQsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1
bmN0aW9uVmFsdWVzQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiU2V0TGlrZTo6dmFsdWVzIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFsdWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4OSw2ICszMzcs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3RvdHlw
ZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiU2V0TGlrZTo6Zm9yRWFjaCIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzA4LDYgKzM2NSwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGRCb2R5
KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJTZXRMaWtlOjphZGQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKQEAgLTMyNyw2ICszOTMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uQ2xlYXJCb2R5KEpTQzo6SlNHbG8KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiU2V0TGlrZTo6Y2xlYXIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgIGZvcndhcmRDbGVhclRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgKmNhc3RlZFRoaXMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC0zNDMsNiArNDE4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlNldExpa2U6OmRl
bGV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCA2ZGZjNDJmZmRjZjQ4NDQzMzFhZTk1ZGI5
NzQxNzkzY2M5Y2Q3NjYzLi4xYmI3MTM3YTQ2NjViMTEwYWUxMTJjOWI1MDRmMjAzODNmOGNhMzI0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjQsNiArMjQsNyBAQAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFj
dGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCkBAIC0zNSw2ICszNiw4
IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIyMiw2
ICsyMjUsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4
Y2l0aW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKICAgICBFWENFUFRJT05fQVNTRVJU
X1VOVVNFRCh0aHJvd1Njb3BlLCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSB8fCAhc2hvdWxkQWxs
b3dBY2Nlc3MpOwogICAgIGlmICghc2hvdWxkQWxsb3dBY2Nlc3MpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0QWN0aXZlRE9NT2JqZWN0OjpleGNpdGluZ0F0dHIiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5leGNpdGluZ0F0dHIoKSkpKTsK
IH0KQEAgLTIzNyw2ICsyNDksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uRXhjaXRpbmcKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEFjdGl2ZURPTU9iamVj
dDo6ZXhjaXRpbmdGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2VzcyA9IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT53cmFwcGVk
KCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcik7CiAgICAgRVhDRVBUSU9OX0FTU0VSVF9V
TlVTRUQodGhyb3dTY29wZSwgIXRocm93U2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNob3VsZEFsbG93
QWNjZXNzKTsKICAgICBpZiAoIXNob3VsZEFsbG93QWNjZXNzKQpAQCAtMjYzLDYgKzI4NCwxNSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzcwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0QWN0aXZlRE9NT2JqZWN0Ojpwb3N0TWVzc2FnZSIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC0yODYsNiArMzE2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkCiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwog
ICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNr
KCpsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0QWN0aXZlRE9NT2JqZWN0OjpvdmVybG9hZGVkTWV0aG9k
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gcGFyYW0gPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTMwMSw2ICszNDAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEFjdGl2ZURPTU9iamVj
dDo6b3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBhdXRvIHBhcmFtMSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInBhcmFtMSIsICJUZXN0QWN0
aXZlRE9NT2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiTm9kZSIpOyB9KTsKQEAgLTMxOSw2
ICszNjcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2
ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6anNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBib29sIHNob3VsZEFsbG93QWNjZXNzID0gQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhc3RlZFRoaXMtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9y
KTsKICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3BlLCAhdGhyb3dTY29wZS5l
eGNlcHRpb24oKSB8fCAhc2hvdWxkQWxsb3dBY2Nlc3MpOwogICAgIGlmICghc2hvdWxkQWxsb3dB
Y2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAppbmRleCA0NjczM2E3ZDVlNzNhYThjNzhk
MmFjOWY0MWY3NjA2YzY4OTg5YTMxLi40MjNiYmYyZGQwYmE1MDE0MzlhODUxMmU4MTJhMzUxYzU2
Yzg4MTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rp
b25RdWV1ZS5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5j
bHVkZSAiSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
QEAgLTIxOSw2ICsyMjIsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rp
b25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlvbnM6OmF0dHJpYnV0ZVdp
dGhDRVJlYWN0aW9ucyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKCkpKSk7CiB9CkBAIC0yMzMsNiAr
MjQ1LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9uc1NldHRlcihKU0dsb2JhbE9iCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENFUmVhY3Rpb25zOjpz
ZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI1
MSw2ICsyNzIsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVm
bGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlvbnM6OmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0YXR0cmlidXRld2l0aGNl
cmVhY3Rpb25zQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2VyZWFjdGlvbnNBdHRyKSkpKTsKIH0KQEAgLTI2
NSw2ICsyOTUsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVm
bGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc1NldHRlcihKU0cKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1
c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlv
bnM6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zQXR0ciIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMjgzLDYgKzMyMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5n
aWZpZXJBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuc3RyaW5naWZpZXJBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI5Niw2ICszNDQs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlvbnM6OnN0cmluZ2lmaWVyQXR0cmlidXRlIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJzdHJpbmdpZmll
ckF0dHJpYnV0ZSIpLCBzdHJsZW4oInN0cmluZ2lmaWVyQXR0cmlidXRlIikpOwogICAgIGF1dG8g
dmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
ZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMTks
NiArMzc2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc0F0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEdldHRlcihKCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENFUmVhY3Rpb25zOjphdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNOb3ROZWVkZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCgpKSkpOwogfQpA
QCAtMzMzLDYgKzM5OSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlv
bnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTZXR0ZXIoSgogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uRGlz
YWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENFUmVh
Y3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM1MSw2ICs0MjYsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEcK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlvbnM6
OmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0YXR0cmlidXRld2l0aGNlcmVhY3Rpb25zbm90bmVlZGVkQXR0ciIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2Vy
ZWFjdGlvbnNub3RuZWVkZWRBdHRyKSkpKTsKIH0KQEAgLTM2NSw2ICs0NDksMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZFMKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29wZSBjdXN0b21FbGVtZW50
UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDRVJlYWN0aW9uczo6c2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRo
Y2VyZWFjdGlvbnNub3RuZWVkZWRBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODMs
NiArNDc2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyQXR0cmlidXRlTm90TmVlZGVkR2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmllckF0dHJpYnV0
ZU5vdE5lZWRlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5zdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCgpKSkpOwogfQpAQCAtMzk2LDYg
KzQ5OCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckF0dHJpYnV0ZU5vdE5lZWRlZFNldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5naWZpZXJBdHRyaWJ1dGVO
b3ROZWVkZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8gaWQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oInN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIiksIHN0cmxlbigic3RyaW5naWZpZXJB
dHRyaWJ1dGVOb3ROZWVkZWQiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09i
amVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQyMiw2ICs1MzMsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ0UKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxl
bWVudFJlYWN0aW9uU3RhY2soKmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDRVJlYWN0aW9uczo6bWV0
aG9kV2l0aENFUmVhY3Rpb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7CkBAIC00NDAsNiArNTYw
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9u
c1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENFCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFj
dGlvbkRpc2FsbG93ZWRTY29wZSBjdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGU7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5tZXRob2RXaXRoQ0VS
ZWFjdGlvbnNOb3ROZWVkZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmNwcAppbmRleCBkZTE5NGQ0NTUzNTNkY2NkODk2YTg4MzUyNzc2NDA0NzczYTBjMWJl
Li4xYjFmMDJjNTQzNzkyYzY2YTAxZmQ5OTFlMGQ2NDliZDJjMGFjZWY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRWxlbWVudFJlYWN0
aW9uUXVldWUuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAg
LTMxLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIwMSw2ICsyMDQsMTUgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllcjo6dmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpKSk7CiB9CkBAIC0yMTUsNiArMjI3LDE1IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxlCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVh
Y3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6
OnNldFZhbHVlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMzMsNiArMjU0LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRo
b3V0UmVhY3Rpb25zR2V0dGVyKEpTCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OnZhbHVlV2l0aG91dFJlYWN0aW9ucyIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudmFs
dWVXaXRob3V0UmVhY3Rpb25zKCkpKSk7CiB9CkBAIC0yNDcsNiArMjc3LDE1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVh
Y3Rpb25zU2V0dGVyKEpTCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9tRWxlbWVudFJl
YWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6c2V0VmFsdWVX
aXRob3V0UmVhY3Rpb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNjcsNiArMzA2LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0
cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rpb25UCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC52
YWx1ZSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCmluZGV4IDQwYzM0MzczMDIzNDcz
N2E5NzZhNzY4NTFjMTg0ZTY2ODYzZDU1MzAuLmVlZmM1YzgxYzExYWI1MWFkMGVjMGYzODY2ZGNh
NTM4ZWY5YjBkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKQEAgLTI0LDYgKzI0LDcgQEAK
ICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDYWxsVHJhY2VyLmgiCiAj
aW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zOCw2ICszOSw4IEBA
CiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVy
LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIzOSw2ICsy
NDIsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJUZXN0QXR0cmli
dXRlSW50ZXJmYWNlR2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZUludGVyZmFjZSIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZl
KCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAi
dGVzdEF0dHJpYnV0ZUludGVyZmFjZSJfcyk7CkBAIC0yNTQsNiArMjY2LDE1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZUludGVyZmFjZVNldHRl
cihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdENhbGxUcmFjZXI6OnNldFRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0yNzQsNiArMjk1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RD
YWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVNwZWNpZmllZEdldHRlcihKU0dsb2JhbE9iamVjCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RB
dHRyaWJ1dGVTcGVjaWZpZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1w
bC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFj
ZXJBdHRyaWJ1dGUoaW1wbCwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwpAQCAtMjg5LDYg
KzMxOSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRy
aWJ1dGVTcGVjaWZpZWRTZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlU3BlY2lm
aWVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
Qm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzA5LDYgKzM0OCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudEdldHRl
cihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RDYWxsVHJhY2VyOjp0ZXN0QXR0cmlidXRlV2l0aFZhcmlhbnQiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2Fs
bFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVXaXRo
VmFyaWFudCJfcyk7CkBAIC0zMjQsNiArMzcyLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50U2V0dGVyKEpTR2xvYmFsT2Jq
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENhbGxUcmFjZXI6
OnNldFRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExE
T01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNDQsNiArNDAxLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyVGVzdFJlYWRvbmx5QXR0cmlidXRlR2V0dGVy
KEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdENhbGxUcmFjZXI6OnRlc3RSZWFkb25seUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCb29sZWFuPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RSZWFkb25seUF0dHJpYnV0ZSgp
KSkpOwogfQpAQCAtMzU5LDYgKzQyNSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q2FsbFRyYWNl
cjo6dGVzdE9wZXJhdGlvbkludGVyZmFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVz
dENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RPcGVyYXRpb25JbnRlcmZhY2UiX3MpOwpA
QCAtMzc4LDYgKzQ1MywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9w
ZXJhdGlvblNwZWNpZmllZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1w
bC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFj
ZXJPcGVyYXRpb24oaW1wbCwgInRlc3RPcGVyYXRpb25TcGVjaWZpZWQiX3MpOwpAQCAtMzk3LDYg
KzQ4MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldp
dGhBcmd1bWVudHMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNDI3LDYgKzUyMCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9u
VGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhOdWxsYWJsZUFyZ3VtZW50Iik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKQEAgLTQ1MSw2ICs1NTMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENhbGxU
cmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoVmFyaWFudEFyZ3VtZW50Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTQ3NSw2ICs1ODYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVy
YXRpb25XaXRoTnVsbGFibGVWYXJpYW50QXJndW1lbnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNDk5LDYg
KzYxOSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldp
dGhPcHRpb25hbFZhcmlhbnRBcmd1bWVudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBh
dXRvIHZhcmlhbnRPcHRpb25hbEFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
PyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERP
TVN0cmluZz4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElE
TEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJ
RExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CkBAIC01MjEsNiArNjUwLDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVu
Y3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RDYWxsVHJhY2VyOjp0ZXN0T3BlcmF0aW9uV2l0aERlZmF1bHRWYXJpYW50
QXJndW1lbnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byB2YXJpYW50RGVmYXVs
dEFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDog
Y29udmVydDxJRExVbmlvbjxJRExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKaW5k
ZXggNTk3Zjc2ZjRlMzgyMmZmYjk1OGI2OWI2OGM3MTllZjIxNTJjMTk3Mi4uMzU2ZjhkOWI4MTM0
ZTkzYWY3MWY3OTMyNjhiNjk3ZGVmZGIwMzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJET01KSVRJRExDb252ZXJ0LmgiCiAjaW5jbHVkZSAiRE9NSklU
SURMVHlwZS5oIgogI2luY2x1ZGUgIkRPTUpJVElETFR5cGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTQyLDYgKzQzLDggQEAKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1
ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0ZyYW1lVHJhY2Vycy5oPgpA
QCAtNjQyLDYgKzY0NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQW55
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OmFueUF0dHIiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmFueUF0dHIoKSkpKTsKIH0K
QEAgLTY1NSw2ICs2NjcsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJv
b2xlYW5BdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjpib29sZWFuQXR0ciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJvb2xlYW5B
dHRyKCkpKSk7CiB9CkBAIC02NjgsNiArNjg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RET01KSVRCeXRlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdERPTUpJVDo6Ynl0
ZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5i
eXRlQXR0cigpKSkpOwogfQpAQCAtNjgxLDYgKzcxMSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUT2N0ZXRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6
Om9jdGV0QXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5vY3RldEF0dHIoKSkpKTsKIH0KQEAgLTY5NCw2ICs3MzMsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
RE9NSklUOjpzaG9ydEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuc2hvcnRBdHRyKCkpKSk7CiB9CkBAIC03MDcsNiArNzU1LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZFNob3J0QXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdERPTUpJVDo6dW5zaWduZWRTaG9ydEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKSkp
OwogfQpAQCAtNzIwLDYgKzc3NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OmxvbmdBdHRyIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ0F0dHIo
KSkpKTsKIH0KQEAgLTczMyw2ICs3OTksMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjp1bnNpZ25l
ZExvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC51bnNpZ25lZExvbmdBdHRyKCkpKSk7CiB9CkBAIC03NDYsNiArODIxLDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdERPTUpJVDo6bG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmdMb25nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdMb25nQXR0cigpKSkpOwogfQpAQCAt
NzU5LDYgKzg0MywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWdu
ZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OnVuc2lnbmVkTG9uZ0xvbmdBdHRy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTc3Miw2ICs4NjUsMTUgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0RE9NSklUOjpmbG9hdEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRmxvYXQ+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZmxvYXRBdHRyKCkpKSk7CiB9CkBAIC03ODUsNiArODg3
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWRGbG9h
dEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdERPTUpJVDo6dW5yZXN0cmljdGVkRmxvYXRBdHRyIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVu
cmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVu
cmVzdHJpY3RlZEZsb2F0QXR0cigpKSkpOwogfQpAQCAtNzk4LDYgKzkwOSwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RET01KSVQ6OmRvdWJsZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmRvdWJsZUF0dHIoKSkpKTsKIH0KQEAgLTgxMSw2ICs5MzEsMTUg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWREb3VibGVBdHRyIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVz
dHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnJl
c3RyaWN0ZWREb3VibGVBdHRyKCkpKSk7CiB9CkBAIC04MjQsNiArOTUzLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb21TdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdERPTUpJVDo6ZG9tU3RyaW5nQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nQXR0cigpKSkpOwogfQpAQCAtODM3LDYg
Kzk3NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ0F0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbAogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OmJ5dGVTdHJpbmdBdHRyIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEJ5dGVT
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYnl0ZVN0cmluZ0F0
dHIoKSkpKTsKIH0KQEAgLTg1MCw2ICs5OTcsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjp1c3ZT
dHJpbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETFVTVlN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC51c3ZTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC04NjMsNiArMTAxOSwxNSBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RET01KSVQ6Om5vZGVBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
bm9kZUF0dHIoKSkpKTsKIH0KQEAgLTg3Niw2ICsxMDQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdERPTUpJ
VDo6Ym9vbGVhbk51bGxhYmxlQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCb29sZWFuPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ib29sZWFuTnVsbGFibGVBdHRyKCkpKSk7
CiB9CkBAIC04ODksNiArMTA2MywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklUQnl0ZU51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OmJ5dGVOdWxsYWJs
ZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTnVsbGFibGU8SURMQnl0ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYnl0ZU51bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTAyLDYgKzEwODUsMTUg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0RE9NSklUOjpvY3RldE51bGxhYmxlQXR0ciIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExPY3RldD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwub2N0ZXROdWxs
YWJsZUF0dHIoKSkpKTsKIH0KQEAgLTkxNSw2ICsxMTA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdERPTUpJ
VDo6c2hvcnROdWxsYWJsZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMU2hvcnQ+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNob3J0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBA
IC05MjgsNiArMTEyOSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5z
aWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6OnVuc2lnbmVkU2hvcnROdWxs
YWJsZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5zaWduZWRTaG9ydD4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRTaG9ydE51bGxhYmxlQXR0cigpKSkpOwog
fQpAQCAtOTQxLDYgKzExNTEsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJ
VExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjpsb25nTnVsbGFibGVB
dHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmxvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk1NCw2ICsxMTczLDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdOdWxsYWJsZUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25nTnVsbGFibGVBdHRyIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETFVuc2lnbmVkTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwudW5zaWduZWRMb25nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NjcsNiArMTE5NSwxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdOdWxsYWJsZUF0dHJH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RET01KSVQ6OmxvbmdMb25nTnVsbGFibGVBdHRyIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxl
PElETExvbmdMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25n
TG9uZ051bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTgwLDYgKzEyMTcsMTUgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHJHZXR0
ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0RE9NSklUOjp1bnNpZ25lZExvbmdMb25nTnVsbGFibGVBdHRyIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElE
TFVuc2lnbmVkTG9uZ0xvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LnVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk5Myw2ICsxMjM5LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRGbG9hdE51bGxhYmxlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkp
IHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGRvY3VtZW50LCAiVGVzdERPTUpJVDo6ZmxvYXROdWxsYWJsZUF0dHIiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8
SURMRmxvYXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVs
bGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDA2LDYgKzEyNjEsMTUgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVucmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyR2V0dGVyKEpT
R2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9N
SklUOjp1bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0ciIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5y
ZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTEwMTksNiArMTI4MywxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RET01KSVQ6OmRvdWJsZU51bGxhYmxlQXR0ciIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExEb3VibGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmRvdWJsZU51
bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtMTAzMiw2ICsxMzA1LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVRVbnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHJHZXR0ZXIo
SlNHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdERP
TUpJVDo6dW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVu
cmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDQ1LDYgKzEzMjcs
MTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVERvbVN0cmluZ051bGxhYmxl
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjpkb21TdHJpbmdOdWxsYWJsZUF0dHIiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVs
bGFibGU8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5kb21TdHJpbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTEwNTgsNiArMTM0OSwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RET01KSVQ6OmJ5dGVTdHJpbmdOdWxsYWJsZUF0dHIiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8
SURMQnl0ZVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYnl0
ZVN0cmluZ051bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtMTA3MSw2ICsxMzcxLDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVc3ZTdHJpbmdOdWxsYWJsZUF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdERPTUpJVDo6dXN2U3RyaW5nTnVsbGFibGVBdHRyIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVT
VlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2U3RyaW5n
TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDg0LDYgKzEzOTMsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE5vZGVOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
RE9NSklUOjpub2RlTnVsbGFibGVBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxOb2Rl
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLm5vZGVOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTEwOTksNiArMTQxNywx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90
eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVCb2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RE9NSklUOjpnZXRBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtMTEzNSw2ICsxNDYyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQzo6SlNHCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RET01KSVQ6Oml0ZW0i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtMTE3Niw2ICsxNTEyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkhhc0F0dHJpYnV0ZUJv
ZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RE
T01KSVQ6Omhhc0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC5o
YXNBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTEyMDUsNiArMTU1MCwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVt
ZW50QnlJZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0RE9NSklUOjpnZXRFbGVtZW50QnlJZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMjQxLDYgKzE1
OTUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdERPTUpJVFBy
b3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudHNCeU5hbWUKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdERPTUpJVDo6Z2V0RWxlbWVudHNCeU5hbWUiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwCmluZGV4IDUwMWI5
ODhmYTJjNTIxZTZiYTcyMDUwNjNjMzRiN2FkOGUyNjQ4N2MuLmFiNzU2MTVjOTk0Y2QzOGQ3MjZm
OGMwMjU0ZTFmNWY1YjJhOGIyNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5j
cHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgpAQCAtMjM5LDYg
KzI0MSwxNSBAQCBib29sIHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRQogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEVuYWJsZWRCeVNldHRpbmdUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5n
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U3Vi
T2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTI1MCw2ICsyNjEsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5n
Q29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlT
ZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0RW5hYmxlZEJ5U2V0dGluZzo6VGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9CkBAIC0yNjQsNiArMjg0LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFbmFibGVkQnlTZXR0aW5nRW5hYmxlZEJ5U2V0dGlu
Z0F0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OmVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVuYWJs
ZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI4MCw2ICszMDksMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRCeVNldHRpbmdFbmFibGVkQnlTZXR0aW5nQXR0
cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c2V0RW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzAzLDYgKzM0MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Byb3RvdHlwZUZ1bmN0aW9u
RW5hYmxlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0RW5hYmxlZEJ5U2V0dGluZzo6ZW5hYmxlZEJ5U2V0dGluZ09wZXJhdGlvbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcAppbmRleCAzZGViMDBjNGQ1
MzBmMjUyOWZlNTJlZTk0ZWEzZmRiYWMwYThhZDRhLi42NjEwYzhlN2U0MWY2NTRkNDA5MjdjNmNm
MDE5YWZhYjQyODFkNzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZvckNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAK
QEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU1Rlc3RTdWJPYmouaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0x
ODgsNiArMTkwLDE1IEBAIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RFbmFibGVkRm9yQ29udGV4dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RFbmFibGVkRm9yQ29udGV4dDo6VGVzdFN1Yk9iakVuYWJsZWRG
b3JDb250ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4g
SlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5OSw2ICsyMTAsMTUg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRUZXN0U3ViT2JqRW5hYmxl
ZEZvckNvbnRleHRDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RF
bmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RFbmFibGVkRm9y
Q29udGV4dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RW5hYmxlZEZvckNvbnRleHQ6OlRlc3RT
dWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpLCBz
dHJsZW4oIlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpKSwgdmFsdWUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IGMzYzA4YWQwNjRjZjNmMjNkNTkwZTFi
ODlhZjc5YjM4ZGMzMWYwYWIuLjMxMDVhOTQ3YmU0Yzk0N2UxNWNhMWNhODliNzE5NWVjODUwMzAy
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTIzLDYgKzIzLDcg
QEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCkBAIC0zMSw2ICszMiw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CkBAIC0yODcsNiArMjkwLDE1IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dEV2ZW50Q29uc3RydWN0b3I6OmF0dHIxIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMSgpKSkpOwogfQpAQCAtMzAwLDYgKzMxMiwxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cjIoKSkpKTsKIH0KQEAgLTMx
NCw2ICszMzUsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0
b3JBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjMiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHIzKCkp
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBkNGQwZTZlYjA5Y2ZmNGFmNjk4
ZTE3OTM4ZDdlNWM5N2E1MDY5OWRhLi42YmM3NTg0ZDczZmRkOTA3ZTA0MGRmZDFiZThiMmVkZjU3
MTM0YWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzMsNiArMzQsOCBAQAogI2luY2x1ZGUgIkpTRE9N
T3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJK
U05vZGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAtMjU1LDYgKzI1OCwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0
ZW1Cb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0RXZlbnRUYXJnZXQ6Oml0ZW0iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNw
cAppbmRleCBlMDdiNGVhNTdkNWQ4YzhiNzQzNmQ0ZGMwNzAzZmUxOWZiYWM3ZGM3Li4yY2QxYmZi
YTQ1YjMwMmY5YjQ5YjU5M2FiZTE1NWQxZmJjMDg0NjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNw
cApAQCAtMjMsMTIgKzIzLDE1IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTg1LDYg
KzE4OCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RFeGNlcHRpb246Om5hbWUiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm5hbWUoKSkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAppbmRleCA1NjRmNmZkY2ZkNjViYTgw
ZTBhNDBjYTRiMjFkOGRhNTUwZjQxZDFkLi5mYTZlYTMwOGY0ZmZmMDgwMThkYWNmMWU1ZmEzZGQ1
YzVjMzA5MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCkBA
IC0yMywxMiArMjMsMTUgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1
ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVy
dFN0cmluZ3MuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTUsNiArMTk4
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQVNl
Y3JldEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmFTZWNyZXRBdHRyaWJ1dGUi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmFT
ZWNyZXRBdHRyaWJ1dGUoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXgg
NmMwZTU0NjAxYTQ2NTk2MWNkYzA2ODI5MTRlNzZmZWJjZGMxNTJkYS4uODExOThhYzc1ZmNhMTM4
YjJhYjhmNzhjMjc2NzEwOTM3YjBkZWVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKQEAgLTk0LDYgKzk1LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJKU1Rlc3RUeXBlZGVmcy5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCkBAIC04MjEsNiArODIzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6
cmVndWxhckF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwucmVndWxhckF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtODM0LDYgKzg0NSwx
NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldFJlZ3VsYXJBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTg1Miw2ICs4NzIsMTUgQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoSlNH
bG9iYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFs
T2JqZWN0OjpwdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC04NjUsNiArODk0LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6
c2V0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
ODg0LDYgKzkyMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OnB1YmxpY0FuZFByaXZh
dGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwucHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC05MDAsNiArOTQ3LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0CiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6
c2V0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC05MjEsNiArOTc3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6ZW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKSkpOwogfQpA
QCAtOTM3LDYgKzEwMDIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpzZXRFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC05NTYsNiArMTAz
MCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0Q0VSZWFjdGlvbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIHJldHVybiBKU1Rlc3RDRVJlYWN0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC05NjcsNiArMTA1MCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aQogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENFUmVhY3Rpb25z
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdENFUmVhY3Rpb25zIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7
CiB9CkBAIC05NzksNiArMTA3MSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RD
RVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC05OTAs
NiArMTA5MSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0Q0VSZWFj
dGlvbnNTdHJpbmdpZmllciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIiksIHN0cmxlbigi
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTEwMDIsNiArMTEx
MiwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdENhbGxUcmFjZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IHJldHVybiBKU1Rlc3RDYWxsVHJhY2VyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEw
MTMsNiArMTEzMiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2Fs
bFRyYWNlckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpYwogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0Q2FsbFRyYWNlciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RDYWxsVHJhY2VyIiksIHN0cmxlbigiVGVzdENhbGxUcmFjZXIiKSksIHZhbHVlKTsKIH0KQEAg
LTEwMjYsNiArMTE1NCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJh
Y2VyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0Q2FsbGJhY2tJbnRlcmZhY2UiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RDYWxsYmFja0ludGVyZmFj
ZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMDQwLDYgKzExNzcsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDYWxsYmFja0ludGVyZmFjZSIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxsYmFj
a0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIpKSwgdmFsdWUpOwog
fQpAQCAtMTA1NCw2ICsxMjAwLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENh
bGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
cmV0dXJuIEpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKQEAgLTEwNjUsNiArMTIyMCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihK
Uwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdEdsb2JhbE9iamVjdDo6VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIiksIHN0cmxlbigiVGVzdENsYXNzV2l0aEpT
QnVpbHRpbkNvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CkBAIC0xMDc3LDYgKzEyNDEsMTUgQEAg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RET01K
SVQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RE
T01KSVQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTA4OCw2ICsxMjYxLDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dEdsb2JhbE9iamVjdDo6VGVzdERPTUpJVCIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RET01KSVQiKSwgc3RybGVuKCJUZXN0RE9N
SklUIikpLCB2YWx1ZSk7CiB9CkBAIC0xMTAwLDYgKzEyODIsMTUgQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9t
YWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdERvbWFpblNlY3Vy
aXR5Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0
RG9tYWluU2VjdXJpdHk6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTExMSw2ICsxMzAy
LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0
eUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RG9tYWluU2VjdXJpdHkiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9tYWluU2VjdXJpdHkiKSksIHZhbHVlKTsK
IH0KQEAgLTExMjMsNiArMTMyMywxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RE
b21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsRwogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkQnlTZXR0aW5nQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFibGVkQnlTZXR0aW5nIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0RW5hYmxlZEJ5U2V0
dGluZzo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMTM0LDYgKzEzNDMsMTUgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEVuYWJsZWRCeVNldHRpbmciKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5hYmxl
ZEJ5U2V0dGluZyIpLCBzdHJsZW4oIlRlc3RFbmFibGVkQnlTZXR0aW5nIikpLCB2YWx1ZSk7CiB9
CkBAIC0xMTQ2LDYgKzEzNjQsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2EKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEVuYWJsZWRGb3JDb250ZXh0Iik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0RW5hYmxlZEZvckNv
bnRleHQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTE1Nyw2ICsxMzg0LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RW5h
YmxlZEZvckNvbnRleHQiKSwgc3RybGVuKCJUZXN0RW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVl
KTsKIH0KQEAgLTExNjksNiArMTQwNSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpYwogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9y
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFdmVudENvbnN0cnVjdG9yIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMTgwLDYgKzE0MjUsMTUgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0b3JDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEV2ZW50Q29uc3RydWN0b3IiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZl
bnRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7
CiB9CkBAIC0xMTkyLDYgKzE0NDYsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2EKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEV2ZW50VGFyZ2V0Iik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0RXZlbnRUYXJnZXQ6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTIwMyw2ICsxNDY2LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0RXZlbnRUYXJnZXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRUYXJnZXQiKSwgc3RybGVuKCJUZXN0RXZl
bnRUYXJnZXQiKSksIHZhbHVlKTsKIH0KQEAgLTEyMTUsNiArMTQ4NywxNSBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEV4Y2VwdGlvbiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2Vw
dGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMjI2LDYgKzE1MDcsMTUgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2EKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEV4Y2VwdGlvbiIpLCBzdHJsZW4o
IlRlc3RFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTEyMzgsNiArMTUyOCwxNSBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICByZXR1cm4gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCkBAIC0xMjQ5LDYgKzE1NDgsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamUK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIp
LCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2YWx1ZSk7CiB9CkBAIC0xMjYx
LDYgKzE1NjksMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXgKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHJldHVybiBKU1Rlc3RHbG9iYWxPYmplY3Q6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMTI3Miw2ICsxNTg5LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4CiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dEdsb2JhbE9iamVjdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RHbG9iYWxPYmplY3QiKSwgc3RybGVuKCJUZXN0R2xvYmFsT2Jq
ZWN0IikpLCB2YWx1ZSk7CiB9CkBAIC0xMjg0LDYgKzE2MTAsMTUgQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTI5NSw2ICsxNjMwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3Io
SlNHbG9iCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTMwNyw2ICsxNjUxLDE1IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEzMTgsNiArMTY3MSwxNSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
IiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUp
OwogfQpAQCAtMTMzMCw2ICsxNjkyLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBy
ZXR1cm4gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTEzNDEsNiArMTcxMiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbAog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTM1NCw2ICsxNzM0LDE1IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0SW50ZXJm
YWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEzNjgsNiArMTc1NywxNSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SW50ZXJmYWNlIiksIHN0cmxlbigi
VGVzdEludGVyZmFjZSIpKSwgdmFsdWUpOwogfQpAQCAtMTM4Miw2ICsxNzgwLDE1IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZSIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNj
b3JlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEzOTMsNiArMTgwMCwxNSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmVDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEludGVyZmFjZUxlYWRpbmdVbmRl
cnNjb3JlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CiB9CkBAIC0xNDA1LDYgKzE4MjEs
MTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamUKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdEl0ZXJhYmxlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1
cm4gSlNUZXN0SXRlcmFibGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTQxNiw2ICsx
ODQxLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SXRlcmFibGUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SXRlcmFibGUi
KSwgc3RybGVuKCJUZXN0SXRlcmFibGUiKSksIHZhbHVlKTsKIH0KQEAgLTE0MjgsNiArMTg2Miwx
NSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsTwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNDM5LDYgKzE4ODIsMTUgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpKSwgdmFs
dWUpOwogfQpAQCAtMTQ1MSw2ICsxOTAzLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxlCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE1hcExpa2UiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RNYXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTE0NjIsNiArMTkyMywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsRwog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBMaWtlQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TWFw
TGlrZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVzdE1hcExpa2UiKSksIHZhbHVlKTsKIH0K
QEAgLTE0NzQsNiArMTk0NCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RNYXBM
aWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYgogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNDg1LDYgKzE5NjQsMTUgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpLCBz
dHJsZW4oIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsK
IH0KQEAgLTE0OTcsNiArMTk4NSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNTA4LDYgKzIwMDUs
MTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTUyMCw2ICsyMDI2
LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJu
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiB9CiAKQEAgLTE1MzEsNiArMjA0NiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Ywogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxl
bigiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9
CkBAIC0xNTQzLDYgKzIwNjcsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0
cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTU1NCw2ICsyMDg3LDE1IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZENvbnN0cnVjdG9yIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQ29u
c3RydWN0b3IiKSwgc3RybGVuKCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpKSwgdmFsdWUpOwogfQpA
QCAtMTU2Niw2ICsyMTA4LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2Jh
bE9iamVjdDo6QXVkaW8iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJl
dHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IApAQCAtMTU3Nyw2ICsyMTI4LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dEF1ZGlvQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvclNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OkF1ZGlvIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiQXVkaW8iKSwgc3Ry
bGVuKCJBdWRpbyIpKSwgdmFsdWUpOwogfQpAQCAtMTU4OSw2ICsyMTQ5LDE1IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHJldHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTYwMCw2ICsyMTY5LDE1IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjEyLDYgKzIxOTAsMTUgQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNl
cHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTYyMyw2ICsyMjEwLDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3Ry
bGVuKCJUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAg
LTE2MzUsNiArMjIzMSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERl
bGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0xNjQ2LDYgKzIyNTEsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFs
dWUpOwogfQpAQCAtMTY1OCw2ICsyMjcyLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldp
dGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERl
bGV0ZXJXaXRoSW5kZXhlZEdldHRlciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTE2NjksNiArMjI5MiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1
Y3RvcihKUwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjgxLDYgKzIzMTMs
MTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aENvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTY5Miw2ICsyMzMzLDE1IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVy
Q2FsbFdpdGgiKSwgc3RybGVuKCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpKSwgdmFsdWUpOwog
fQpAQCAtMTcwNCw2ICsyMzU0LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEdldHRlck5vSWRlbnRp
ZmllciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVz
dE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE3
MTUsNiArMjM3NCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIiksIHN0
cmxlbigiVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNzI3
LDYgKzIzOTUsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0
cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
R2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTczOCw2
ICsyNDE1LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwg
c3RybGVuKCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAt
MTc1MCw2ICsyNDM2LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE3NjEsNiAr
MjQ1NiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNzczLDYgKzI0
NzcsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTc4
NCw2ICsyNDk3LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwg
dmFsdWUpOwogfQpAQCAtMTc5Niw2ICsyNTE4LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9i
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTE4MDcsNiArMjUzOCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYgog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTE4MTksNiArMjU1OSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xODMwLDYgKzI1NzksMTUgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25z
dHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0
ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlciIpLCBzdHJsZW4oIlRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xODQyLDYgKzI2MDAs
MTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdl
dHRlckFuZFNldHRlciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0
dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTg1Myw2ICsyNjIwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
Q29uc3RyCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVk
R2V0dGVyQW5kU2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlciIp
KSwgdmFsdWUpOwogfQpAQCAtMTg2NSw2ICsyNjQxLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rv
cihKCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewog
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE4NzYsNiArMjY2MSwxNSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yKAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGlucyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiks
IHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsK
IH0KQEAgLTE4ODgsNiArMjY4MiwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNHbG9iYQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xODk5LDYgKzI3MDIsMTUgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcyIpKSwgdmFsdWUpOwogfQpAQCAtMTkxMSw2ICsyNzIzLDE1IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3Ry
dWN0b3IoSlNHCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0
cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5MjIs
NiArMjc0MywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycgogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpKSwgdmFsdWUpOwogfQpA
QCAtMTkzNSw2ICsyNzY1LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPcGVyYXRpb25Db25kaXRpb25hbCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5NDksNiArMjc4OCwx
NSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iagogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE9wZXJhdGlvbkNvbmRpdGlv
bmFsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIiksIHN0cmxlbigiVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTYzLDYgKzI4MTEsMTUgQEAgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGUKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTk3NCw2ICsyODMxLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNHbG9i
YWxPCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMiKSwgc3RybGVuKCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpKSwgdmFs
dWUpOwogfQpAQCAtMTk4Niw2ICsyODUyLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTk5Nyw2ICsyODcyLDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlQ29uc3RydWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UiKSwgc3RybGVuKCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5j
ZSIpKSwgdmFsdWUpOwogfQpAQCAtMjAwOSw2ICsyODkzLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rv
cihKU0dsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE92ZXJyaWRlQnVp
bHRpbnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwMjAsNiAr
MjkxMywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3JTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcnJpZGVCdWlsdGlu
cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE92ZXJyaWRlQnVpbHRpbnMi
KSksIHZhbHVlKTsKIH0KQEAgLTIwMzIsNiArMjkzNCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5J
bnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFBsdWdpbkludGVyZmFj
ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdFBs
dWdpbkludGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMDQzLDYgKzI5NTQs
MTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFj
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RQbHVnaW5JbnRlcmZhY2UiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
UGx1Z2luSW50ZXJmYWNlIiksIHN0cmxlbigiVGVzdFBsdWdpbkludGVyZmFjZSIpKSwgdmFsdWUp
OwogfQpAQCAtMjA1NSw2ICsyOTc1LDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlNYXBMaWtlIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0UmVhZE9ubHlNYXBM
aWtlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwNjYsNiArMjk5NSwxNSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFJlYWRPbmx5TWFwTGlrZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RSZWFkT25seU1h
cExpa2UiKSwgc3RybGVuKCJUZXN0UmVhZE9ubHlNYXBMaWtlIikpLCB2YWx1ZSk7CiB9CkBAIC0y
MDc4LDYgKzMwMTYsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlN
YXBMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRMaWtlQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RSZWFkT25seVNldExpa2UiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RSZWFkT25seVNldExpa2U6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjA4OSw2ICszMDM2LDE1IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVh
ZE9ubHlTZXRMaWtlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlTZXRMaWtlIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFJlYWRPbmx5U2V0TGlrZSIpLCBz
dHJsZW4oIlRlc3RSZWFkT25seVNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxMDEsNiArMzA1
NywxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seVNldExpa2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dEdsb2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29z
dDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMTEyLDYgKzMwNzcsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0
cnVjdG9yKEpTR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Iik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpLCBzdHJsZW4oIlRlc3RSZXBvcnRFeHRyYU1lbW9yeUNv
c3QiKSksIHZhbHVlKTsKIH0KQEAgLTIxMjQsNiArMzA5OCwxNSBAQCBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemF0aW9u
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U2Vy
aWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMTM1LDYgKzMxMTgsMTUg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Db25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGUKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFs
aXphdGlvbiIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uIikpLCB2YWx1ZSk7CiB9CkBAIC0y
MTQ3LDYgKzMxMzksMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXph
dGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJp
dGFuY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBy
ZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2U6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMjE1OCw2ICszMTU5LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVj
dG9yCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxNzAs
NiArMzE4MCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5kaXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMTgxLDYgKzMyMDAsMTUgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dCIpKSwgdmFsdWUpOwogfQpAQCAtMjE5Myw2ICszMjIxLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxlCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTIyMDQsNiArMzI0MSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbENvbnN0cnVjdG9yKEpT
R2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsIiksIHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWwiKSksIHZhbHVlKTsKIH0KQEAgLTIyMTcsNiArMzI2MywxNSBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMjMxLDYgKzMyODYsMTUgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yKEoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIp
LCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsK
IH0KQEAgLTIyNDUsNiArMzMwOSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXRMaWtlQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U2V0TGlrZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0yMjU2LDYgKzMzMjksMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNldExpa2Ui
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U2V0TGlrZSIpLCBzdHJsZW4oIlRlc3RTZXRMaWtlIikpLCB2YWx1ZSk7CiB9CkBAIC0y
MjY4LDYgKzMzNTAsMTUgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMjI3OSw2ICszMzcwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
U3RyaW5naWZpZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXIiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTIyOTEsNiArMzM5MSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHJldHVybiBKU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzAyLDYgKzM0MTEsMTUgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllckFub255bW91c09w
ZXJhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpLCBzdHJsZW4oIlRl
c3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjMxNCw2
ICszNDMyLDE1IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5v
bnltb3VzT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBKU1Rlc3RTdHJpbmdp
Zmllck5hbWVkT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIzMjUsNiAr
MzQ1MiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0
b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTIz
MzcsNiArMzQ3MywxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmll
ck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVu
dGVkQXNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBcyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
cmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCkBAIC0yMzQ4LDYgKzM0OTMsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc0NvbnN0
cnVjdG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1l
bnRlZEFzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcyIpLCBzdHJsZW4o
IlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSksIHZhbHVlKTsKIH0KQEAg
LTIzNjAsNiArMzUxNCwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVk
VG9TdHJpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZzo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzcxLDYgKzM1MzQsMTUgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0Nv
bnN0cnVjdG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1l
ZFRvU3RyaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBzdHJs
ZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsKIH0K
QEAgLTIzODMsNiArMzU1NSwxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1
cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0yMzk0LDYgKzM1NzUsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0cKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFk
T25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZSIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5
QXR0cmlidXRlIikpLCB2YWx1ZSk7CiB9CkBAIC0yNDA2LDYgKzM1OTYsMTUgQEAgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVj
dG9yKEpTR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjQxNyw2ICszNjE2LDE1IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKSwg
c3RybGVuKCJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0K
QEAgLTI0MjksNiArMzYzNywxNSBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0R2xvYmFsT2JqZWN0OjpUZXN0VHlwZWRlZnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHJldHVybiBKU1Rlc3RUeXBlZGVmczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0yNDQwLDYgKzM2NTcsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RUeXBlZGVm
cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJsZW4oIlRlc3RUeXBlZGVmcyIpKSwgdmFsdWUpOwogfQpA
QCAtMjQ1NSw2ICszNjgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OnJl
Z3VsYXJPcGVyYXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjQ3OCw2ICszNzEzLDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uRW5hYmxlZEF0UnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTI0OTYsNiArMzc0MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0
OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtMjUxNSw2ICszNzY4LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1
bmN0aW9uRW5hYmxlZEF0UnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAgICAg
ICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwpAQCAtMjU0Myw2ICszODA1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxP
YmplY3Q6OmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb25TdGF0aWMiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI1NjYsNiArMzgzNywxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvbkVuYWJsZWRJblNwZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkSW5TcGVjaWZpY1dvcmxkIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTI1ODgsNiArMzg2OCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRJblNwZQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2Jq
ZWN0OjplbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CkBAIC0yNjEwLDYgKzM4OTksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEdsb2Jh
bE9iamVjdDo6ZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZXNFbmFibGVk
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKQEAgLTI2MzMsNiArMzkzMSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblRlc3RQcml2
YXRlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
R2xvYmFsT2JqZWN0Ojp0ZXN0UHJpdmF0ZUZ1bmN0aW9uIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudGVzdFByaXZhdGVGdW5jdGlvbigpOwpA
QCAtMjY1Miw2ICszOTU5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uQ2FsY3VsYXRlU2VjCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RHbG9iYWxPYmplY3Q6OmNh
bGN1bGF0ZVNlY3JldFJlc3VsdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICBpbXBsLmNhbGN1bGF0ZVNlY3JldFJlc3VsdChXVEZNb3ZlKHByb21pc2Up
KTsKQEAgLTI2NjksNiArMzk4NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvbwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0R2xvYmFsT2JqZWN0
OjpnZXRTZWNyZXRCb29sZWFuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdl
dFNlY3JldEJvb2xlYW4oKSkpKTsKIH0KQEAgLTI2ODUsNiArNDAxMCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlv
blRlc3RGZWF0dXJlRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0R2xvYmFsT2JqZWN0Ojp0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFu
KCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwCmluZGV4IDNmNTAzYWI4ZDVhMzJkZGUyZGQ1ZWU3ZDg5NWY3NzZkMzY5NWZkN2Qu
LjZlNjIyZjliNTAxZGY4YjZmZDRiOGI4ZjliOTJlNTI1MDFiNjlhYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0yMyw2ICsy
Myw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01Jc29T
dWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCiAjaW5j
bHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgpAQCAtMzAsNiArMzEsOCBAQAogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjgy
LDYgKzI4NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuYwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyOjppbmRleGVkU2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5k
ZXggNzEzMzlhMWFiODg1NTk0M2ZkYmExYzcwNDlhODBhN2IwYmYxNzAyYS4uMGEyZGE1YjVhMDUy
YTY4MzU3Zjg1ZjU3ZmU4MDE5M2Q1NWQ3MTAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKQEAgLTM4LDYgKzM5LDggQEAKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
VGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAg
LTUxMCw2ICs1MTMsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHQKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGlj
UmVhZE9ubHlBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5
QXR0cigpKSkpOwogfQogCkBAIC01MjUsNiArNTM3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEpT
R2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFj
ZTo6aW1wbGVtZW50c1N0YXRpY0F0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVu
dHNTdGF0aWNBdHRyKCkpKSk7CiB9CiAKQEAgLTU0MCw2ICs1NjEsMTUgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJT
ZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGljQXR0ciIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC01NjAsNiArNTkwLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpKSk7CiB9CkBAIC01
NzYsNiArNjE1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmltcGxl
bWVudHNTdHIyKCkpKSk7CiB9CkBAIC01OTIsNiArNjQwLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMlNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVy
ZmFjZTo6c2V0SW1wbGVtZW50c1N0cjIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTYxMiw2
ICs2NjksMTUgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0
cjMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LmltcGxlbWVudHNTdHIzKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC02MjYsNiAr
NjkyLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
SW50ZXJmYWNlOjpJbXBsZW1lbnRzU3RyMyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgdGhpc09iamVjdC5zZXRJbXBsZW1lbnRzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02NDIsNiArNzE3LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c05vZGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKSkpOwogfQpAQCAtNjU4LDYgKzc0MiwxNSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNOb2RlIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50
c05vZGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTY3OSw2ICs3NzIsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2UKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlOjpzdXBw
bGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoKSkpKTsKIH0KIApAQCAtNjk0LDYgKzc5
NiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JT
dXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIo
KSkpKTsKIH0KIApAQCAtNzA5LDYgKzgyMCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyU2V0dGVyKEpTRwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnNl
dFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwogICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBbJl0gewpAQCAtNzI5LDYgKzg0OSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZh
Y2U6OnN1cHBsZW1lbnRhbFN0cjEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIx
KGltcGwpKSkpOwogfQpAQCAtNzQ1LDYgKzg3NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6
OnN1cHBsZW1lbnRhbFN0cjIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGlt
cGwpKSkpOwogfQpAQCAtNzYxLDYgKzg5OSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMlNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnNl
dFN1cHBsZW1lbnRhbFN0cjIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTc4MSw2ICs5Mjgs
MTUgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIz
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gdGhpc09iamVj
dC5zdXBwbGVtZW50YWxTdHIzKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC03OTUsNiAr
OTUxLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SW50ZXJmYWNlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RJbnRlcmZhY2U6OlN1cHBsZW1lbnRhbFN0cjMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIHRoaXNPYmplY3Quc2V0U3VwcGxlbWVudGFsU3RyMyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MTEsNiArOTc2LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTm9kZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8
Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGlt
cGwpKSkpOwogfQpAQCAtODI3LDYgKzEwMDEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlOjpz
ZXRTdXBwbGVtZW50YWxOb2RlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIsICJOb2RlIik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtODQ4
LDYgKzEwMzEsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVJlZmxl
Y3RBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlOjphdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0YXR0
cmlidXRlQXR0cikpKSk7CiB9CkBAIC04NjQsNiArMTA1NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlUmVmbGVjdEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRl
cmZhY2U6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtODg3
LDYgKzEwODgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGgKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01l
dGhvZDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAg
aW1wbC5pbXBsZW1lbnRzTWV0aG9kMSgpOwpAQCAtOTA3LDYgKzExMTcsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9u
SW1wbGVtZW50c01ldGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
OTM2LDYgKzExNTUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50
c01ldGhvZDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxl
bWVudHNNZXRob2QzKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApA
QCAtOTUzLDYgKzExODEsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWUKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6aW1wbGVt
ZW50c01ldGhvZDQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHRocm93
U2NvcGUucmVsZWFzZSgpOwogICAgIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNNZXRob2Q0KCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTk3Miw2ICsx
MjA5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvblRha2VOb2Rlc0JvZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnRha2VOb2RlcyIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGltcGxSZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExT
ZXF1ZW5jZTxJRExJbnRlcmZhY2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKGltcGxSZXN1bHQubm9kZXMpKSkpOwpAQCAt
OTkxLDYgKzEyMzcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWUKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVu
dGFsTWV0aG9kMSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
ICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QxKGltcGwp
OwpAQCAtMTAxMSw2ICsxMjY2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnN1
cHBsZW1lbnRhbE1ldGhvZDIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMTA0MCw2ICsxMzA0LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RJbnRlcmZhY2U6OnN1cHBsZW1lbnRhbE1ldGhvZDMiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbE1ldGhvZDMoKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC0xMDU3LDYgKzEzMzAs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yRnVuY3Rpb25TdXBwbGVtZW50YWwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kNCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNCgp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
TGVhZGluZ1VuZGVyc2NvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAppbmRleCAzNjI4Y2Q2
NjI3Y2M4ZWZmNzUzNGI5NjQ2ZjhiZWY1YTkyOTE0OGRmLi4xOTY3ZGYwZWQ5Mjc4NzQ3Mzc4ZDJi
MGIwNDU4MmYxNmE2NGFiYTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5jcHAKQEAgLTIzLDEyICsyMywxNSBAQAogCiAjaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgi
CiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90
b3R5cGUuaD4KQEAgLTE4NSw2ICsxODgsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlUmVhZG9ubHlHZXR0ZXIoSlNHbG9iYWxPYmoKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SW50ZXJmYWNlTGVhZGlu
Z1VuZGVyc2NvcmU6OnJlYWRvbmx5Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5yZWFkb25seSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5kZXggMWMxMWJjNmJmYjk2YmZiYmQ3YjkwN2E5Y2Jj
YzU4MDUyOTZiMjhkNS4uMTNmYjQ2YmMxMjE0MGQxYTRiZGRjNTE1MjExZTUxYWUxNmRjZmY0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBAIC0yMiwxMiAr
MjIsMTUgQEAKICNpbmNsdWRlICJKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCiAjaW5j
bHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NQnVpbHRpbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JCdWlsdGlucy5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTk3LDYgKzIwMCwx
NSBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3I6OnRlc3RBdHRyaWJ1dGVDdXN0b20iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIHJldHVybiB0aGlzT2JqZWN0LnRlc3RBdHRyaWJ1dGVDdXN0
b20obGV4aWNhbEdsb2JhbE9iamVjdCk7CiB9CiAKQEAgLTIwOCw2ICsyMjAsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEpT
R2xvYmFsT2JqZWN0KiBsZXgKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6OnRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxl
eGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC0yMTksNiArMjQwLDE1IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEpTR2xv
YmFsT2JqZWN0KiBsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21TZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6VGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICB0aGlzT2JqZWN0LnNldFRlc3RBdHRy
aWJ1dGVSV0N1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMzQsNiArMjY0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6dGVzdEN1c3RvbUZ1bmN0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVu
Y29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tRnVuY3Rpb24oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYWxsRnJhbWUpKSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAppbmRleCBlYmUyYzYyZjk5NGUx
YWI0NWQ2ZjYxMzg0NzE0ODQyMzE1OTNhYTM0Li43ZmE2ZTRiNzNmYTc1NzA1NTU2MTE1YTI5ODFi
NGFhOTBmYmI5ZGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzEsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIK
KyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzU4LDYgKzM2MSwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90bwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6Om5hbWVkU2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTM4Myw2ICszOTUsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjppbmRleGVk
U2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVy
V2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDU5MTVhMTUzMGYyNmVmMWNmMTU5YjljN2I1NDhhNGYz
YzMyNWYwNGMuLjU5YmRiMjUwNjA4YWZlZWJiYWM2ZDkwMGE2ZjFlY2M1ODQ3MWQ0OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAt
MjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RP
TUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMCw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3Bl
cmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBl
Lmg+CkBAIC0yNjUsNiArMjY4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllcjo6bmFtZWREZWxldGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldp
dGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyLmNwcAppbmRleCBkNWY0NzhlZmU1NjAw
ZGE1NDQ2Njg1MzdhMDVjMmNkYmI3NmQ0OGJmLi45ODU3YjExNmExMzQ1MmU4MjdkMmU3NzI4NGVh
YzFmZjFmMmRjYjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElk
ZW50aWZpZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkpTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
QEAgLTMwLDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
RnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDQsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5
cGVGdW5jdGkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXI6OmdldHRlck5hbWUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4
IGVjNjcwMDY5NjA0ZDhlMTRlOGI4MmYxYjUwZjFhNDIyYjQ2NjU5MTIuLjk3ZmNkY2UyNzQ2MzUx
ZmIwZGMyYzI5NWQzNTE0YThhNDZkNzlkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZS5oIgpAQCAtMzAsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzEwLDYgKzMxMywxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6bmFtZWRTZXR0ZXIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXIuY3BwCmluZGV4IDBiZTM0MDVhMjQxODdmZDM1M2U2ZTA3YTZiMGI4YmE5ZjAx
ZDJmNjYuLmU4Njc5MDRlNjhkMjBmZmM3ZjFhYTc4YmEyNGM5ZmQzN2QzZjg5ZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAKQEAg
LTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUg
IkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNE
T01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzEsNiArMzIsOCBA
QAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgpAQCAtMzM1LDYgKzMzOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlcjo6bmFtZWRTZXR0ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzYwLDYgKzM3
MiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6
aW5kZXhlZFNldHRlciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKaW5kZXggYWU0
ZWU5NjgzNTRlMmMwMmE0ZTkxMDVhOTA1ZDViMmMyNzk5YTE0ZS4uMmU5YzUwMGIyZWYyNDExZDdh
MjQyNDAxM2IwMmE5Mzg0NzVhYzczYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRT
ZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcApAQCAtMjMsNiAr
MjMsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNv
U3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUFic3Ry
YWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMSw2ICszMiw4IEBACiAjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBA
IC0zNTgsNiArMzYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyOjpuYW1lZFNldHRlciIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0zODMsNiAr
Mzk1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
QW5kU2V0dGVyOjppbmRleGVkU2V0dGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTQwMSw2ICs0MjIsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmluZGV4
ZWRTZXR0ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRl
eCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwpAQCAtNDE0LDYgKzQ0NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclBy
bwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0TmFt
ZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6anNUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0
ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChh
cmdzQ291bnQgPT0gMSkgewogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KGpzVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm90b3R5cGVGdW5j
dGlvbkluZGV4ZWRTZXR0ZXIyQm9keShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNh
c3RlZFRoaXMpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAppbmRleCAyNmM2MjI1YTEyMDgyNzJjNDUyYjM2
ZDBiMTcwODIzMDdjNzY5NWFmLi40ODEwY2NhMmRlYjRjMDkwMzQxOWM3ZWYyMDdhMGVlYTNiM2Zj
NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzEs
NiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMzM4LDYgKzM0MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJp
YgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6dW5mb3JnZWFibGVBdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9N
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxl
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNTMsNiArMzY1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0luc3RhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6dW5mb3JnZWFibGVPcGVyYXRp
b24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1w
bC51bmZvcmdlYWJsZU9wZXJhdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zLmNwcAppbmRleCAyNzQyM2FhYzVlNjEzMjI0YzQ3NjUxZWFhMzQy
ZmZiMmY3ZjA0ODg0Li4yODc5NmY1N2M2MzdiNGZmODA3NGVhN2U5ZjdhOGE0MDY4ODY3Y2MwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcApA
QCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJK
U0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCkBAIC0zMSw2ICszMiw4IEBACiAjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zMTksNiAr
MzIyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluczo6dW5mb3JnZWFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmli
dXRlKCkpKSk7CiB9CkBAIC0zMzQsNiArMzQ2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnVuZm9y
Z2VhYmxlT3BlcmF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgIGltcGwudW5mb3JnZWFibGVPcGVyYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCBh
M2I4NzkzMWUxMmZhZWI3M2FiNWYxNDQyNWY0NjVkMTUyOGIxMjZiLi5iYTY5YmZhYTM2MjJmODY1
YWU2YjNlMzQ0ZWFkYzUxMDJiMDJiYjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFj
ZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgpAQCAtMzUsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJv
bWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0
Tm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0yODksNiArMjkxLDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0Tm9kZTo6bmFtZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwubmFtZSgpKSkpOwogfQpAQCAtMzAyLDYgKzMxMywxNSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE5vZGU6OnNldE5hbWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyMiw2
ICszNDIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlQm8KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE5vZGU6OnRlc3RXb3JrZXJQcm9taXNlIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudGVz
dFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zMzksNiArMzY4LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25DYWxjdWxhdGVTZWNyZXRSZXN1CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3ROb2RlOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jYWxjdWxhdGVTZWNy
ZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zNTYsNiArMzk0LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25HZXRT
ZWNyZXRCb29sZWFuQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3ROb2RlOjpnZXRTZWNyZXRCb29sZWFuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExC
b29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpKTsKIH0KQEAgLTM3Miw2ICs0MTksMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE5vZGU6OnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNW
YWx1ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJv
b2xlYW4oKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMTY0MzNkOTlmMTJhMTBkMTExZmE4YTUwYzYx
ZWM4ODRlMjZjNzI5MS4uZTdiMjQ3ODZiMjBmZmVlNDQ0MGRmMjJhYTBkOTNhMzRmMDcwYTU0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5o
IgogI2luY2x1ZGUgIkpTV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZl
ci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTI2NjYsNiArMjY2NywxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RPYmo6OnJlYWRPbmx5TG9uZ0F0dHIiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpKSk7CiB9CkBA
IC0yNjc5LDYgKzI2ODksMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRP
bmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpyZWFkT25seVN0cmluZ0F0dHIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnJl
YWRPbmx5U3RyaW5nQXR0cigpKSkpOwogfQpAQCAtMjY5Miw2ICsyNzExLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6cmVhZE9ubHlUZXN0T2JqQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSkpKTsKIH0KQEAgLTI3MDUsNiArMjczMywxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKEpTR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0T2JqOjpz
dGF0aWNSZWFkT25seUxvbmdBdHRyKCkpKSk7CiB9CiAKQEAgLTI3MTcsNiArMjc1NCwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OnN0YXRp
Y1N0cmluZ0F0dHIoKSkpKTsKIH0KIApAQCAtMjcyOSw2ICsyNzc1LDE1IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6c2V0U3RhdGljU3RyaW5nQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIFsmXSB7CkBAIC0yNzQ1LDYgKzI4MDAsMTUgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RT
dWJPYmpHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpUZXN0U3ViT2JqIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTI3NTcsNiArMjgyMSwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3RhdGljUmVhZG9ubHlPYmpHZXR0
ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OnRlc3RTdGF0aWNSZWFkb25seU9iaiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChV
TkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMjc3
NCw2ICsyODQ3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6ZW51bUF0dHIiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRp
b248VGVzdE9iajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmVudW1BdHRyKCkpKSk7CiB9CkBAIC0yNzg3LDYgKzI4NjksMTUgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakVudW1BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
T2JqOjpzZXRFbnVtQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gb3B0aW9uYWxOYXRp
dmVWYWx1ZSA9IHBhcnNlRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTI4MDgsNiArMjg5OSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplYwogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmJ5dGVBdHRyIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETEJ5dGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYnl0ZUF0dHIo
KSkpKTsKIH0KQEAgLTI4MjEsNiArMjkyMSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQnl0ZUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldEJ5dGVB
dHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
Qnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjgzOSw2ICsyOTQ4LDE1IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6b2N0ZXRBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETE9jdGV0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLm9jdGV0QXR0cigpKSkpOwogfQpAQCAtMjg1Miw2ICsyOTcwLDE1IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6c2V0T2N0ZXRBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMT2N0ZXQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI4NzAsNiAr
Mjk5NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNob3J0QXR0ciIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTaG9ydD4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIoKSkpKTsKIH0KQEAgLTI4
ODMsNiArMzAxOSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFNob3J0QXR0ciIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNob3J0PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0yOTAxLDYgKzMwNDYsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjbGFtcGVk
U2hvcnRBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETENsYW1wQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuY2xhbXBlZFNob3J0QXR0cigpKSkpOwogfQpAQCAtMjkxNCw2
ICszMDY4LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0Q2xhbXBlZFNob3J0QXR0ciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRv
cjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5MzIsNiArMzA5NSwxNSBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RPYmo6OmVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExFbmZvcmNlUmFuZ2VBZGFw
dG9yPElETFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmZv
cmNlUmFuZ2VTaG9ydEF0dHIoKSkpKTsKIH0KQEAgLTI5NDUsNiArMzExNywxNSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6OnNldEVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMU2hv
cnQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTYzLDYgKzMxNDQsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
T2JqOjp1bnNpZ25lZFNob3J0QXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0y
OTc2LDYgKzMxNjYsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVuc2lnbmVk
U2hvcnRBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2wKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRVbnNpZ25lZFNob3J0QXR0ciIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2ln
bmVkU2hvcnQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5OTQsNiArMzE5MywxNSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6OmxvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwubG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMwMDcsNiArMzIxNSwxNSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RPYmo6OnNldExvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzAyNSw2ICsz
MjQyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmdMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdMb25nQXR0cigpKSkpOwog
fQpAQCAtMzAzOCw2ICszMjY0LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpM
b25nTG9uZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0TG9uZ0xvbmdBdHRy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Z0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwNTYsNiArMzI5MSwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OnVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSkp
KTsKIH0KQEAgLTMwNjksNiArMzMxMywxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFVuc2lnbmVk
TG9uZ0xvbmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzA4Nyw2ICsz
MzQwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c3RyaW5nQXR0ciIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0cigpKSkpOwogfQpA
QCAtMzEwMCw2ICszMzYyLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0U3RyaW5nQXR0ciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzExOCw2ICszMzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6dXN2c3RyaW5nQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwudXN2c3RyaW5nQXR0cigpKSkpOwogfQpAQCAtMzEzMSw2ICszNDExLDE1
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkp
IHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGRvY3VtZW50LCAiVGVzdE9iajo6c2V0VXN2c3RyaW5nQXR0ciIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMzE0OSw2ICszNDM4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0T2JqQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdE9iakF0dHIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0T2JqQXR0cigpKSkpOwogfQpA
QCAtMzE2Miw2ICszNDYwLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0
T2JqQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0VGVzdE9iakF0dHIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRo
cm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9i
amVjdCIsICJ0ZXN0T2JqQXR0ciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzE4MCw2ICszNDg3LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6dGVzdE51bGxhYmxlT2JqQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRyKCkpKSk7CiB9CkBAIC0zMTkz
LDYgKzM1MDksMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJs
ZU9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRUZXN0TnVsbGFibGVPYmpBdHRyIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyMTEs
NiArMzUzNiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RP
YmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmxlbmllbnRUZXN0T2JqQXR0ciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0cigpKSkpOwogfQpA
QCAtMzIyNCw2ICszNTU4LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0TGVuaWVudFRlc3RPYmpB
dHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
SW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
IlRlc3RPYmplY3QiLCAibGVuaWVudFRlc3RPYmpBdHRyIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMjQyLDYgKzM1ODUs
MTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjp1bmZvcmdlYWJsZUF0dHIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKSkp
OwogfQpAQCAtMzI1NSw2ICszNjA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihKU0dsb2JhCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVHJlYXROdWxsQXNFbXB0eUFkYXB0b3I8SURM
RE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKSkpOwogfQpAQCAtMzI2OCw2ICszNjI5LDE1
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ1NldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkp
IHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGRvY3VtZW50LCAiVGVzdE9iajo6c2V0U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExU
cmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0zMjg2LDYgKzM2NTYsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTR2wKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjp1c3ZzdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZT
dHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpKSk7CiB9CkBAIC0zMjk5LDYgKzM2NzgsMTUg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETFVTVlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTMzMTcsNiArMzcwNSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0
ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTRwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmJ5dGVTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExC
eXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSkpKTsKIH0KQEAgLTMzMzAsNiArMzcy
NywxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nU2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldEJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zMzQ4LDYgKzM3NTQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzdHJpbmdMb25n
UmVjb3JkQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
c3RyaW5nTG9uZ1JlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTMzNjEsNiArMzc3NiwxNSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RPYmo6OnNldFN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
TG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMzNzksNiArMzgwMywxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExVU1ZTdHJpbmcs
IElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAt
MzM5Miw2ICszODI1LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJp
bmdMb25nUmVjb3JkQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29y
ZEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExSZWNvcmQ8SURMVVNWU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzQx
MCw2ICszODUyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdM
b25nUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMUmVjb3JkPElETEJ5dGVTdHJpbmcsIElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC51c3ZzdHJpbmdM
b25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzQyMyw2ICszODc0LDE1IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdMb25nUmVjb3JkQXR0clNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9u
Zz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0NDEsNiArMzkwMSwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyaW5nT2JqUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OnN0cmluZ09ialJlY29yZEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMSW50
ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nT2JqUmVjb3JkQXR0cigpKSkpOwogfQpA
QCAtMzQ1NCw2ICszOTIzLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdPYmpSZWNvcmRBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0U3RyaW5nT2JqUmVjb3Jk
QXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2JqPj4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTM0NzIsNiArMzk1MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0Jgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnN0cmluZ051bGxh
YmxlT2JqUmVjb3JkQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTnVsbGFibGVPYmpSZWNvcmRB
dHRyKCkpKSk7CiB9CkBAIC0zNDg1LDYgKzM5NzIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRT
dHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExOdWxsYWJsZTxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzUwMyw2ICszOTk5
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tS
ZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNr
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTM1
MTYsNiArNDAyMSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nVm9p
ZENhbGxiYWNrUmVjb3JkQXR0clNldHRlcihKU0dsb2JhbE9iamVjdAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFN0cmluZ1ZvaWRDYWxsYmFja1Jl
Y29yZEF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxi
YWNrPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0z
NTM0LDYgKzQwNDgsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRpY3Rpb25h
cnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpkaWN0aW9uYXJ5QXR0ciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
aWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5kaWN0aW9uYXJ5QXR0cigp
KSkpOwogfQpAQCAtMzU0Nyw2ICs0MDcwLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0RGljdGlv
bmFyeUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExEaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0zNTY1LDYgKzQwOTcsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlRGljdGlvbmFyeUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpudWxsYWJsZURpY3Rpb25hcnlB
dHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5udWxsYWJsZURpY3Rpb25hcnlBdHRyKCkpKSk7CiB9CkBAIC0zNTc4LDYgKzQxMTks
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlRGljdGlvbmFyeUF0
dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXROdWxsYWJsZURpY3Rpb25hcnlBdHRyIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM1
OTYsNiArNDE0NiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVk
VHlwZUluVW5pb25BdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmFubm90YXRlZFR5cGVJblVuaW9uQXR0
ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExVbmlvbjxJRExET01TdHJpbmcsIElETENsYW1wQWRhcHRvcjxJRExMb25nPj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLmFubm90YXRlZFR5cGVJblVuaW9uQXR0cigpKSkpOwogfQpAQCAtMzYwOSw2ICs0MTY4
LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpBbm5vdGF0ZWRUeXBlSW5Vbmlv
bkF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0QW5ub3RhdGVkVHlwZUluVW5pb25BdHRyIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5pb248SURM
RE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0zNjI3LDYgKzQxOTUsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFubm90
YXRlZFR5cGVJblNlcXVlbmNlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBlSW5TZXF1
ZW5jZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuYW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyKCkpKSk7CiB9CkBAIC0zNjQwLDYgKzQyMTcs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVl
bmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRBbm5vdGF0ZWRUeXBlSW5TZXF1ZW5jZUF0dHIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5j
ZTxJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjU4LDYg
KzQyNDQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9u
RW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjppbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TEVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpKSk7CiB9CkBAIC0zNjcxLDYg
KzQyNjYsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9u
RW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVt
ZXJhdGlvbjxBbHRlcm5hdGVFbnVtTmFtZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY5Miw2ICs0
Mjk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNZWRpYURldmljZXNHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWVkaWFEZXZpY2VzIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxN
ZWRpYURldmljZXM+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZWRpYURldmljZXMoKSkpKTsKIH0KQEAgLTM3MDUsNiAr
NDMxOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnhtbE9iakF0dHIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRl
c3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC54bWxPYmpBdHRyKCkpKSk7CiB9CkBAIC0zNzE4LDYgKzQzNDAsMTUg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRYTUxPYmpBdHRyIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAiWE1MT2JqQXR0ciIs
ICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMzczNiw2ICs0MzY3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDcmVhdGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6aXNDcmVhdGUiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pc0NyZWF0
ZSgpKSkpOwogfQpAQCAtMzc0OSw2ICs0Mzg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpDcmVhdGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0Q3Jl
YXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
Qm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzc2Nyw2ICs0NDE2LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKSkpOwogfQpAQCAt
Mzc4MCw2ICs0NDM4LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNzk4LDYgKzQ0NjUsMTUgQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0T2JqOjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpKSk7CiB9
CkBAIC0zODExLDYgKzQ0ODcsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5n
YXR0ckF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM4MjksNiArNDUxNCwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RPYmo6OmdldEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpKSk7CiB9CkBAIC0zODQyLDYgKzQ1MzYsMTUg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0clNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYw
LDYgKzQ1NjMsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpnZXRVbnNpZ25lZEludGVncmFsQXR0cmli
dXRlOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRy
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFVuc2lnbmVkTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgc3Rk
OjptYXgoMCwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKSkpOwogfQpAQCAtMzg3Myw2ICs0NTg1
LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0clNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzg5MSw2ICs0NjEyLDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKSkpOwogfQpAQCAt
MzkwNCw2ICs0NjM0LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRCb29sZWFuQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0Qm9vbGVhbkF0dHJpYnV0ZTpX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTM5MjIsNiArNDY2MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmdldFVSTEF0
dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5nZXRVUkxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpKSk7CiB9CkBA
IC0zOTM1LDYgKzQ2ODMsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVSTEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTMsNiArNDcxMCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OmdldFVSTEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVy
bGF0dHJBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETFVTVlN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1
cmxhdHRyQXR0cikpKSk7CiB9CkBAIC0zOTY2LDYgKzQ3MzIsMTUgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2Jq
OjpzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5ODQs
NiArNDc1OSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50U3RyaW5nQXR0ckF0dHIpKSkpOwogfQpAQCAtMzk5Nyw2ICs0NzgxLDE1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDAxNSw2ICs0ODA4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Z2V0SW50ZWdyYWxBdHRy
aWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0
ckF0dHIpKSkpOwogfQpAQCAtNDAyOCw2ICs0ODMwLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0
SW50ZWdyYWxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdy
YWxBdHRyQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQwNDYsNiArNDg1NywxNSBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQm9vbGVhbj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5oYXNBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRy
QXR0cikpKSk7CiB9CkBAIC00MDU5LDYgKzQ4NzksMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldEJv
b2xlYW5BdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0
dHJBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDA3Nyw2ICs0OTA2LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6Z2V0VVJMQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA5MCw2ICs0OTI4LDE1IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtNDEwOSw2ICs0OTU2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDEyNSw2ICs0OTgx
LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDE0Niw2ICs1MDExLDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0
aWNHZXR0ZXIoCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6ZW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYygpKSkpOwogfQogCkBAIC00MTYxLDYgKzUwMzUs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRlcigKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU3RhdGlj
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKQEAgLTQx
ODAsNiArNTA2MywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJh
eUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnR5cGVkQXJyYXlBdHRyIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZs
b2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwudHlwZWRBcnJheUF0dHIoKSkpKTsKIH0KQEAgLTQxOTMsNiAr
NTA4NSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHJT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFR5cGVkQXJyYXlBdHRyIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRmxvYXQzMkFycmF5Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAidHlwZWRB
cnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDIxMCw2ICs1MTExLDE1IEBAIGJvb2wgc2V0SlNUZXN0
T2JqVHlwZWRBcnJheUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y3Vz
dG9tQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIHRo
aXNPYmplY3QuY3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtNDIyMSw2
ICs1MTMxLDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OkN1c3RvbUF0
dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHRoaXNPYmplY3Quc2V0
Q3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CkBAIC00MjMzLDYgKzUxNTIsMTUgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBldmVudEhhbmRsZXJB
dHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgd29y
bGRGb3JET01PYmplY3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjQ0LDYgKzUxNzIsMTUgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHUKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpP
bmZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2V0RXZlbnRIYW5kbGVyQXR0cmli
dXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qud3JhcHBlZCgp
LCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICB2bS5oZWFwLndyaXRlQmFycmll
cigmdGhpc09iamVjdCwgdmFsdWUpOwogICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHZhbHVlKTsK
QEAgLTQyNTksNiArNTE5NiwxNSBAQCBib29sIHNldEpTVGVzdE9iak9uZm9vKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVgogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHJldHVybiBldmVudEhhbmRs
ZXJBdHRyaWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwg
d29ybGRGb3JET01PYmplY3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjcwLDYgKzUyMTYsMTUg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28oSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWQKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpPbndlYmtpdGZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29F
dmVudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2V0RXZlbnRIYW5k
bGVyQXR0cmlidXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QsIHRoaXNPYmplY3Qu
d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQsIHZhbHVlKTsKICAgICB2bS5oZWFwLndy
aXRlQmFycmllcigmdGhpc09iamVjdCwgdmFsdWUpOwogICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KHZhbHVlKTsKQEAgLTQyODYsNiArNTI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhFeGVj
U3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC53aXRoRXhlY1N0YXRlQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNDI5OSw2ICs1MjYzLDE1IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoRXhlY1N0YXRlQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6c2V0V2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQzMTcsNiArNTI5MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhDYWxsV2l0aEFu
ZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwud2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUo
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9
CkBAIC00MzMwLDYgKzUzMTIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRXaXRoQ2FsbFdpdGhB
bmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzNDgsNiAr
NTMzOSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MzY0LDYgKzUzNjQsMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxU
ZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlIiwgIlRlc3RPYmoiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00Mzg1LDYg
KzUzOTQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlR2UKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSgh
Y29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDQwMSw2ICs1NDE5
LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZVNlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRF
eGVjU3RhdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQyMiw2ICs1NDQ5LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNT
dGF0ZVdpdGhTcGFjZXNBCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00NDM4LDYgKzU0NzQsMTUgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlV2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZEV4ZWNTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ0NjAsNiArNTUwNSwxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjEiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpKSk7CiB9CkBA
IC00NDc2LDYgKzU1MzAsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjFTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRDb25kaXRpb25hbEF0dHIx
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQ5Nyw2ICs1NTYwLDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6Y29uZGl0aW9uYWxBdHRyMiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSkpKTsKIH0KQEAgLTQ1MTMsNiArNTU4NSwx
NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMlNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjIiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC00NTM0LDYgKzU2MTUsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0
dHIzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuY29u
ZGl0aW9uYWxBdHRyMygpKSkpOwogfQpAQCAtNDU1MCw2ICs1NjQwLDE1IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ1NzAsNiAr
NTY2OSwxNSBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKUwogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgcmV0dXJuIEpTVGVzdE9iamVj
dEE6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDU4NCw2ICs1NjkyLDE1IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y29uZGl0aW9u
YWxBdHRyNCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oImNvbmRpdGlvbmFsQXR0cjQiKSwgc3RybGVuKCJjb25kaXRpb25hbEF0dHI0Iikp
LCB2YWx1ZSk7CiB9CkBAIC00NTk5LDYgKzU3MTYsMTUgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OmNvbmRpdGlvbmFsQXR0cjUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIHJldHVybiBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTQ2MTMsNiArNTczOSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvclNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0
cmxlbigiY29uZGl0aW9uYWxBdHRyNSIpKSwgdmFsdWUpOwogfQpAQCAtNDYyOCw2ICs1NzYzLDE1
IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHI2Iik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qzo6Z2V0
Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3Qu
Z2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC00NjQyLDYgKzU3ODYsMTUgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI2Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHI2
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiY29uZGl0aW9uYWxBdHRyNiIpLCBzdHJsZW4oImNvbmRpdGlvbmFsQXR0cjYiKSksIHZhbHVl
KTsKIH0KQEAgLTQ2NTcsNiArNTgxMCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
JmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNhY2hlZEF0dHJp
YnV0ZTEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGlmIChKU1ZhbHVl
IGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCiAgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CkBAIC00Njc1LDYgKzU4MzcsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjYWNoZWRBdHRy
aWJ1dGUyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBpZiAoSlNWYWx1
ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUyLmdldCgpKQogICAg
ICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwpAQCAtNDY5NCw2ICs1ODY1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y2FjaGVkQXR0
cmlidXRlMyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkQXR0cmlidXRlMy5nZXQoKSkKICAg
ICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKQEAgLTQ3MTQsNiArNTg5NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQW55QXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmFueUF0dHJp
YnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYW55
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NzI3LDYgKzU5MTYsMTUgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9iakFueUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2Jq
OjpzZXRBbnlBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ3NDUsNiArNTk0MywxNSBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RPYmo6Om9iamVjdEF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExPYmplY3Q+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwub2JqZWN0QXR0cmlidXRlKCkpKSk7CiB9CkBA
IC00NzU4LDYgKzU5NjUsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9iamVj
dEF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2IKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRPYmplY3RBdHRyaWJ1dGUi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPYmpl
Y3Q+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ3NzYsNiArNTk5MiwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OmNvbnRlbnREb2N1bWVudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8RG9jdW1lbnQ+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgQmluZGlu
Z1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBs
LmNvbnRlbnREb2N1bWVudCgpKSkpKTsKIH0KQEAgLTQ3ODksNiArNjAxNCwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6Om11dGFibGVQb2ludCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5tdXRhYmxlUG9pbnQoKSkpKTsKIH0KQEAgLTQ4MDIsNiArNjAzNiwxNSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OnNldE11dGFibGVQb2ludCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxTVkdQb2ludD4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxlUG9pbnQiLCAiU1ZHUG9p
bnQiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC00ODIwLDYgKzYwNjMsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3
YmVycnlHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmoKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpibHVlYmVycnkiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9u
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ibHVlYmVycnkoKSkpKTsK
IH0KQEAgLTQ4MzMsNiArNjA4NSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyYXdiZXJyeVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldEJsdWViZXJyeSIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ4NTEsNiArNjExMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
OmRlc2NyaXB0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZGVzY3JpcHRpb24oKSkpKTsKIH0KQEAgLTQ4NjQsNiArNjEzNCwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6OmlkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuaWQoKSkpKTsKIH0KQEAgLTQ4NzcsNiArNjE1NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
OnNldElkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDg5NSw2ICs2MTgzLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6aGFzaCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuaGFzaCgpKSkpOwogfQpAQCAtNDkwOCw2ICs2MjA1LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6cmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
NDkyMCw2ICs2MjI2LDE1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0T2JqOjpyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gcHJvcGVydHkuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInJlcGxhY2VhYmxlQXR0cmlidXRlIiksIHN0cmxl
bigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0KQEAgLTQ5MzMsNiArNjI0OCwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RPYmo6Om51bGxhYmxlRG91YmxlQXR0cmlidXRlIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5NDYsNiArNjI3
MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxs
YWJsZUxvbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5NTksNiArNjI5MiwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6Om51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCb29s
ZWFuPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZUJvb2xl
YW5BdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5NzIsNiArNjMxNCwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6Om51bGxhYmxlU3RyaW5nQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoKSkpKTsKIH0KQEAgLTQ5ODUsNiArNjMzNiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETExvbmc+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlKCkpKSk7CiB9CkBAIC00OTk4LDYgKzYzNTgsMTUgQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpz
ZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETExvbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC01MDE2LDYgKzYzODUsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmoKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpudWxsYWJsZVN0
cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTAyOSw2ICs2NDA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xv
YmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6
c2V0TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTUwNDcsNiArNjQzNCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0ds
b2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om51
bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVVNWU3Ry
aW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDYwLDYgKzY0NTYsMTUgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRy
aWJ1dGVTZXR0ZXIoSlNHbG9iYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjpzZXROdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8
SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTA3OCw2ICs2NDgzLDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6bnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwubnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUw
OTEsNiArNjUwNSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVC
eXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldE51bGxhYmxlQnl0ZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMQnl0ZVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTUxMDksNiArNjUzMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmF0dHJpYnV0ZSIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlKCkp
KSk7CiB9CkBAIC01MTIyLDYgKzY1NTQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjphdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpPcHRpb25hbD4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2Vy
dmVkRW51bVR5cGUoKSkpKTsKIH0KQEAgLTUxMzUsNiArNjU3NiwxNSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVTZXR0ZXIoSlNH
bG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OnNldEF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBvcHRpb25hbE5hdGl2ZVZhbHVlID0gcGFyc2VFbnVtZXJhdGlvbjxUZXN0T2JqOjpP
cHRpb25hbD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTE1Niw2ICs2NjA2LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6dGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJ
RExWb2lkPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCks
IHRocm93U2NvcGUsIGltcGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSkpKTsK
IH0KQEAgLTUxNjksNiArNjYyOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
VGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnRlc3RSZWFkT25seVBy
b21pc2VBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwudGVzdFJlYWRPbmx5UHJvbWlzZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTE4Miw2ICs2
NjUwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJp
YnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6cHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50
ZXJmYWNlPFRlc3ROb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKSkpKTsKIH0K
QEAgLTUxOTUsNiArNjY3MiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnB1dEZvcndhcmRzQXR0cmli
dXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvIGlkID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJw
dXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1dEZvcndhcmRzQXR0cmlidXRlIikpOwog
ICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC01MjE4LDYgKzY3MDQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialB1
dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpwdXRGb3J3YXJkc051bGxh
YmxlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MjMxLDYgKzY3
MjYsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFi
bGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvIGlkID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlIiksIHN0cmxlbigicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZSIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNTI1NCw2ICs2NzU4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c3RyaW5n
aWZpZXJBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MjY3LDYgKzY3
ODAsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmli
dXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRTdHJpbmdpZmllckF0dHJpYnV0ZSIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtNTI4NSw2ICs2ODA3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dGVyKEpTR2xv
YmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6
Y29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLmNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUyOTks
NiArNjgzMCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxs
eVJlYWRXcml0ZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01
MzIwLDYgKzY4NjAsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQW5kQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZUdldHQKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRpb25hbEFuZENvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5j
b25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTUzMzcsNiArNjg4NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQW5kQ29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbmRpdGlvbmFsQW5kQ29uZGl0
aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTM1OSw2ICs2OTE3LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0
dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6cnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
SW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0
dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTM3Miw2ICs2OTM5LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVNldHRl
cihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6
c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1l
Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIsICJOb2RlIik7IH0pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTM5MCw2ICs2OTY2LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6cnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVV
bmZvcmdlYWJsZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJ1bnRpbWVDb25kaXRp
b25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUoKSkpKTsKIH0KQEAgLTU0MDMsNiAr
Njk4OCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUnVudGltZUNvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdy
aXRlQXR0cmlidXRlVW5mb3JnZWFibGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDIxLDYgKzcwMTUsMTUgQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0
cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2Vh
YmxlUHJpdmF0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJ1bnRpbWVDb25kaXRp
b25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGVQcml2YXRlKCkpKSk7CiB9CkBAIC01
NDM0LDYgKzcwMzcsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVD
b25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRSdW50aW1lQ29uZGl0aW9uYWxs
eVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlUHJpdmF0ZSIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGVQcml2YXRlIiwgIk5vZGUiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDUy
LDYgKzcwNjQsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZUdldHQKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVByb21pc2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExEb3VibGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5y
dW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2UoKSkpKTsKIH0KQEAg
LTU0NjUsNiArNzA4NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUnVudGlt
ZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVQcm9taXNlU2V0dAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25h
bGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFByb21pc2U8SURMRG91YmxlPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNTQ4Myw2ICs3MTEzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxs
eUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUo
KSkpKTsKIH0KQEAgLTU0OTYsNiArNzEzNSwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZVNldHRlcihKU0dsbwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnNldENvbmRp
dGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01
NTE0LDYgKzcxNjIsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRpb25hbGx5RXhwb3NlZFRv
V29ya2VyQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSgpKSkpOwogfQpA
QCAtNTUyNyw2ICs3MTg0LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2V0Q29uZGl0aW9uYWxseUV4
cG9zZWRUb1dvcmtlckF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1NDUsNiArNzIx
MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9z
ZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0ZUdldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRX
b3JrZXJBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlKCkp
KSk7CiB9CkBAIC01NTU4LDYgKzcyMzMsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVTZXQKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzZXRDb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNTU3OSw2ICs3MjYzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTU1OTcsNiArNzI5MCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVk
QXRSdW50aW1lT3BlcgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNTYxNiw2ICs3MzE4
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
RW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBK
U1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTU2NDQsNiArNzM1NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjplbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CkBAIC01NjY3LDYgKzczODcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEluU3BlY2lmaWNX
b3IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6ZW5hYmxlZEluU3BlY2lmaWNXb3JsZFdoZW5SdW50aW1lRmVhdHVyZUVuYWJsZWQiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwpAQCAtNTY4OSw2ICs3NDE4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldvcmxkU3BlY2lmaWNNZXRob2RCCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Ondv
cmxkU3BlY2lmaWNNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTcxMSw2ICs3NDQ5LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNhbGN1bGF0ZVNlY3JldFJlc3VsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RPYmo6OmNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNhbGN1bGF0ZVNlY3Jl
dFJlc3VsdChXVEZNb3ZlKHByb21pc2UpKTsKQEAgLTU3MjgsNiArNzQ3NSwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRT
ZWNyZXRCb29sZWFuQm9keQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0T2JqOjpnZXRTZWNyZXRCb29sZWFuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExC
b29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpKTsKIH0KQEAgLTU3NDQsNiArNzUwMCwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3JldAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjp0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1cmVHZXRTZWNyZXRC
b29sZWFuKCkpKSk7CiB9CkBAIC01NzYxLDYgKzc1MjYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHko
SlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6dm9pZE1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICBpbXBsLnZvaWRNZXRob2QoKTsKQEAgLTU3NzgsNiArNzU1MiwxNSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25W
b2lkTWV0aG9kV2l0aEFyZ3NCbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjp2b2lkTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
NTgwNiw2ICs3NTg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RCb2R5KEpTQzo6CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmJ5dGVNZXRob2QiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETEJ5dGU+KGltcGwuYnl0ZU1ldGhvZCgpKSkpOwogfQpAQCAtNTgy
MSw2ICs3NjEzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmJ5dGVNZXRob2RXaXRoQXJn
cyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC01ODQ3LDYgKzc2NDgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RCb2R5
KEpTQzoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6b2N0ZXRNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0
TWV0aG9kKCkpKSk7CiB9CkBAIC01ODYyLDYgKzc2NzIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRo
QXJnc0IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6b2N0ZXRNZXRob2RXaXRoQXJncyIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01ODg4LDYgKzc3MDcs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bG9uZ01ldGhvZCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRv
SlM8SURMTG9uZz4oaW1wbC5sb25nTWV0aG9kKCkpKSk7CiB9CkBAIC01OTAzLDYgKzc3MzEsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTG9uZ01ldGhvZFdpdGhBcmdzQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bG9uZ01ldGhvZFdpdGhBcmdzIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTU5MjksNiArNzc2NiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RCb2R5KEpTQzo6SgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpvYmpNZXRo
b2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5vYmpNZXRob2QoKSkp
KTsKIH0KQEAgLTU5NDQsNiArNzc5MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpvYmpN
ZXRob2RXaXRoQXJncyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01OTcwLDYgKzc4MjUsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakluc3RhbmNlRnVuY3Rpb25VbmZv
cmdlYWJsZU1ldGhvZEJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6dW5mb3JnZWFibGVNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TExvbmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpKTsKIH0KQEAgLTU5ODUsNiArNzg0OSwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02MDA3LDYgKzc4ODAsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aFhQYXRoTlNSZXMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC02MDI5LDYgKzc5MTEsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTdHJpbmdNZXRob2QKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bnVs
bGFibGVTdHJpbmdNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0
cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLm51bGxhYmxlU3RyaW5nTWV0aG9kKCkp
KSk7CiB9CkBAIC02MDQ0LDYgKzc5MzUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1N0YXQKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bnVs
bGFibGVTdHJpbmdTdGF0aWNNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgVGVzdE9i
ajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QoKSkpKTsKIH0KIApAQCAtNjA1OCw2ICs3OTU4
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhv
ZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC02MDc4LDYgKzc5ODcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1B
cmdCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6bWV0aG9kV2l0aEVudW1BcmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjEwMCw2ICs4MDE4LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhTdGFuZGFsb25lCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhTdGFuZGFsb25lRW51bUFyZyIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC02MTIyLDYgKzgwNDksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
RW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAg
ICBhdXRvIGVudW1BcmcgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9u
YWw8Q29udmVydGVyPElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj46OlJldHVyblR5
cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5
cGU+Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlw
ZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1Bcmci
LCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSkpOwpA
QCAtNjE0Miw2ICs4MDc4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVuCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhP
cHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAg
ICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFRlc3RP
Ymo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0T2Jq
OjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10o
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25h
bEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RP
Ymo6OkVudW1UeXBlPigpKTsgfSk7CkBAIC02MTYyLDYgKzgxMDcsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhh
dFJlcXVpcmVzQWwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAy
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC02MTg1LDYgKzgxMzksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0EKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9k
V2l0aFVTVlN0cmluZ0FyZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02MjA3LDYgKzgxNzAsMTUgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE51bGxhYmxlVVMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkp
IHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAg
ICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTYyMjksNiArODIwMSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpt
ZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC02MjUxLDYgKzgyMzIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9k
V2l0aEJ5dGVTdHJpbmdBcmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjI3Myw2ICs4MjYzLDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOdWxsYWJsZUJ5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOdWxsYWJsZUJ5dGVTdHJpbmdBcmciKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjI5NSw2ICs4Mjk0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhCeXRlU3RyaW5n
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
Om1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC02MzE3LDYgKzgzMjUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSgKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2Vy
aWFsaXplZFZhbHVlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYzMzksNiArODM1NiwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoUmVjb3JkQm9keQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoUmVjb3JkIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYzNjEs
NiArODM4NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uQgogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9u
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5tZXRo
b2RXaXRoRXhjZXB0aW9uKCkpOwpAQCAtNjM3OCw2ICs4NDEzLDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhF
eGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6Om1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdMb25nIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5tZXRo
b2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZygpKSkpOwogfQpAQCAtNjM5Myw2ICs4NDM3LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdP
YmplY3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC5tZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKSk7CiB9CkBAIC02NDA4LDYg
Kzg0NjEsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kQm9keShKU0MKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21NZXRob2QoKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC02NDIyLDYgKzg0ODQsMTUgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3MiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbU1ldGhvZFdpdGhBcmdzKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtNjQzNiw2ICs4NTA3LDE1
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblByaXZhdGVNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnByaXZhdGVNZXRob2QiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNjQ1Niw2ICs4NTM2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnB1YmxpY0FuZFBy
aXZhdGVNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjQ3Niw2ICs4NTY1LDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2
ZW50TGlzdGVuZXJCb2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RPYmo6OmFkZEV2ZW50TGlzdGVuZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjUwNSw2
ICs4NjAzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVuZXJCCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnJlbW92ZUV2ZW50TGlzdGVuZXIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtNjUzNCw2ICs4NjQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVWb2lk
Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OndpdGhFeGVjU3RhdGVWb2lkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIGltcGwud2l0aEV4ZWNTdGF0ZVZvaWQoKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY1NTEsNiArODY2NywxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoRXhlY1N0YXRlT2JqQm9keQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRlT2JqIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aEV4ZWNTdGF0ZU9iaigqanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNjU2Niw2ICs4Njkx
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVWb2lkRXhjCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhFeGVjU3RhdGVWb2lkRXhjZXB0aW9u
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53aXRo
RXhlY1N0YXRlVm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCkpKTsKQEAgLTY1ODMsNiArODcxNywxNSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRl
T2JqRXhjZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0T2JqOjp3aXRoRXhlY1N0YXRlT2JqRXhjZXB0aW9uIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwud2l0aEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbigq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpA
QCAtNjU5OCw2ICs4NzQxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAg
IGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERv
Y3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02NjE4LDYg
Kzg3NzAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRFeGVjU3RhdGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2Mzgs
NiArODc5OSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRl
eHQpKQpAQCAtNjY1Niw2ICs4ODI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlcyIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNvbnRleHQpKQpAQCAtNjY3NCw2ICs4ODUzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFy
Z3VtZW50CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6OndpdGhEb2N1bWVudEFyZ3VtZW50Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkp
CkBAIC02Njk2LDYgKzg4ODQsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlckRvY3VtZW50QXIKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6d2l0aENhbGxl
ckRvY3VtZW50QXJndW1lbnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogaW5jdW1iZW50
RG9jdW1lbnQgPSBpbmN1bWJlbnRET01XaW5kb3coKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLCAqY2FsbEZyYW1lKS5kb2N1bWVudCgpOwogICAgIGlmICgh
aW5jdW1iZW50RG9jdW1lbnQpCkBAIC02NzE2LDYgKzg5MTMsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldp
bmRvd0FyZ3UKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6d2l0aENhbGxlcldpbmRvd0FyZ3VtZW50Iik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwud2l0aENhbGxlcldpbmRvd0FyZ3VtZW50
KGluY3VtYmVudERPTVdpbmRvdygqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCksICpjYWxsRnJhbWUpKTsKQEAgLTY3MzMsNiArODkzOSwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBcgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxBcmciKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgYXV0byBvcHQgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29u
dmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNjc1Myw2ICs4OTY4LDE1IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEFyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1
ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG9wdCA9IGFyZ3VtZW50MC52YWx1
ZSgpLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02NzczLDYgKzg5OTcsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmci
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtNjc5OCw2ICs5MDMxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRp
b25hCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC02ODI2LDYgKzkwNjgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3Ry
ID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJ
RExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBA
IC02ODQ2LDYgKzkwOTcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9w
dGlvbmFsVVNWU3RyaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0g
YXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExV
U1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02
ODY2LDYgKzkxMjYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlv
bmFsQXRvbVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2Nv
cGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFy
Z3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSgpIDogY29udmVydDxJRExB
dG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg4Niw2ICs5MTU1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFN0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZp
bmVkKCkgPyAiZm9vIl9zIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTA2LDYgKzkxODQsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0FuZERlZmF1bHRWYWx1
ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1
ZSgpLmlzVW5kZWZpbmVkKCkgPyBBdG9tU3RyaW5nKCJmb28iLCBBdG9tU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTI2LDYg
KzkyMTMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSXNOdWxsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1l
bnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTQ2LDYg
KzkyNDIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3Ry
aW5nSXNVbmRlZmluZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTY5NjYsNiArOTI3MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRo
b2RXaXRoT3B0aW9uYWxBdG9tU3RyaW5nSXNOdWxsIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9t
KCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTg2LDYgKzkzMDAsMTUgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0
cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDA2LDYg
KzkzMjksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsVVNW
U3RyaW5nSXNFbXB0eVN0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0
ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29u
dmVydDxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CkBAIC03MDI2LDYgKzkzNTgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9k
V2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzRW1wdHlTdHJpbmciKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7CiAgICAgYXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gZW1w
dHlBdG9tKCkgOiBjb252ZXJ0PElETEF0b21TdHJpbmdBZGFwdG9yPElETERPTVN0cmluZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDQ2LDYgKzkzODcs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNO
YU4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElE
TFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTcwNjYsNiArOTQxNiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxGbAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRo
b2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gbnVtYmVyID0gY29udmVydDxJRExVbnJlc3RyaWN0ZWRGbG9hdD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwODYsNiArOTQ0NSwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxMbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPigpIDog
T3B0aW9uYWw8Q29udmVydGVyPElETExvbmdMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExM
b25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CkBAIC03
MTA2LDYgKzk0NzQsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdJc1plcm8iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBudW1i
ZXIgPSBjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOwpAQCAtNzEyNiw2ICs5NTAzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVu
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
Om1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQo
MCk7CiAgICAgYXV0byBudW1iZXIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPigpIDog
T3B0aW9uYWw8Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252
ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSkpOwpAQCAtNzE0Niw2ICs5NTMyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVu
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
Om1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTY2LDYgKzk1
NjEsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2UKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVu
Y2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5n
Pj46OlJldHVyblR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTg2LDYgKzk1OTAs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2UKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJ
c0VtcHR5Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJyYXkgPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+OjpSZXR1cm5UeXBleyB9IDogY29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzIwNiw2ICs5
NjE5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEJvb2xl
YW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBiID0gYXJndW1lbnQwLnZhbHVl
KCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExCb29sZWFuPjo6UmV0dXJu
VHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExCb29sZWFuPjo6UmV0dXJuVHlwZT4oY29u
dmVydDxJRExCb29sZWFuPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkp
KTsKQEAgLTcyMjYsNiArOTY0OCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxCbwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RX
aXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBh
dXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CkBAIC03MjQ2LDYgKzk2NzcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
QW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gYSA9IGNvbnZlcnQ8SURMQW55PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOwpAQCAtNzI2Niw2ICs5NzA2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbE9iamVjdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRv
IGEgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVy
PElETE9iamVjdD46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0
Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExPYmplY3Q+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNzI4Niw2ICs5NzM1LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbE51CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlciIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKICAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJm
YWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJs
ZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczMDYsNiArOTc2NCwxNSBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxOdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9w
dGlvbmFsTnVsbGFibGVXcmFwcGVySXNOdWxsIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC03MzI2LDYg
Kzk3OTMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFAKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsWFBh
dGhOU1Jlc29sdmVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gcmVzb2x2ZXIg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETFhQYXRoTlNSZXNvbHZlcjxYUGF0aE5TUmVzb2x2ZXI+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJy
ZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZl
ciIsICJYUGF0aE5TUmVzb2x2ZXIiKTsgfSk7CkBAIC03MzQ2LDYgKzk4MjIsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aE9wdGlvbmFsUmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsUmVjb3JkIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGF1dG8gcmVjb3JkID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmlu
ZWQoKSA/IFdURjo6bnVsbG9wdCA6IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERP
TVN0cmluZywgSURMTG9uZz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNzM2Niw2ICs5ODUxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFByCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhPcHRpb25hbFByb21pc2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBw
cm9taXNlID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IG51bGxwdHIgOiBjb252
ZXJ0PElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CkBAIC03Mzg2LDYgKzk4ODAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXIK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6
bWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTc0MDgsNiArOTkxMSwxNSBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03NDMzLDYgKzk5NDUsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aENhbGxiYWNrQW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZU9iamVjdEVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRo
Q2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsKQEAgLTc0NTMsNiArOTk3NCwxNSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tGdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC03NDc1LDYgKzEwMDA1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFjCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNzUwMCw2ICsxMDAzOSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RX
aXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrRnVu
Y3Rpb248SlNUZXN0Q2FsbGJhY2tGdW5jdGlvbj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkg
eyB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrRnVu
Y3Rpb25BbmRPcHRpb25hbEFyZyIpOyB9KTsKQEAgLTc1MjAsNiArMTAwNjgsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25T
dGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmci
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gY2FsbGJh
Y2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpTVGVzdENhbGxi
YWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAic3RhdGljTWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTc1MzksNiArMTAwOTYsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25T
dGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6c3RhdGljTWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC03NTYxLDYgKzEwMTI3LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkNvbmRpdGlvbmFsTWV0aG9kMUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsTWV0aG9kMSIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5jb25kaXRpb25h
bE1ldGhvZDEoKSkpKTsKIH0KQEAgLTc1NzksNiArMTAxNTQsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxN
ZXRob2QyQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6Y29uZGl0aW9uYWxNZXRob2QyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93
U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2QyKCk7CkBAIC03NTk5
LDYgKzEwMTgzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsTWV0aG9k
MyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBs
LmNvbmRpdGlvbmFsTWV0aG9kMygpOwpAQCAtNzYxOCw2ICsxMDIxMSwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMUJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVz
dE9iaiIpOyB9KTsKQEAgLTc2MzYsNiArMTAyMzgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJC
b2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6b3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJv
YmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7
CkBAIC03NjU0LDYgKzEwMjY1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2Fk
ZWRNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHJB
cmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKQEAgLTc2NjksNiArMTAyODksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRC
b2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6b3ZlcmxvYWRlZE1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CkBAIC03Njg0LDYgKzEwMzEzLDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q1Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNU
ZXN0Q2FsbGJhY2tJbnRlcmZhY2U+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50TXVzdEJlT2JqZWN0RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJj
YWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiKTsgfSk7CkBAIC03Njk5
LDYgKzEwMzM3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2Qm9kCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBsaXN0QXJnID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8RE9NU3RyaW5nTGlzdD4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImxpc3RBcmciLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIkRPTVN0cmluZ0xpc3QiKTsgfSk7CkBAIC03
NzE0LDYgKzEwMzYxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Qm9kCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRo
b2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJheUFyZyA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03NzI5LDYgKzEwMzg1LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2Q4Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RP
YmoiKTsgfSk7CkBAIC03NzQ0LDYgKzEwNDA5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9k
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6
Om92ZXJsb2FkZWRNZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byB3aW5kb3cgPSBjb252ZXJ0PElETEludGVyZmFjZTxXaW5kb3dQcm94eT4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAid2luZG93IiwgIlRl
c3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJXaW5kb3dQcm94eSIpOyB9KTsKQEAgLTc3
NTksNiArMTA0MzMsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQm8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhv
ZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5QXJnID0g
Y29udmVydDxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzc3NCw2ICsxMDQ1NywxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMTFCbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVk
TG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03Nzg5
LDYgKzEwNDgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHJBcmcgPSBjb252
ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTc4MDQsNiArMTA1MDUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm8KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6b3Zlcmxv
YWRlZE1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGJsb2JBcmdzID0gY29udmVy
dFZhcmlhZGljQXJndW1lbnRzPElETEludGVyZmFjZTxCbG9iPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsICpjYWxsRnJhbWUsIDApOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC03ODE4LDYgKzEwNTI4LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RPdmVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0
ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChh
cmdzQ291bnQgPT0gMCkgewogICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm9keShsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMpKSk7CkBAIC03ODcwLDYgKzEwNTg5
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBz
dHJBcmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTc4ODgsNiArMTA2MTYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6b3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVk
TWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7CkBAIC03OTA2LDYg
KzEwNjQzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNp
emVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQg
PT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc5MzcsNiArMTA2ODMsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29u
dmVydDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9k
ZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzk1Miw2
ICsxMDcwNywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0
aERpc3Rpbmd1aXNoaW5nVW5pb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAg
ICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKTsKQEAgLTc5NjcsNiArMTA3MzEsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aERp
c3Rpbmd1aXNoaW5nVW5pb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBk
aXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC03
OTkyLDYgKzEwNzY1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxl
eGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlm
ICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3Vt
ZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRo
b2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODAwNyw2ICsxMDc4OSwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kV2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVy
dDxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdEludGVyZmFjZT4sIElETERPTVN0cmluZywgSURM
TG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04MDIy
LDYgKzEwODEzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6
Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJn
c0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MDQ5LDYgKzEwODQ5LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdV
bmlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1l
bnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iamVjdE9y
Tm9kZSA9IGNvbnZlcnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZh
Y2U8VGVzdE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
QEAgLTgwNjcsNiArMTA4NzYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6b3ZlcmxvYWRl
ZE1ldGhvZFdpdGhOb25EaXN0aW5ndWlzaGluZ1VuaW9uIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODA4NSw2ICsxMDkwMywxNSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kV2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMiwgY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMikgewogICAg
ICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKQEAgLTgxMDcsNiArMTA5MzQsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6
b3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBhdXRvIG9iamVjdE9yTm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVW5pb248
SURMSW50ZXJmYWNlPFRlc3RPYmo+LCBJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04MTIyLDYgKzEwOTU4LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlVW5pb24iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxMzcs
NiArMTA5ODIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAg
ICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwpAQCAtODE2NCw2ICsxMTAxOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25h
bAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2Jq
OjpvdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gb2JqZWN0T3JOb2RlID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IHRy
dWUgOiBjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmluZywgSURMQm9vbGVhbj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04MTc5LDYgKzExMDQyLDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
TG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxOTQs
NiArMTEwNjYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWwKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7CiAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uMUJvZHkobGV4aWNhbEdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzKSkpOwpAQCAtODIyMiw2ICsxMTEwMywxNSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpvdmVybG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5n
UGFyYW1ldGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2Jq
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2Jq
ZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAi
VGVzdE9iaiIpOyB9KTsKQEAgLTgyNDAsNiArMTExMzAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVs
bGFibGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6b3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG5vZGUgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJvdmVy
bG9hZFdpdGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIiwgIlRlc3ROb2RlIik7
IH0pOwpAQCAtODI1OCw2ICsxMTE1NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hp
bmdQYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDIpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5n
dWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CkBAIC04MjgxLDYg
KzExMTg5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAg
ICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC04Mjk3LDYgKzExMjE0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRo
T3B0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5h
cmd1bWVudCgwKTsKICAgICBhdXRvIGFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTgzMTQsNiArMTEyNDAsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
RnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y2xhc3NNZXRob2QyIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OmNsYXNzTWV0aG9kMigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSkpKSk7CiB9CiAKQEAgLTgzMjksNiArMTEyNjQsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJnID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC04MzQ2LDYgKzEx
MjkwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHR5
cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwpAQCAtODM2NCw2ICsxMTMxNywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Qx
TwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2Jq
Ojpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1p
bjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MzkxLDYgKzExMzUzLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNz
TWV0aG9kV2l0aENsYW1wCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aENsYW1wIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg0
MTYsNiArMTEzODcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRo
Q2xhbXBPbk9wdGlvbmFsIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqQXJn
c0xvbmcgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExMb25nPj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTg0MzYsNiArMTE0MTYsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTg0NjEsNiArMTE0NTAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y2xhc3NN
ZXRob2RXaXRoRW5mb3JjZVJhbmdlT25PcHRpb25hbCIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDxJRExFbmZvcmNlUmFuZ2VBZGFwdG9yPElE
TExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODQ4
MSw2ICsxMTQ3OSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjptZXRob2RXaXRoVW5zaWdu
ZWRMb25nU2VxdWVuY2UiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODUwMyw2ICsxMTUxMCwxNSBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdBcnJheUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkg
eworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
ZG9jdW1lbnQsICJUZXN0T2JqOjpzdHJpbmdBcnJheUZ1bmN0aW9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTg1MjMsNiArMTE1MzksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW8KICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6ZG9tU3RyaW5nTGlz
dEZ1bmN0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg1NDMsNiArMTE1NjgsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0
aW9uV2l0aE9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6b3BlcmF0aW9uV2l0aE9wdGlvbmFsVW5pb25QYXJhbWV0ZXIiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvcHRpb25hbFVuaW9uID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExET01T
dHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+Pjo6UmV0dXJuVHlwZT4o
KSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExET01TdHJpbmcsIElETFNlcXVlbmNl
PElETFVucmVzdHJpY3RlZERvdWJsZT4+Pjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbmlvbjxJ
RExET01TdHJpbmcsIElETFNlcXVlbmNlPElETFVucmVzdHJpY3RlZERvdWJsZT4+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTg1NjMsNiArMTE1OTcsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6bWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNl
cXVlbmNlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg1ODgsNiArMTE2MzEsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWRCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdE9iajo6Z2V0RWxlbWVudEJ5SWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODYwOCw2ICsxMTY2
MCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHkoSgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpnZXRTVkdEb2N1bWVudCIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR0RvY3VtZW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5nZXRTVkdE
b2N1bWVudCgpKSkpKTsKIH0KQEAgLTg2MjMsNiArMTE2ODQsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDFCb2R5
KEpTQzo6SlMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE9iajo6Y29udmVydDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODY0NSw2ICsxMTcxNSwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Db252ZXJ0MkJvZHkoSlNDOjpKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb252ZXJ0MiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NjY3LDYg
KzExNzQ2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbnZlcnQzIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTg2ODksNiArMTE3NzcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6SlMKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6Y29udmVy
dDQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCkpOwpAQCAtODcxMSw2ICsxMTgwOCwxNSBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxlUG9pbnRG
dW5jdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAg
ICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJU
ZXN0T2JqOjptdXRhYmxlUG9pbnRGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJm
YWNlPFNWR1BvaW50Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKSkpOwogfQpAQCAtODcyNiw2ICsx
MTgzMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PcmFuZ2VCb2R5KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpiYW5hbmEiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5iYW5hbmEoKTsKQEAgLTg3
NDMsNiArMTE4NTgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dmFyaWFkaWNTdHJpbmdN
ZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODc2Nyw2ICsxMTg5MSwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0Rv
dWJsZU1ldGhvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0T2JqOjp2YXJpYWRpY0RvdWJsZU1ldGhvZCIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NzkxLDYg
KzExOTI0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnZhcmlhZGljTm9kZU1ldGhvZCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC04ODE1LDYgKzExOTU3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljVW5pb25NZXRo
b2RCCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RP
Ymo6OnZhcmlhZGljVW5pb25NZXRob2QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODgzOSw2ICsxMTk5MCwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25BbnlCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFj
b250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQp
OworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjphbnkiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODg2NCw2
ICsxMjAyNCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7Cisg
ICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjp0ZXN0UHJvbWlzZUZ1bmN0aW9u
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbihXVEZNb3ZlKHByb21pc2UpKTsKQEAgLTg4ODEsNiArMTIwNTAs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9h
dEFyZ3VtZW50Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg5MDMsNiArMTIwODEsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6dGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RQcm9taXNlRnVu
Y3Rpb25XaXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKQEAgLTg5MjAsNiArMTIxMDcs
MTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRp
b25hbEludEFyZ3VtZW50Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYSA9IGFy
Z3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5
cGU+KGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKSk7CkBAIC04OTQwLDYgKzEyMTM2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnRl
c3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04OTU1LDYgKzEyMTYwLDE1IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9t
aXNlT3ZlcmxvYWRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gcmVxdWVzdCA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPEZldGNoUmVxdWVzdD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAwLCAicmVxdWVzdCIsICJUZXN0T2JqZWN0IiwgInRlc3RQcm9taXNlT3Zlcmxv
YWRlZEZ1bmN0aW9uIiwgIkZldGNoUmVxdWVzdCIpOyB9KTsKQEAgLTg5NzAsNiArMTIxODQsMTUg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0
UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBK
U1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTg5OTMsNiArMTIyMTYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUYKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdFN0
YXRpY1Byb21pc2VGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgVGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VG
dW5jdGlvbihXVEZNb3ZlKHByb21pc2UpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtOTAwOSw2ICsxMjI0MSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9t
aXNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAg
aWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0
T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICB9CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBUZXN0T2Jq
Ojp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uV2l0aEV4Y2VwdGlvbihXVEZNb3ZlKHByb21pc2Up
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTkwMjUs
NiArMTIyNjYsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVByb21pc2VGdW4KICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdEN1c3RvbVByb21pc2VG
dW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1
c3RvbVByb21pc2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgV1RG
TW92ZShwcm9taXNlKSkpKSk7CiB9CiAKQEAgLTkwMzksNiArMTIyODksMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0
U3RhdGljQ3VzdG9tUHIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdE9iajo6dGVzdFN0YXRpY0N1c3RvbVByb21pc2VGdW5jdGlvbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIChKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqOjp0ZXN0U3RhdGljQ3VzdG9tUHJvbWlzZUZ1
bmN0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBXVEZNb3ZlKHByb21pc2Up
KSkpKTsKIH0KIApAQCAtOTA1Myw2ICsxMjMxMiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093
bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2Jq
Ojp0ZXN0Q3VzdG9tUmV0dXJuc093blByb21pc2VGdW5jdGlvbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICB9CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEN1c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rp
b24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC05MDY3LDYg
KzEyMzM1LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnRlc3RSZXR1cm5zT3duUHJvbWlz
ZUFuZFByb21pc2VQcm94eUZ1bmN0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExQcm9taXNlPElE
TFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLnRlc3RSZXR1cm5zT3duUHJvbWlzZUFuZFByb21pc2VQcm94eUZ1bmN0aW9uKCkpKSk7
CiB9CkBAIC05MDgzLDYgKzEyMzYwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbmRp
dGlvbmFsT3ZlcmxvYWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBzdHIgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTkxMDEsNiArMTIzODcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVy
bG9hZDIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dE9iajo6Y29uZGl0aW9uYWxPdmVybG9hZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CkBAIC05MTIwLDYgKzEyNDE1LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
T3ZlcmxvYWRPCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZCIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9
IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlm
IChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTkxNDcsNiArMTI0NTEsMTUgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdE9iajo6c2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTE2
Myw2ICsxMjQ3NiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpzaW5nbGVDb25kaXRpb25h
bE92ZXJsb2FkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBh
cmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gYSA9
IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTkxODAsNiArMTI1MDIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48
c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3Vu
dCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtOTIwMyw2ICsxMjUzNCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hT
aGFkb3dSb290Qm9keQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0T2JqOjphdHRhY2hTaGFkb3dSb290Iik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyMjUsNiAr
MTI1NjUsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6b3BlcmF0aW9uV2l0aEV4dGVybmFs
RGljdGlvbmFyeVBhcmFtZXRlciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05MjQ3LDYgKzEyNTk2LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRl
eHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmJ1ZmZlclNvdXJjZVBhcmFtZXRlciIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC05MjY5LDYgKzEyNjI3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxlZ2FjeUNhbGxlck5hbWVkQm9kCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmxlZ2Fj
eUNhbGxlck5hbWVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyOTEsNiArMTI2NTgsMTUgQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFJldHVyblZhbHVlT3B0aW0KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdE9iajo6dGVzdFJldHVyblZhbHVlT3B0aW1pemF0aW9uIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTkzMTYsNiArMTI2OTIsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9iajo6dGVzdFJl
dHVyblZhbHVlT3B0aW1pemF0aW9uV2l0aEV4Y2VwdGlvbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05MzQx
LDYgKzEyNzI2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2VkCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICgh
VU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50
PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBv
c2VkVG9XaW5kb3dGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dGdW5jdGlvbigp
OwpAQCAtOTM1OCw2ICsxMjc1MiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T2JqOjpjb25kaXRp
b25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2Vy
RnVuY3Rpb24oKTsKQEAgLTkzNzUsNiArMTI3NzgsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9z
ZWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9i
ajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9u
YWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckZ1bmN0aW9uKCk7CkBAIC05MzkyLDYgKzEyODA0
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvU3RyaW5nQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFko
IWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4
dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RPYmo6OnN0cmluZ2lmaWVyQXR0cmlidXRlIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0
cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmNwcAppbmRleCA0YjRiYTczODNmYjkwNWYyZTM3OTkzYWI5OTMwYTFmMDUxMGU2
M2YyLi5iYjYyNDQ4NmRlOGU5ZmRiZjU5ZDAzYTAzODdkZDNlZDUyZDk4NzExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKQEAgLTI2LDExICsyNiwxNCBAQAog
CiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjA3LDYg
KzIxMCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6Om5vbkNv
bmRpdGlvbmFsT3BlcmF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVs
ZWFzZSgpOwogICAgIGltcGwubm9uQ29uZGl0aW9uYWxPcGVyYXRpb24oKTsKQEAgLTIyNyw2ICsy
MzksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsUHJvdG90eXBlRnVuY3Rpb25Db24KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpjb25kaXRp
b25hbE9wZXJhdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAKaW5kZXggM2QwNzkzMjBmNDk0NjVhOTY5YTY4ZGY0ZGQ1NTFjOGFjNDIz
NzI3YS4uODFkZTcwMjk0YTZiYTA1NmFhYjI5MTA2ODM3OGQ1ZTlmOGRmNTIwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRl
QnVpbHRpbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCkBAIC0zMyw2ICszNCw4IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRp
b24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
RnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0NCw2ICsyNDcsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlv
bk5hbWVkSXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdE92ZXJyaWRlQnVpbHRpbnM6Om5hbWVkSXRlbSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCmluZGV4IDMyNDQzZjUyNmJlNDNiMjQ1
Mzk4ZDQwMDcyNThiNjI2Yzc4ZjZjNDIuLjQxYTU0NzgwMGI5YjkwNmJkMjM0N2Q2Yzk1N2QwYmVm
OTZjODFjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3Bw
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCiAjaW5jbHVkZSAiRE9NUHJvbWlzZVByb3h5LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTM1LDYg
KzM2LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFu
YWx5emVyLmg+CkBAIC0yODMsNiArMjg2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnRQcm9taXNlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFByb21pc2VSZWplY3Rp
b25FdmVudDo6cHJvbWlzZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExQcm9taXNlPElETEFueT4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnByb21pc2Uo
KSkpKTsKIH0KQEAgLTI5Niw2ICszMDgsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAg
ICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50OjpyZWFzb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnJlYXNvbigpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCmluZGV4
IDhjNTkxN2EzNjFiZjRjYmFkYjcwZWY4MzRjYzM0ZjYxMGI3MTZmNGYuLjY5ZTVlNTk2YWE1OTBh
N2U1ZjE3NDc5OGQ4ODU5NTk5MDgwMzQ0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5j
cHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSlNET01BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgpAQCAtMzksNiArNDAsOCBAQAog
I2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRp
b25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRGaW5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDQsMTUgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaXJzdFN0cmluZ0F0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0U2VyaWFsaXphdGlvbjo6Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZpcnN0U3RyaW5nQXR0
cmlidXRlKCkpKSk7CiB9CkBAIC0yNTQsNiArMjY2LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxP
YmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6
YXRpb246OnNldEZpcnN0U3RyaW5nQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0yNzIsNiArMjkzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb246OnNlY29uZExvbmdB
dHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5zZWNvbmRMb25nQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0yODUsNiArMzE1LDE1IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uU2Vjb25kTG9uZ0F0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFNlY29uZExvbmdBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zMDMsNiArMzQyLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb246OnRo
aXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RFeGNlcHRpb24+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC50aGlyZFVuc2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zMTYs
NiArMzY0LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uVGhp
cmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFRoaXJkVW5zZXJpYWxp
emFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAidGhpcmRVbnNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0LDYgKzM5MSwxNSBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZUdldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RT
ZXJpYWxpemF0aW9uOjpmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5y
ZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZv
dXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtMzQ3LDYgKzQxMywx
NSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVz
dHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRGb3VydGhVbnJlc3RyaWN0ZWREb3Vi
bGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVbnJlc3RyaWN0ZWREb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2NSw2ICs0
NDAsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExv
bmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0U2VyaWFsaXphdGlvbjo6ZmlmdGhMb25nQXR0cmlidXRlIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25n
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNzgsNiArNDYyLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNv
bnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlh
bGl6YXRpb246OnNldEZpZnRoTG9uZ0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5
Niw2ICs0ODksMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
aXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFs
T2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRl
eHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0U2VyaWFsaXphdGlvbjo6c2l4dGhUeXBlZGVmQXR0
cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5zaXh0aFR5cGVkZWZBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQwOSw2ICs1MTEsMTUgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0U2l4dGhUeXBlZGVmQXR0cmlidXRlIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC00MjcsNiArNTM4LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemF0aW9uU2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlR2V0
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRp
b246OnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXZlbnRoRGlyZWN0bHlT
ZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ0MCw2ICs1NjAsMTUgQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGVTZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAg
ICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQs
ICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0U2V2ZW50aERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmli
dXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
SW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJzZXZlbnRoRGlyZWN0
bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
NTgsNiArNTg3LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2Jh
bE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VM
WSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb246OmVpZ2h0aEluZGlyZWN0
bHlBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
LCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTQ3MSw2ICs2MDksMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRp
b25FaWdodGhJbmRpcmVjdGx5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0RWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFu
Y2U+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJp
YnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0
aW9uIiwgImVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDg5LDYgKzYzNiwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9u
OjpuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
Lm5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
NTAyLDYgKzY1OCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXROaW50aE9wdGlv
bmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxp
emFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjAsNiArNjg1
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uVGVudGhGcm96
ZW5BcnJheUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb246OnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRlbnRoRnJvemVuQXJy
YXlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUzMyw2ICs3MDcsMTUgQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlU2V0dGVy
KEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYo
Y29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0U2Vy
aWFsaXphdGlvbjo6c2V0VGVudGhGcm96ZW5BcnJheUF0dHJpYnV0ZSIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZyb3plbkFycmF5PElETEJvb2xl
YW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NTEsNiArNzM0LDE1IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZUdldHRl
cihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNl
cmlhbGl6YXRpb246OmVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURM
RE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCksIHRocm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpA
QCAtNTY0LDYgKzc1NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRFbGV2ZW50
aFNlcXVlbmNlQXR0cmlidXRlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtNTgyLDYgKzc4MywxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXph
dGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAg
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9uOjp0d2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnR3ZWxmdGhJbnRlcmZhY2VTZXF1
ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTk1LDYgKzgwNSwxNSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJp
YnV0ZVNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RT
ZXJpYWxpemF0aW9uOjpzZXRUd2VsZnRoSW50ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGUiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJ
RExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKaW5kZXggY2Ew
ZWVmMTM1NWUyNDdhMDA4NzY3MjJkODcwZjNlMGU2OTE3Mjc4OC4uZjM1YjQ0MDk5MTM2ZTYwZmUz
MDkyNmNiYWNhN2YxYWUwM2VlMTk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXQuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmpl
Y3QuaCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMwLDYg
KzMxLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5
emVyLmg+CkBAIC0xOTAsNiArMTkzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigm
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAg
aWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0Ojppbmhlcml0TG9uZ0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmluaGVyaXRMb25nQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0yMDMs
NiArMjE1LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uSW5o
ZXJpdEluaGVyaXRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0OjpzZXRJbmhlcml0
TG9uZ0F0dHJpYnV0ZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAppbmRleCAzMmFmYzM2YmM3MzhmNzlkMzAyYTY3
YzJjOTcxZmY4YWEyYzVhZDc2Li42ODMzZGRlODdmMGE0OTQxNmM1YmU3YWQyNjQwMzdmMTk1YThh
MTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMwLDYgKzMxLDggQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVy
YXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CkBA
IC0xOTMsNiArMTk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdEZpbmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEds
b2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJ
S0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpj
b250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6
OmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmZpbmFsTG9uZ0F0dHJpYnV0ZUZvbygpKSkpOwogfQpAQCAtMjA2LDYg
KzIxOCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUZvb1NldHRlcgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNv
bnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXRGaW5h
bExvbmdBdHRyaWJ1dGVGb28iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMjQsNiArMjQ1LDE1IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmlu
YWxMb25nQXR0cmlidXRlQmFyR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmFsTG9uZ0F0dHJpYnV0
ZUJhciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZp
bmFsTG9uZ0F0dHJpYnV0ZUJhcigpKSkpOwogfQpAQCAtMjM3LDYgKzI2NywxNSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0
dHJpYnV0ZUJhclNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAg
ICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwg
IlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpzZXRGaW5hbExvbmdBdHRyaWJ1dGVCYXIi
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGMxNTU2N2UyNDYzMTI5MzQzZDE5MGI1YWE0
NTQxNTZlYjg0NjAxMzQuLjEzYjczMDVlZGNlZWY4ZmI2YWQ4MDVmZTM0NzM2NjY0MTM2Yzc1ZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTM3LDYgKzM4
LDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0yMTcsNiAr
MjIwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZUdldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVj
dCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29u
dGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsK
KyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFs
dWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnZhbHVlKCkpKSk7CiB9CkBAIC0yMzAsNiArMjQyLDE1IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZVNldHRlcihK
U0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlm
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c2V0VmFsdWUiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjQ4LDYgKzI2OSwx
NSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihKUwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnJlYWRvbmx5
VmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnJlYWRvbmx5VmFsdWUoKSkpKTsKIH0KQEAgLTI2MSw2ICsyOTEsMTUgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNh
Y2hlZFZhbHVlR2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjYWNoZWRWYWx1ZSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFs
dWUgPSB0aGlzT2JqZWN0Lm1fY2FjaGVkVmFsdWUuZ2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNo
ZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkBAIC0yNzks
NiArMzE4LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSgh
Y29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0
KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6
c2V0Q2FjaGVkVmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMjk3LDYgKzM0NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoSlNHbG9i
YWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnBvcnRzIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFj
ZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0cygpKSkpOwogfQpAQCAtMzEwLDYgKzM2Nywx
NSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQp
KSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAg
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhkb2N1bWVudCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNhY2hlZFJl
YWRvbmx5VmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGlmIChK
U1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0
KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CkBAIC0zMzAsNiArMzk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGVGCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmZ1bmN0aW9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTM1Miw2ICs0MjcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUYKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
eworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4
aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYg
KCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6ZnVuY3Rpb25SZXR1cm5pbmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9uUmV0dXJuaW5n
KCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAxNTEzZmQ4ZmFkNmViMjNi
YzVhZmRiZmU5MjVmNjFjZmM4NDNlODQ3Li5iNTZlY2Q4NWFkM2E2NWM0NGRmODNkOTVmZWZjNzI0
ZGVjOWJjMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTIzLDEyICsyMywxNSBA
QAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3Bh
Y2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgogI2luY2x1ZGUg
IkpTRE9NQ29udmVydFN0cmluZ3MuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5MCw2ICsxOTMsMTUgQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZ0JvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdFN0cmluZ2lmaWVyOjp0b1N0cmluZyIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9N
U3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0
cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAK
aW5kZXggZDAxN2RmYjQ5NjcxZTdkN2YwYjBiNTkzMzBiZTg3NjA2MzE1ODQ1YS4uOTkwOWIyYjk3
NjM4ZDQ2NmVjNWIwMzUyMmNhYzVlYWVkZDRkZTRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3Bl
cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCkBAIC0yMywxMiArMjMsMTUg
QEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNw
YWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkzLDE1IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvblByb3RvdHlwZUZ1CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7Cisg
ICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1
bWVudCwgIlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjo6dG9TdHJpbmciKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwudG9T
dHJpbmcoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3Bl
cmF0aW9uLmNwcAppbmRleCAzZjYyODc2MzlmNDI4YjgzMGNiZjQzZTMxNjYwNmZlODk2ZWYxNjc3
Li5lOTUyYWQ5MDVlMjljZmM0YTk2NGIwZmU3ZWJlZmU2ZWNhMjViZmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCkBAIC0yMywxMiArMjMs
MTUgQEAKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNs
dWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTIsNiArMTk1LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0
aW9uUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOjppZGVudGlmaWVyIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlk
ZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIwNyw2ICsyMTksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Qcm90b3R5cGVG
dW5jdGkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSkp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzLmNwcAppbmRleCBiODZmMTJmOTE3NTM5YzJkNTM5ZDUwOWM5YWE4NDg0MmY5
ZmEyNmEzLi4xMzYyNTNmMjhkMGNiZWZkZTA1Mzc0MDk4OTI2Y2ZmNWRmMGRlNjc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5n
aWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRl
ZEFzLmNwcApAQCAtMjMsMTIgKzIzLDE1IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKICNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5o
IgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERh
dGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAt
MTkyLDYgKzE5NSwxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eQogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7
CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAo
IVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVu
dD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzOjphbHRlcm5hdGVJZGVudGlmaWVyIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmFsdGVybmF0ZUlkZW50aWZpZXIo
KSkpKTsKIH0KQEAgLTIwNyw2ICsyMTksMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBc1Byb3RvdHkKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFN0cmluZ2lm
aWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YWx0ZXJuYXRlSWRlbnRpZmllciIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5h
dGVJZGVudGlmaWVyKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCmluZGV4IDY2NmUzNTY3ZWQ0OTg2Mzc2
YmM3ZGZhZTRkNGQyZGFjYTliMDBiNzIuLjQ0OWRiMWZmZjUyMThhNTdhODE1MDAxMDQxMGNhZTNl
NmEzZmZiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCkBAIC0yMywxMiArMjMsMTUgQEAKIAogI2luY2x1ZGUg
IkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRT
dHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9u
UHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkzLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdQcm90b3R5
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RTdHJp
bmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnRvU3RyaW5nIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnRvU3RyaW5nKCkpKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0
ZS5jcHAKaW5kZXggYzUwMzdlZjM1MWI5NTYxZmIwYzA3ZjBiMzVhYmYwZGUxMDEwNzcwYy4uOGVj
ZTgyZDdiODExMjk3YzUxODdkOGM2OWRlY2ZkYjQ0MDAxMzMwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vi
c3BhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCkBAIC0zMCw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5o
IgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTYsNiArMTk5
LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0
cmlidXRlSWRlbnRpZmllckdldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4
dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGRvY3VtZW50LCAiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZp
ZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMSw2ICsyMjMsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVQcm90
b3R5cGVGdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZpZXIiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmll
cigpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZS5jcHAKaW5kZXggOTAwMjliY2U2Mzg2MmU3Y2YzYjg3OGYzMzk2MGIzZDYwZjNm
ZjlhNC4uMDM0MWMyNjlhNWQ3ZGFlNDJiMmVhZTUwNWZkM2U0ZGViNmJlNzM3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRl
ICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKQEAgLTMwLDYgKzMxLDggQEAKICNpbmNs
dWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24u
aCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnRE
YXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAg
LTE5Nyw2ICsyMDAsMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVy
UmVhZFdyaXRlQXR0cmlidXRlSWRlbnRpZmllckdldHRlcihKU0dsb2IKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElL
RUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNv
bnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGU6OmlkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMCw2ICsyMjIsMTUgQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlSWRl
bnRpZmllclNldHRlcihKU0dsb2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnNldElkZW50aWZpZXIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTIzMCw2ICsyNTEsMTUgQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlUHJv
dG90eXBlRnUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAg
ICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAi
VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlOjppZGVudGlmaWVyIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZp
ZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmluZGV4IDFkNjg5ZDI5ZWEwMjliNmM2ZTQ3
MTdiYTIxZWM2Yzk4MjA1MzZiNzUuLjBhMTU0Y2VkMWJkNWQwOTIwMmIzNDg1YTMyMzA5MzBiOGY3
ZTgwM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKQEAgLTQ1LDYg
KzQ2LDggQEAKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5oIgogI2luY2x1ZGUg
IkpTVGVzdEV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
QEAgLTMwNiw2ICszMDksMTUgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVO
TElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
KmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6OnVuc2lnbmVkTG9uZ0xv
bmdBdHRyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMxOSw2ICszMzEs
MTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9u
Z0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29u
dGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6OnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM3LDYgKzM1OCwxNSBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAg
IGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVz
dFR5cGVkZWZzOjpzZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VyaWFsaXplZFNjcmlwdFZh
bHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSgpKSkpOwogfQpAQCAtMzUwLDYgKzM4MCwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFR5cGVkZWZzOjpzZXRT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY3LDYgKzQwNiwxNSBAQCBib29sIHNldEpTVGVz
dFR5cGVkZWZzU2VyaWFsaXplZFNjcmlwdFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3JUZXN0U3ViT2JqR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFR5cGVkZWZzOjpUZXN0
U3ViT2JqIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICByZXR1cm4gSlNU
ZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTM3OSw2ICs0MjcsMTUgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgewor
ICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9j
dW1lbnQsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExDbGFtcEFkYXB0
b3I8SURMVW5zaWduZWRMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuYXR0cmlidXRlV2l0aENsYW1wKCkpKSk7CiB9CkBAIC0zOTIsNiArNDQ5LDE1IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAg
ICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3Vt
ZW50LCAiVGVzdFR5cGVkZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXAiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFkYXB0b3I8SURMVW5z
aWduZWRMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQxMCw2ICs0NzYsMTUgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBl
ZGVmR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExDbGFt
cEFkYXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKCkpKSk7CiB9CkBAIC00MjMsNiArNDk4LDE1IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcElu
VHlwZWRlZlNldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsK
KyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRv
Y3VtZW50LCAiVGVzdFR5cGVkZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExDbGFtcEFk
YXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ0MSw2ICs1MjUsMTUgQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAg
ICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1l
bnQsICJUZXN0VHlwZWRlZnM6OmJ1ZmZlclNvdXJjZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5pb248SURMQXJyYXlC
dWZmZXJWaWV3LCBJRExBcnJheUJ1ZmZlcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmJ1ZmZlclNvdXJjZUF0dHIoKSkp
KTsKIH0KQEAgLTQ1NCw2ICs1NDcsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5
cGVkZWZzQnVmZmVyU291cmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBp
ZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1
bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6OnNldEJ1ZmZl
clNvdXJjZUF0dHIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDcyLDYgKzU3NCwxNSBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNEb21UaW1lU3RhbXBBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RUeXBlZGVmczo6ZG9t
VGltZVN0YW1wQXR0ciIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExVbnNpZ25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmRvbVRpbWVTdGFtcEF0dHIoKSkpKTsKIH0KQEAgLTQ4NSw2ICs1
OTYsMTUgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1w
QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250
ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOwor
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6OnNldERvbVRpbWVTdGFtcEF0dHIiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZExv
bmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MDUsNiArNjI1LDE1IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVu
Y0JvZHkoSlNDOjpKCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVu
dCwgIlRlc3RUeXBlZGVmczo6ZnVuYyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRv
IHggPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQ29udmVydGVyPElETFNlcXVl
bmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMTG9u
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC01MjUsNiAr
NjU0LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93Qm9keShKCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9i
YWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtF
TFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RUeXBlZGVmczo6c2V0U2hhZG93Iik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTU1OSw2ICs2OTcsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWUKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFR5cGVkZWZzOjpt
ZXRob2RXaXRoU2VxdWVuY2VBcmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTc5LDYgKzcyNiwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6Om51bGxhYmxlU2VxdWVuY2VBcmciKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpAQCAtNjAxLDYgKzc1NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblNlcXVlbmNlT2ZOdWxsYQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
ICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6OnNl
cXVlbmNlT2ZOdWxsYWJsZXNBcmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjIzLDYgKzc4OCwxNSBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0
KSkgeworICAgICAgICAgICAgaWYoY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoZG9jdW1lbnQsICJUZXN0VHlwZWRlZnM6Om51bGxhYmxlU2VxdWVuY2VPZk51bGxhYmxlc0Fy
ZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC02NDUsNiArODE5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uTnVsbGFibGVTZXF1
ZW5jCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBp
Zihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RU
eXBlZGVmczo6bnVsbGFibGVTZXF1ZW5jZU9mVW5pb25zQXJnIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY2
Nyw2ICs4NTAsMTUgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25VbmlvbkFyZ0JvZHkoSlMKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgewor
ICAgICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50LCAiVGVzdFR5cGVkZWZzOjp1bmlvbkFyZyIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CkBAIC02ODksNiArODgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250
ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RUeXBlZGVm
czo6ZnVuY1dpdGhDbGFtcCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03MTQsNiArOTE1LDE1IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uRnVuY1dpdGhDbGFtcEluCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7
CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhk
b2N1bWVudCwgIlRlc3RUeXBlZGVmczo6ZnVuY1dpdGhDbGFtcEluVHlwZWRlZiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC03MzYsNiArOTQ2LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uUG9pbnRGdW5jdGlvbkJvCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
ICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5p
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RUeXBlZGVmczo6cG9p
bnRGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFNWR1BvaW50Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wb2lu
dEZ1bmN0aW9uKCkpKSk7CiB9CkBAIC03NTEsNiArOTcwLDE1IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2Vx
dWVuY2VGCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAg
ICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRl
c3RUeXBlZGVmczo6c3RyaW5nU2VxdWVuY2VGdW5jdGlvbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03NzEs
NiArOTk5LDE1IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAg
ICAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmICghVU5M
SUtFTFkoIWNvbnRleHQpKSB7CisgICAgICAgICAgICBpZihjb250ZXh0LT5pc0RvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
Y29udGV4dCk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhkb2N1bWVudCwgIlRlc3RUeXBlZGVmczo6c3RyaW5nU2VxdWVuY2VG
dW5jdGlvbjIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzkxLDYgKzEwMjgsMTUgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25DYWxs
V2l0aFNlcXVlbmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAg
ICAgICAgIGlmKGNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGRvY3VtZW50
LCAiVGVzdFR5cGVkZWZzOjpjYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZSIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CkBAIC04MTEsNiArMTA1NywxNSBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSB7CisgICAgICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgICAgICBpZiAoIVVOTElLRUxZKCFjb250ZXh0KSkgeworICAgICAgICAgICAgaWYoY29u
dGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICAgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoZG9jdW1lbnQsICJUZXN0VHlwZWRl
ZnM6Om1ldGhvZFdpdGhFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb24oKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCmluZGV4IDQxYzlmZWM2MWUyOGJhYzM4N2NjYzdiOWIzM2Y1ZmQwZDhmMzQxZTIuLmUzMDky
YjdlOWY1MjZlODIxNjA4ZjkzOTdmMmU1ZDYzYmZkMjlkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CkBAIC02MzMsNyArNjMzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQVhPYmplY3RDYWNo
ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJ
RCgpIGNvbnN0OwotICAgIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0
OworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlEKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBP
cHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQoKSBjb25zdDsKKyNlbmRpZgogCiAgICAg
Ly8gdG8gZ2V0IHZpc3VhbGx5IG9yZGVyZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQK
ICAgICB2b2lkIHNldFZpc3VhbGx5T3JkZXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVj
dXRpb25TdGFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJkNWFkODJlNjg5YzgzZjBlODNkMzdiYjdhM2Ix
OTI0NjI4YzRkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVj
dXRpb25TdGFjay5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisqLworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4ZWN1dGlvblN0YWNrLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEV4ZWN1dGlvblN0YWNrOjp0b0pTT05TdHJpbmcodWlu
dDY0X3QgZnJhbWVJRCkKK3sKKyAgICBpZiAoZG9jdW1lbnRJZFVSTE1hcC5maW5kKGZyYW1lSUQp
ID09IGRvY3VtZW50SWRVUkxNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisg
ICAgYXV0byBkb2N1bWVudFVSTCA9IGRvY3VtZW50SWRVUkxNYXAuZ2V0KGZyYW1lSUQpOworCisg
ICAgYXV0byBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+c2V0
U3RyaW5nKCJUb3BMZXZlbERvbWFpbiIsIHJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKyAg
ICBvYmplY3QtPnNldFN0cmluZygiVG9wTGV2ZWxVUkwiLCBkb2N1bWVudFVSTC5zdHJpbmcoKSk7
CisgICAgb2JqZWN0LT5zZXRJbnRlZ2VyKCJGcmFtZUlEIiwgZnJhbWVJRCk7CisgICAgYXV0byBz
Y3JpcHRFeGVjdXRpb24gPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgCisgICAgaWYgKGFw
aXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpID09IGFwaXNDYWxsZWRC
eVNjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBvYmplY3QtPnNldEFycmF5KCJT
Y3JpcHRFeGVjdXRpb24iLCBXVEZNb3ZlKHNjcmlwdEV4ZWN1dGlvbikpOworICAgICAgICByZXR1
cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKKyAgICB9CisgICAgCisgICAgYXV0byBhcGlzQ2Fs
bGVkQnlTY3JpcHRzSW5Eb2N1bWVudCA9IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5n
ZXQoZnJhbWVJRCk7CisgICAgCisgICAgZm9yIChhdXRvIHNjcmlwdFdpdGhBUElzS2V5IDogYXBp
c0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnQua2V5cygpKSB7CisgICAgICAgIGF1dG8gc2NyaXB0
V2l0aEFQSXMgPSBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudC5nZXQoc2NyaXB0V2l0aEFQ
SXNLZXkpOworICAgICAgICBhdXRvIGFjY2Vzc2VkQVBJcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKKyAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBBUElOYW1lIDogc2NyaXB0V2l0aEFQSXMpIHsK
KyAgICAgICAgICAgIGF1dG8gdGVtcCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICB0ZW1wLT5zZXRJbnRlZ2VyKEFQSU5hbWUua2V5LCBBUElOYW1lLnZhbHVlKTsKKyAgICAg
ICAgICAgIGFjY2Vzc2VkQVBJcy0+cHVzaE9iamVjdChXVEZNb3ZlKHRlbXApKTsKKyAgICAgICAg
fQorICAgICAgICBhdXRvIGFwaUV4ZWN1dGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0SW50ZWdlcigiU2NyaXB0SUQiLCBzY3JpcHRXaXRoQVBJ
c0tleSk7CisgICAgICAgIAorICAgICAgICBpZiAoZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFw
LmZpbmQoZnJhbWVJRCkgPT0gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKQorICAg
ICAgICAgICAgYXBpRXhlY3V0aW9uLT5zZXRTdHJpbmcoIlNjcmlwdFVSTCIsICJVbmF2YWlsYWJs
ZSIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gZG9jdW1lbnRJZEFuZFNjcmlw
dElkVVJMcyA9IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5nZXQoZnJhbWVJRCk7CisgICAg
ICAgICAgICBpZiAoZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcy5maW5kKHNjcmlwdFdpdGhBUElz
S2V5KSA9PSBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLmVuZCgpKQorICAgICAgICAgICAgICAg
IGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5nKCJTY3JpcHRVUkwiLCAiVW5hdmFpbGFibGUiKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygi
U2NyaXB0VVJMIiwgZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcy5nZXQoc2NyaXB0V2l0aEFQSXNL
ZXkpKTsKKyAgICAgICAgfQorICAgICAgICBhcGlFeGVjdXRpb24tPnNldEFycmF5KCJBY2Nlc3Nl
ZEFQSXMiLCBXVEZNb3ZlKGFjY2Vzc2VkQVBJcykpOworICAgICAgICBzY3JpcHRFeGVjdXRpb24t
PnB1c2hPYmplY3QoV1RGTW92ZShhcGlFeGVjdXRpb24pKTsKKyAgICB9CisgICAgCisgICAgb2Jq
ZWN0LT5zZXRBcnJheSgiU2NyaXB0RXhlY3V0aW9uIiwgV1RGTW92ZShzY3JpcHRFeGVjdXRpb24p
KTsKKyAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmcoKTsKK30KKworfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suaCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyODE2MTIzNDM2
ZTE3NmZmNzBlNzBmNjc1OTI4MzhkOTI4MDFlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFp
bi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV4ZWN1dGlvblN0YWNrIHsKKyAgICBleHBsaWNp
dCBFeGVjdXRpb25TdGFjayhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorICAgICAg
ICA6IHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9tYWluIH0KKyAgICB7CisgICAgfQorCisgICAgRXhl
Y3V0aW9uU3RhY2soKSA9IGRlZmF1bHQ7CisgICAgRXhlY3V0aW9uU3RhY2soY29uc3QgRXhlY3V0
aW9uU3RhY2smKSA9IGRlbGV0ZTsKKyAgICBFeGVjdXRpb25TdGFjayYgb3BlcmF0b3I9KGNvbnN0
IEV4ZWN1dGlvblN0YWNrJikgPSBkZWxldGU7CisgICAgRXhlY3V0aW9uU3RhY2soRXhlY3V0aW9u
U3RhY2smJikgPSBkZWZhdWx0OworICAgIEV4ZWN1dGlvblN0YWNrJiBvcGVyYXRvcj0oRXhlY3V0
aW9uU3RhY2smJikgPSBkZWZhdWx0OworCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvSlNP
TlN0cmluZyh1aW50NjRfdCAvKiBGcmFtZUlEICovKTsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWlu
IHJlZ2lzdHJhYmxlRG9tYWluOworCisgICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUg
bWFwcGluZyBiZXR3ZWVuIEZyYW1lSUQgYW5kIERvY3VtZW50IFVSTC4KKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBVUkw+IGRvY3VtZW50SWRVUkxNYXA7CisgICAgCisgICAgLy8gVGhpcyBIYXNoTWFw
IG1haW50YWlucyBhIHN0YWNrIG9mIGV4ZWN1dGluZyBzY3JpcHRzIGluIGVhY2ggZG9jdW1lbnQu
CisgICAgLy8gQ3VycmVudGx5LCBpdCBvbmx5IGNhcHR1cmVzIGNsYXNzaWMgc2NyaXB0cy4KKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0b3I8dWludDY0X3Q+PiBleGVjdXRpbmdTY3JpcHRzSW5E
b2N1bWVudHM7CisgICAgCisgICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgbWFwcGlu
ZyBiZXR3ZWVuIEZyYW1lSUQsIFNjcmlwdElELCBhbmQgU2NyaXB0IFVSTHMKKyAgICBIYXNoTWFw
PHVpbnQ2NF90LCBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+PiBkb2N1bWVudElkQW5kU2NyaXB0
SWRVUkxNYXA7CisgICAgCisgICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgQVBJcyBj
YWxsZWQgYnkgYSBzY3JpcHQgaW4gYSBkb2N1ZW1udC4KKyAgICAvLyBIYXNoTWFwPEZyYW1lSUQs
IEhhc2hNYXA8U2NyaXB0SUQsIEhhc2hDb3VudGVkU2V0PENvdW50T2ZBUElOYW1lcz4+PgorICAg
IEhhc2hNYXA8dWludDY0X3QsIEhhc2hNYXA8dWludDY0X3QsIEhhc2hDb3VudGVkU2V0PFN0cmlu
Zz4+PiBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHM7Cit9OworCit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKaW5kZXggNjdmYmZm
YzJkMjBhYjJmZDhiYTU2YThkZmE0ZDRhZTc4YTk1ZWIyMC4uMDFkOGMwNjBiYmEwZGYxMGI2NDM5
OWQzZDc4Yzc1ODQzNjIwNjFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw2ICs1OCwxNCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50Jiwg
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nRm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgLyogZmlyc3RQYXJ0eURvbWFpbiAqLywgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIC8q
IHRoaXJkUGFydHlEb21haW4gKi8sIGJvb2wgLyogc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24g
Ki8pIHsgfQogCisgICAgdmlydHVhbCB2b2lkIHB1c2hBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1l
bnQmLCBjb25zdCB1aW50NjRfdCAvKiBzY3JpcHRJRCAqLywgY29uc3QgU3RyaW5nJiAvKiBzY3Jp
cHRVUkwgKi8pIHsgfQorICAgIHZpcnR1YWwgdWludDY0X3QgcG9wQWN0aXZlU2NyaXB0KGNvbnN0
IERvY3VtZW50JikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdWludDY0X3QgcGVla0FjdGl2
ZVNjcmlwdChjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFN0cmlu
ZyBwZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29uc3QgRG9jdW1lbnQmKSB7IHJldHVybiB7IH07
IH0KKworICAgIHZpcnR1YWwgdm9pZCBsb2dBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmLCBj
b25zdCBTdHJpbmcmIC8qIGFwaU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBlZWtB
Y2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmKSB7IHJldHVybiB7IH07IH0KKwogICAgIHZpcnR1
YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoY29uc3QgVVJMJikgeyByZXR1cm4geyB9OyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNlbnRyYWxTdGF0aXN0aWNzU3RvcmUoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJTdGF0ZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAKaW5kZXggZTIzYzc5MTcyYTU4OWI3ZTY4N2U3MGE4NjBiNDg1ZWJlZTRmYzRkYy4u
MzkxYzFmOWJiY2Q3ZTMxMDE0NzY2YjFiNTg1MzAxYmYyMzlkZGRkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC05OCw2ICs5OCwxNyBAQCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorI2lmIEVOQUJMRShXRUJf
QVBJX1NUQVRJU1RJQ1MpCitFeGVjdXRpb25TdGFjayYgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNFcGhlbWVyYWwoKSk7
CisKKyAgICByZXR1cm4gbV9leGVjdXRpb25TdGFja01hcC5lbnN1cmUoZG9tYWluLCBbJmRvbWFp
bl0geworICAgICAgICByZXR1cm4gRXhlY3V0aW9uU3RhY2soZG9tYWluKTsKKyAgICB9KS5pdGVy
YXRvci0+dmFsdWU7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLmlzRW1wdHkoKSkgewpAQCAtMjYxLDYgKzI3MiwxOTUgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb24KICNlbmRpZgogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpw
dXNoQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgdWludDY0X3Qg
c2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQoreworICAgIGlmIChpc0VwaGVtZXJh
bCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkg
fTsKKyAgICB1aW50NjRfdCBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgp
IH07CisKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9y
UmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOworICAgIAorICAgIC8vIHJlZ2lz
dGVyIHNjcmlwdCBpZCB3aXRoIHNjcmlwdCB1cmwgZm9yIGVhY2ggZnJhbWUKKyAgICBpZiAoZXhl
Y3V0aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgIT0g
ZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKSB7CisgICAg
ICAgIGF1dG8gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcyA9IGV4ZWN1dGlvblN0YWNrLmRvY3Vt
ZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5maW5kKGZyYW1lSUQpOworICAgICAgICAvLyB3ZSB1c2Ug
YWRkIGhlcmUgYmVjYXVzZSB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHNjcmlwdCBVUkwgaXMgbm9u
ZSAoaW4gY2FzZSBvZiBtaWNyb3Rhc2tzKS4KKyAgICAgICAgLy8gYWRkIHdpbGwgZW5zdXJlIHRo
YXQgdGhlIGV4aXNpdG5nIHNjcmlwdCBVUkwgZG9lcyBub3QgZ2V0IG92ZXJ3cml0dGVuLgorICAg
ICAgICBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLT52YWx1ZS5hZGQoc2NyaXB0SUQsIHNjcmlw
dFVSTCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAgICAgIEhhc2hNYXA8dWludDY0X3Qs
IFN0cmluZz4gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMczsKKyAgICAgICAgZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcy5zZXQoc2NyaXB0SUQsIHNjcmlwdFVSTCk7CisgICAgICAgIGV4ZWN1dGlv
blN0YWNrLmRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5zZXQoZnJhbWVJRCwgZG9jdW1lbnRJ
ZEFuZFNjcmlwdElkVVJMcyk7CisgICAgfQorICAgIAorICAgIGlmIChleGVjdXRpb25TdGFjay5l
eGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25TdGFj
ay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBleGVj
dXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1Njcmlw
dHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworICAgICAgICBleGVjdXRpbmdTY3JpcHRzU3Rh
Y2tJdGVyYXRvci0+dmFsdWUuYXBwZW5kKHNjcmlwdElEKTsKKworICAgIH0gZWxzZSB7CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8dWludDY0X3Q+IGV4ZWN1dGluZ1NjcmlwdHNTdGFjazsKKyAg
ICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNrLmFwcGVuZChzY3JpcHRJRCk7CisgICAgICAgIGV4
ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5zZXQoZnJhbWVJRCwgZXhl
Y3V0aW5nU2NyaXB0c1N0YWNrKTsKKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGlvblN0YWNrLmRv
Y3VtZW50SWRVUkxNYXAuc2V0KGZyYW1lSUQsIGRvY3VtZW50LnVybCgpKTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdElE
KTsKKyAgICBVTlVTRURfUEFSQU0oc2NyaXB0VVJMKTsKKyNlbmRpZgorfQorCit1aW50NjRfdCBX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cG9wQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJl
Z2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICB1aW50NjRfdCBmcmFtZUlE
IHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisKKyAgICBhdXRvJiBleGVjdXRp
b25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0
cmFibGVEb21haW4pOworICAgIGlmIChleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5E
b2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRz
SW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJ
dGVyYXRvciA9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5k
KGZyYW1lSUQpOworCisgICAgICAgIGlmICghZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3It
PnZhbHVlLmlzRW1wdHkoKSkgeworCisgICAgICAgICAgICB1aW50NjRfdCB0ZW1wID0gMDsKKyAg
ICAgICAgICAgIHRlbXAgPSBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUubGFz
dCgpOworCisgICAgICAgICAgICBpZiAoZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZh
bHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBleGVjdXRpb25TdGFjay5leGVjdXRpbmdT
Y3JpcHRzSW5Eb2N1bWVudHMucmVtb3ZlKGZyYW1lSUQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5yZW1vdmVM
YXN0KCk7CisKKyAgICAgICAgICAgIHJldHVybiB0ZW1wOworICAgICAgICB9CisgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9
CisKK3VpbnQ2NF90IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrQWN0aXZlU2NyaXB0KGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIFJlZ2lz
dHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICB1
aW50NjRfdCBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisKKyAg
ICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFi
bGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOworICAgIGlmIChleGVjdXRpb25TdGFjay5leGVj
dXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25TdGFjay5l
eGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBleGVjdXRp
bmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJ
bkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworICAgICAgICBpZiAoIWV4ZWN1dGluZ1NjcmlwdHNT
dGFja0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZXhlY3V0
aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmxhc3QoKTsKKyAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworU3Ry
aW5nIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29u
c3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAg
ICByZXR1cm4geyB9OworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBSZWdp
c3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAg
YXV0byYgZXhlY3V0aW9uU3RhY2sgPSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxl
RG9tYWluKHJlZ2lzdHJhYmxlRG9tYWluKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIik7CisgICAg
YnVpbGRlci5hcHBlbmQocmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOworCisgICAgZm9yIChh
dXRvIGtleSA6IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5rZXlz
KCkpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJGcmFtZSBJRDogIik7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGtleSkpOworICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAgICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlNj
cmlwdCBTdGFjazogWyIpOworICAgICAgICBhdXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJh
dG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoa2V5
KTsKKworICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGV4ZWN1dGluZ1NjcmlwdCA6IGV4ZWN1dGlu
Z1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoU3RyaW5nOjpudW1iZXIoZXhlY3V0aW5nU2NyaXB0KSk7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAsIik7CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJdIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbiIpOworICAgIH0KKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1l
bnQpOworICAgIHJldHVybiB7IH07CisjZW5kaWYKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nQWNjZXNzZWRBUElzKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiBhcGlOYW1lKQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1
cm47CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGF1dG8gYWN0aXZlU2Ny
aXB0SUQgPSBwZWVrQWN0aXZlU2NyaXB0KGRvY3VtZW50KTsKKworICAgIGlmICghYWN0aXZlU2Ny
aXB0SUQpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJh
YmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICB1aW50NjRfdCBmcmFtZUlEIHsgZG9j
dW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0g
ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFp
bik7CisKKyAgICBpZiAoc3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMu
ZmluZChmcmFtZUlEKSAhPSBzdGF0aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50
cy5lbmQoKSkgeworICAgICAgICBhdXRvIGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRvciA9IHN0
YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisK
KyAgICAgICAgaWYgKGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRvci0+dmFsdWUuZmluZChhY3Rp
dmVTY3JpcHRJRCkgIT0gZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5lbmQoKSkg
eworICAgICAgICAgICAgYXV0byBzY3JpcHRzV2l0aEFQSXNJdGVyYXRvciA9IGRvY3VtZW50V2l0
aFNjcmlwdHNJdGVyYXRvci0+dmFsdWUuZmluZChhY3RpdmVTY3JpcHRJRCk7CisgICAgICAgICAg
ICBzY3JpcHRzV2l0aEFQSXNJdGVyYXRvci0+dmFsdWUuYWRkKGFwaU5hbWUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiBhcGlzOworICAgICAg
ICAgICAgYXBpcy5hZGQoYXBpTmFtZSk7CisgICAgICAgICAgICBkb2N1bWVudFdpdGhTY3JpcHRz
SXRlcmF0b3ItPnZhbHVlLnNldChhY3RpdmVTY3JpcHRJRCwgYXBpcyk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNoQ291bnRlZFNldDxTdHJp
bmc+PiBhcGlzRXhlY3V0aW5nSW5TY3JpcHQ7CisgICAgICAgIEhhc2hDb3VudGVkU2V0PFN0cmlu
Zz4gYXBpczsKKyAgICAgICAgYXBpcy5hZGQoYXBpTmFtZSk7CisKKyAgICAgICAgYXBpc0V4ZWN1
dGluZ0luU2NyaXB0LnNldChhY3RpdmVTY3JpcHRJRCwgYXBpcyk7CisgICAgICAgIHN0YXRpc3Rp
Y3MuYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLnNldChmcmFtZUlELCBhcGlzRXhlY3V0
aW5nSW5TY3JpcHQpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsK
KyAgICBVTlVTRURfUEFSQU0oYXBpTmFtZSk7CisjZW5kaWYKK30KKworU3RyaW5nIFdlYlJlc291
cmNlTG9hZE9ic2VydmVyOjpwZWVrQWNjZXNzZWRBUElzKGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAK
KyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJl
Z2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICB1aW50NjRfdCBmcmFtZUlE
IHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisKKyAgICBhdXRvJiBzdGF0aXN0
aWNzID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJs
ZURvbWFpbik7CisgICAgU3RyaW5nIEFQSUpTT05TdHJpbmcgPSBzdGF0aXN0aWNzLnRvSlNPTlN0
cmluZyhmcmFtZUlEKTsKKyAgICByZXR1cm4gQVBJSlNPTlN0cmluZzsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFt
ZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwgRmV0Y2hEZXN0aW5hdGlvbklzU2NyaXB0TGlr
ZSBpc1NjcmlwdExpa2UpCiB7CiAgICAgaWYgKGlzRXBoZW1lcmFsKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oCmluZGV4IDE4NmZhYTEzZjY4NDI0ZDAyM2ZmZTc0YmE5NTc0ODAz
ZjIzZDdjODMuLjEzODViZGViMTdhYTI5ZDVjMDJmMDAxYWEyYTUxN2YzMWY3NjM0N2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKKyNpbmNsdWRlIDxXZWJDb3JlL0V4ZWN1dGlvblN0YWNr
Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CkBAIC01
Miw2ICs1NiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25z
dCBXZWJDb3JlOjpEb2N1bWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OlNjcmVlbkFQSSkgZmluYWw7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmdGb3JU
ZXN0aW5nKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWlu
LCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9v
bCBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbik7CiAKKyAgICB2b2lkIHB1c2hBY3RpdmVTY3Jp
cHQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCB1aW50NjRfdCBzY3JpcHRJRCwgY29u
c3QgU3RyaW5nJiBzY3JpcHRVUkwpIGZpbmFsOworICAgIHVpbnQ2NF90IHBvcEFjdGl2ZVNjcmlw
dChjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOworICAgIHVpbnQ2NF90IHBlZWtBY3Rp
dmVTY3JpcHQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKyAgICBTdHJpbmcgcGVl
a1NjcmlwdEV4ZWN1dGlvblN0YWNrKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmluYWw7CisK
KyAgICB2b2lkIGxvZ0FjY2Vzc2VkQVBJcyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYsIGNvbnN0
IFN0cmluZyYgYXBpTmFtZSkgZmluYWw7CisgICAgU3RyaW5nIHBlZWtBY2Nlc3NlZEFQSXMoY29u
c3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbihib29sKTsKICNl
bmRpZgpAQCAtNzgsNiArOTAsMTEgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291
cmNlU3RhdGlzdGljc01hcDsKICAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
LCBXVEY6OldhbGxUaW1lPiBtX2xhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbk1hcDsKIAorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgV2ViQ29yZTo6RXhlY3V0aW9uU3RhY2sm
IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluLCBXZWJDb3JlOjpFeGVjdXRpb25TdGFjaz4gbV9leGVjdXRpb25TdGFja01hcDsKKyNlbmRp
ZgorCiAgICAgV2ViQ29yZTo6VGltZXIgbV9ub3RpZmljYXRpb25UaW1lcjsKIAogICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IG1fZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406198</attachid>
            <date>2020-08-07 12:06:48 -0700</date>
            <delta_ts>2020-08-07 12:28:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200807140647.patch</filename>
            <type>text/plain</type>
            <size>576366</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi44ZGI0YzNiYTBmMDljMWZh
NGI5MjExYzNhZjAxYmJiYTdlYmM3Yzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKworICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwp
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisKIDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4x
NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEu
LmFkNjM0MjUxOTg1ODcwOTYwOTdiYWY4NTgyMGQ2ZjY4YTI5ZjRjNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOSBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+
CisKKyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGgg
ZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdl
YiBBUElzLiAKKyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNj
cmlwdHMsIHRoYXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2Vz
IHRvIHRoZSByZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFk
ZGVkIGxhdGVyLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFz
ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1
dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRl
ckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRp
b24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21l
IG1vcmUgQW5pbWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMy
NmI3YTcyZWYzYTkzMTVjMTlkNTcuLmM2ZDVjNGY5NTEyZDBjZDVhMWQ1ZDMyMzUwNmE0OWExNWU0
NzA2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDcgIFVtYXIgSXFiYWwg
IDx1aXFiYWxAYXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQg
dGhlaXIgbGlua2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2
ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWN0aXZlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0
ZjA5MDIzYjg3YWVhMjdiMDQyMzYzOWUuLjU2M2I2NmM5OGI2M2VkNDkzMmFlMDU0OTMxNDgzYzMy
Nzc1YzEzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9i
YWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQpAQCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
SlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVs
bHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWlu
ZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JD
YWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJF
dmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQKKyNlbmRpZgogfTsK
IAogdm9pZCBKU0FQSUdsb2JhbE9iamVjdDo6cmVwb3J0VW5jYXVnaHRFeGNlcHRpb25BdEV2ZW50
TG9vcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CmluZGV4IDRlN2NkYzFmN2MzMjc1NTEwZGU0OWZlNzlhZWEwYmIzYmNkMThhN2MuLmQyMWUxZTc2
M2E0MDNmNGM0NGNmZGMzNzNjZGUwMzJhODZjMDcwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTUzLDkgKzE1MywyMyBA
QCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEVDTUFNb2RlIGVjbWFNbwogICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVj
dEV2YWxDb2RlQ2FjaGUoKS5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsZXJDb2RlQmxvY2ssIHByb2dy
YW1Tb3VyY2UsIGNhbGxlckNhbGxTaXRlSW5kZXgsIGV2YWwpOwogICAgIH0KIAorI2lmIEVOQUJM
RShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RU
YWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0KGdsb2JhbE9iamVjdCwgZXZhbC0+c291cmNlKCkucHJvdmlkZXJJRCgpLCBldmFsLT5z
b3VyY2VVUkwoKSk7CisjZW5kaWYKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJh
bWUtPnRoaXNWYWx1ZSgpOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtLmludGVy
cHJldGVyOworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzY29wZS5yZWxl
YXNlKCk7CisgICAgYXV0byB0ZW1wID0gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgIGlmIChnbG9iYWxPYmpl
Y3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNh
bGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQ
cm9taXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRlbXA7CisjZWxz
ZQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZh
bCwgZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pKTsKKyNlbmRpZgog
fQogCiB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKQEAgLTg5Niw2
ICs5MTAsMjMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICBwcm90b0NhbGxGcmFt
ZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgdGhpc1ZhbHVlLCBh
cmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFU
SVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uU3RhcnQpIHsKKyAgICAgICAgaWYgKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24p
LT5zb3VyY2VDb2RlKCkpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24p
LT5zb3VyY2VDb2RlKCktPnByb3ZpZGVySUQoKSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOworICAgICAgICAgICAg
Ly8gV2UgY2FuIGNhbGwgdGVtcEZ1bmN0aW9uLT5zb3VyY2VDb2RlKCktPnByb3ZpZGVyKCktPnNv
dXJjZSgpLnV0ZjgoKS5kYXRhKCkgdG8gZ2V0IHRoZSBzY3JpcHQgc291cmNlLgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpKQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksIGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5jbGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSwgIlVuYXZhaWxhYmxlIik7CisgICAg
ICAgICAgICAvLyBUaGlzIGVsc2UgY29uZGl0aW9uIGNhdGVycyBtaWNyb3Rhc2tzLiBXZSB0cnkg
dG8gbGluayBjb2RlIGV4ZWN1dGVkIGluIG1pY3JvdGFza3MgdG8gdGhlaXIgcGFyZW50IHNjcmlw
dCBsaWtlIGFueSBvdGhlciBjYWxsYmFjay4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIG1pY3Jv
dGFza3Mgc2VlbSB0byBoYXZlIHRoZWlyIG93biBpZGVudGlmZXIgd2hlbiBhY2Nlc3NlZCB3aXRo
IChjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmVpdGhlckNvZGVCbG9jaygpLT5zb3Vy
Y2UoKS5wcm92aWRlcklEKCkpLgorICAgICAgICAgICAgLy8gV2UgY2FsbCBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpIHRvIGdldCB0aGUg
cGFyZW50IElEICh0aGUgc2NyaXB0IHRoYXQgY3JlYXRlZCB0aGUgbWljcm90YXNrKSBvZiBhIG1p
Y3JvdGFzay4KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgSlNWYWx1ZSByZXN1bHQ7
CiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkwNCw5
ICs5MzUsMjEgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICByZXN1bHQgPSBqaXRD
b2RlLT5leGVjdXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewogICAgICAg
ICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbi5yYXdQb2ludGVyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIEpTVmFsdWUoKSk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisjZW5kaWYKICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybihyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUzMjFlMmJkMjU4ODVh
YzYxMmMxZWViYzg1ZDMyNDRmYTVkNmE3MzcuLjJlNjU4Mjg5NDhiMTE2MTljODMwNjBmYTZjOWU4
YWUyMGUzMzA4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02NzgsNiArNjc4LDEwIEBAIGNv
bnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA9IHsKICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxs
cHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGluYXRlU3Ry
ZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyBy
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0Cisg
ICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25FbmQKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZkNjA1
M2JlYWRjNTVmNzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0Zjli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCkBAIC0zOTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpT
R2xvYmFsT2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIs
IC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAg
ICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9y
RnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIC8q
IFNvdXJjZSBmb3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEzMjNm
ODg2MDQ0YTBiNjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVmMjgy
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aApAQCAtMjQwLDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgewog
CiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNQcm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0
cmVhbWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1bmN0
aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBib29s
ICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQ
dHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpTR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCmluZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIuLjQw
MmM2YTIyYzAxNTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAKQEAgLTQ5NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBpZiAo
IWV2YWwpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uU3RhcnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydChnbG9iYWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+c291
cmNlVVJMKCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0uaW50
ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNl
bHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0uaW50
ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UK
aW5kZXggMDZlMzUxOWEwZDc0ZmRjYzBhMGYwMWNkYTk4NDZmZmVmMjk4OGZiYi4uNGM2MmFiZjlh
ZTExYmM0YTE1NDk4MGRmZjI5YjUzOWYzZTdiMjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC03
MTIsNiArNzEyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IGxvYWRlci9Eb2N1bWVudFdyaXRlci5oCiAgICAgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCiAgICAg
bG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaAorICAgIGxvYWRlci9FeGVjdXRpb25TdGFj
ay5oCiAgICAgbG9hZGVyL0ZldGNoT3B0aW9ucy5oCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5oCiAg
ICAgbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTA1ZWM3OWU3Njdi
Y2EwNDZiNWVhOWI5YzU4NTE1ZDkyNDI0MmEyYy4uYjYzODE1NWZlZWVlN2JhNTA3ZGFiNmU3OGU5
YmM0MTIxYmI5NDgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNiArMTQ2Nyw3IEBAIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
CiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorbG9h
ZGVyL0V4ZWN1dGlvblN0YWNrLmNwcAogbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAKIGxv
YWRlci9GZXRjaElkaW9tcy5jcHAKIGxvYWRlci9Gb3JtU3RhdGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDhlZDQxYjEw
MTNiZjUzNzM2NDE4MzdjNzA0ZTE3ZjE0MDExNWQ5MC4uZDNjODVhMjc4ZDBiZjgwNWQ5NzlkNGZm
YTFmYmVlNzI4NGZhYWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE2Nyw2ICs1MTY3LDcgQEAKIAkJRjVDMDQxREIwRkZD
QTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBI
VE1MRGF0YUxpc3RFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjVDMDQxRTIwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9
OwogCQlGNUUwQzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1RTBDNjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGlt
ZUlucHV0VHlwZS5oICovOyB9OworCQlGNjQwODMzODI0QzI3Qjg5MDA4OTMyNkUgLyogRXhlY3V0
aW9uU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2NDA4MzM3MjRDMjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY5MTZDNDhFMERCNTEwRjgw
MDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZDRDgz
IC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUY5RjBFRDdBMERC
NTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIwMEQx
NkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRkE2NTRBNkMx
MTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRva2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkExMTA4QUJFRDAwMjYxNUUwIC8q
IE1hdGhNTFRva2VuRWxlbWVudC5oICovOyB9OwpAQCAtMTYxMDYsNiArMTYxMDcsOCBAQAogCQlG
NUMwNDFFMjBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFMaXN0RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1OTE2NDNDNDJDMDBENkNCNjkgLyogQmFz
ZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1QTE2NDNDNDJDMDBENkNCNjkg
LyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8q
IEV4ZWN1dGlvblN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZF
IC8qIEV4ZWN1dGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY3NUEwNTlBRjE3MEQ4RkFBNUI4Q0FCRSAvKiBN
YXRoTUxTZWxlY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjY0NTgsNiArMjY0NjEsOCBAQAogCQkJCUY1MkFENUUzMTUz
NDI0NUYwMDU5RkJFNiAvKiBFbXB0eUNsaWVudHMuY3BwICovLAogCQkJCUIyNTU5OTBEMEQwMEQ4
QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLywKIAkJCQk0MTRERURFNTFGOUZFOTE1MDA0
N0M0MEQgLyogRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oICovLAorCQkJCUY2NDA4MzM2MjRDMjdC
N0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5jcHAgKi8sCisJCQkJRjY0MDgzMzcyNEMyN0I3
RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggKi8sCiAJCQkJQ0VCQjhDMzIyMDc4NkRDQjAw
MDM5NTQ3IC8qIEZldGNoSWRpb21zLmNwcCAqLywKIAkJCQlDRUJCOEMzMTIwNzg2RENCMDAwMzk1
NDcgLyogRmV0Y2hJZGlvbXMuaCAqLywKIAkJCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyog
RmV0Y2hPcHRpb25zLmggKi8sCkBAIC0zMDkyMSw2ICszMDkyNiw3IEBACiAJCQkJNTFGNjQ1NjIx
RjQ1Mzk4RjAwQjU0REVEIC8qIEV4Y2VwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
MjkzODZCMjM1RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFi
bGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGY5M2UzZmQzMWM2
NWU0YjJlNTIyNzQ1Nzk4NzNhYWExZGM0ZjcxNmMuLjY2NWZjYmE4ZjM4NjBmMDkzYjkyZDJjZTNl
Y2MzMmJlMzQ2OTcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcApAQCAtNjEsNiArNjEsOSBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTg4LDYgKzkxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlIEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsK
ICAgICBudWxscHRyLAogICAgIG51bGxwdHIsCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0LAorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09y
UHJvbWlzZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogSlNET01XaW5kb3dCYXNlOjpKU0RP
TVdpbmRvd0Jhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPERPTVdpbmRv
dz4mJiB3aW5kb3csIEpTV2luZG93UHJveHkqIHByb3h5KQpAQCAtNDg3LDQgKzQ5NCwyNiBAQCB2
b2lkIEpTRE9NV2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9i
amVjdCwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQor
eworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3JpcHQo
KnRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpLCBzY3JpcHRJRCwgc2Ny
aXB0VVJMKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvYmplY3QpCit7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOwor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCp0
aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAppbmRleCBlYzZkZGMxNzAyMTA4ZTk5Y2Y5OWRjMzYzMzVlMjVlMDA2NDVkODVhLi5hYWRi
OTk2NmE2ODgxZjJlNmY1MDc5Yjc3YmM2MzkyNTVhNGVjMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtODUsNiArODUsMTEgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93
KERPTVdpbmRvdyopOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzdGF0
aWMgYm9vbCByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25FbmQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworI2Vu
ZGlmCisKIHByb3RlY3RlZDoKICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlKiwgUmVmUHRyPERPTVdpbmRvdz4mJiwgSlNXaW5kb3dQcm94eSopOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTV2luZG93UHJveHkqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGRj
ZTczODIwYmJiZmQ5Yjk1YzU4NzlkMTNlZjY1ZWFiOThhOTA0MTguLjdmYjJiNzZkYWI2ZDljOWU4
OTE4MjlkMDEyYzUwMDg1NTlhMjhjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApAQCAtNTEsNiArNTEsMTAgQEAgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNSZW1vdGVET01XaW5kb3dCYXNlOjpzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlID0KICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAg
ICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlh
dGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIs
IC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OkpT
UmVtb3RlRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8
UmVtb3RlRE9NV2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAKaW5kZXggYzQ0ZjJmYjNhMGIwNWRhYWIxYThhOWUyZjg5YjUyZDg1MWViNDM2OC4uOWViMGFm
Y2NkMzA5NzdhZjljOThlMzk3NmUzMzI0ZTE2MDUyY2QzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtNjks
NiArNjksMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUKICAgICAmZGVmYXVsdExhbmd1YWdl
LAogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0
YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVs
bHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRp
b25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlOjpKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNw
cAppbmRleCBiMTRiODE1NDJkYjg4OWVjNmQyNTliYzViNzBlZjJhNTA5OWM5NmQxLi5kODJjOGIz
MWE2MWNhOGQxMmUzMTZmMzNmN2QwODlkN2ExZmNmMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTYx
LDYgKzYxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsCiAgICAgJmRlZmF1bHRMYW5ndWFn
ZSwKICAgICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5z
dGFudGlhdGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51
bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0
aW9uU3RhcnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2U6OkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0NjJi
OTg0YjM0ZGYyN2MyNDI5ZjdmMjExNmRhNzIyNTEzZTRkOTdhLi5lY2IxODY4OWE4N2ViN2Y0MmI3
YmMyYjg3ZGVhNjRhY2MzYzE3ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBsdWdp
blZpZXdCYXNlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJSdW5KYXZhU2NyaXB0UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTEzOSw2
ICsxNDAsOSBAQCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
b3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogCiAgICAgUmVmPEZyYW1lPiBwcm90
ZWN0b3IobV9mcmFtZSk7CiAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgVVJMKj4gc291cmNlVVJMU2Nv
cGUobV9zb3VyY2VVUkwsICZzb3VyY2VVUkwpOworICAgIAorICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wdXNoQWN0aXZlU2NyaXB0KCpt
X2ZyYW1lLmRvY3VtZW50KCksIGpzU291cmNlQ29kZS5wcm92aWRlcklEKCksIHNvdXJjZVVSTC5z
dHJpbmcoKSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNj
cmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCks
IHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKSk7CiAKQEAgLTE1NCw5ICsxNTgsMTUgQEAgVmFsdWVP
ckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmMKICAgICAgICAgb3B0aW9uYWxEZXRhaWxzID0gV1RGTW92ZShkZXRh
aWxzKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxEZXRhaWxzKQorICAgIGlmIChvcHRpb25h
bERldGFpbHMpIHsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQo
KSk7CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgqb3B0aW9uYWxEZXRhaWxzKTsKKyAg
ICB9CiAKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIAogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNTVkZGM3YTc1NWI4ODU1NDhmMDEx
MDc4ODgzNmI0MGYxN2VlNWY5Li43M2U5MWFhZTQ2MzU5NzZhMjJiOGU1MTUwZWIwMzUyYjlhYTRj
Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQpAQCAtNTAxNSw2ICs1MDE1LDQyIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdl
dHRlckJvZHlEZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAgICAgCisgICAgbXkgQGFwaXNOb3RU
b0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZh
dGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3Rh
dGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50
Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZp
Y2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAg
ICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NO
YW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBs
YXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7Cisg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAg
ICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkg
JGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisK
KyAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAg
JGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7Cisg
ICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIp
IHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50
TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29u
c3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05h
bWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkg
QHRlbXAgPSAoKTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBl
LT5uYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7
CisgICAgICAgICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsIFwiJHthcGlDbGFzc05hbWV9Ojoke2FwaUZ1bmNOYW1lfSR7
YXBpQXJndW1lbnRzfVwiKTtcbiIpOworICAgIH0KKwogICAgIGlmICgkaGFzQ3VzdG9tR2V0dGVy
KSB7CiAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3It
PldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRB
c30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICByZXR1cm4gdGhpc09iamVjdC4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KGxleGljYWxHbG9i
YWxPYmplY3QpO1xuIik7CkBAIC01MTQ5LDYgKzUxODUsNDUgQEAgc3ViIEdlbmVyYXRlQXR0cmli
dXRlU2V0dGVyQm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0
aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAibGV4aWNhbEdsb2Jh
bE9iamVjdCIpOwogCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0
dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3Mg
SlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBM
aWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBt
eSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50
KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxk
SW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJS
ZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0
cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAg
ICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3RvbVNldHRl
cigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0
b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRhdHRy
aWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRhcGlG
dW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAg
ICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1
dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5uYW1l
OworICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBs
YWNlYWJsZX0pIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7
CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZv
cndhcmRzfSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAgICAgICAg
ICAoJGFwaUZ1bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lv
bihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7Cisg
ICAgICAgICAgICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAgICRhcGlB
cmd1bWVudHMgPSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgXCIk
e2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7Cisg
ICAgfQorCiAgICAgaWYgKCRuZWVkU2VjdXJpdHlDaGVjaykgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC01MzY2LDYg
KzU0NDEsMzQgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24KIAogICAgIEdl
bmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAk
b3BlcmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmplY3QiKSB1bmxlc3MgJGdlbmVyYXRpbmdPdmVy
bG9hZERpc3BhdGNoZXI7CiAKKyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTTW9j
a1BhZ2VPdmVybGF5IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCBKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3Mg
SlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2Nr
Q0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpT
SW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hv
dWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7Cisg
ICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1
bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIFxuIik7CisgICAgICAgIG15ICRhcGlDbGFzc05hbWUgPSBzdWJzdHIoJGNsYXNz
TmFtZSwgMik7CisgICAgICAgIG15ICRhcGlGdW5jTmFtZSA9ICJOb25lIjsKKworICAgICAgICBp
ZiAoJGdlbmVyYXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKKyAgICAgICAgICAgICRhcGlGdW5j
TmFtZSA9ICRmdW5jdGlvbk5hbWU7CisgICAgICAgIH0gZWxzaWYgKEhhc0N1c3RvbU1ldGhvZCgk
b3BlcmF0aW9uKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0aW9uSW1wbGVt
ZW50YXRpb25OYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1l
ID0gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNz
TmFtZX06OiR7YXBpRnVuY05hbWV9XCIpO1xuIik7CisgICAgfQorCiAgICAgIyBGb3Igb3Zlcmxv
YWRzLCB3ZSBnZW5lcmF0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgaW4gdGhlIG92ZXJsb2FkIGRpc3Bh
dGNoZXIsIGluc3RlYWQgb2YgdGhlIGJvZHkgb2YgZWFjaCBvdmVybG9hZCwgYXMgcGVyIHNwZWNp
ZmljYXRpb246CiAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tY3Jl
YXRlLW9wZXJhdGlvbi1mdW5jdGlvbgogICAgIGlmICghJGlzT3ZlcmxvYWRlZCB8fCAkZ2VuZXJh
dGluZ092ZXJsb2FkRGlzcGF0Y2hlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAppbmRleCAzY2M3MzgwN2QyMjFiZGIz
ZjU1ODRiNzgyN2FkOWMwMWJjOGI2MGJmLi4yMTMyMzA4MDIxYTVhNWZmZTRkZDM5NjQzM2UzOTZm
YThhM2M4NmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNNYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNNYXBMaWtlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9N
TWFwTGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNp
emUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjMwLDYgKzIzNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5j
dGlvbkdldEJvZHkoSlNDOjpKU0dsb2JhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJNYXBMaWtlOjpnZXQiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC0yNDksNiArMjU1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFz
Qm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1h
cExpa2U6OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI2OCw2ICsyNzYsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9k
eShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6
ZW50cmllcyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4Miw2ICsyOTIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBl
RnVuY3Rpb25LZXlzQm9keShKU0M6OkpTR2xvYgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiTWFwTGlrZTo6a2V5cyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAg
LTI5Niw2ICszMDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZh
bHVlc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRo
aXMpKSkpOwogfQogCkBAIC0zMTAsNiArMzI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OmZvckVhY2giKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC0zMjksNiArMzQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uU2V0Qm9keShKU0M6OkpTR2xvYmEKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNldCIpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTM1MSw2ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsbwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6Y2xlYXIiKTsKICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICBmb3J3YXJkQ2xlYXJUb01hcExpa2UoKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzY3LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlND
OjpKU0dsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBMaWtlOjpkZWxl
dGUiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcAppbmRleCA0NDZiYTM5MDdm
NzlmOWM5OTg1NDJjODg5MTc1MmRmOTI3YWFmZDBlLi43MTRjNGEwODBjODllYWMxMGEyZTgwMDU4
MzhiZDgyYjMzZjBkYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKQEAgLTMyLDYgKzMy
LDggQEAKICNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIx
MCw2ICsyMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXpl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KSkpKTsKIH0KIApAQCAtMjI0LDYgKzIyOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OmdldCIp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKQEAgLTI0Myw2ICsyNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOgog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjpoYXMi
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CkBAIC0yNjIsNiArMjcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSgK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5TWFwTGlrZTo6ZW50
cmllcyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI3Niw2ICsyODYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90
b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0K
IApAQCAtMjkwLDYgKzMwMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keShKCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnZhbHVlcyIpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMzA0LDYgKzMxOCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaEJvZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25s
eU1hcExpa2U6OmZvckVhY2giKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcApp
bmRleCBlYzQ0NGY1NmRmNTlmMmVmOWFiODI1YTY3MmM3MTY1NTk1MGQ3ZjQwLi44ODIyYWFmNTk1
NjdlZmJhZmRjYWZmOTBjYzE0Mzg3ODQyMDhmNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5j
cHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NU2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGlu
TmFtZXMuaD4KQEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFk
T25seVNldExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OnNpemUiKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvU2V0TGlrZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9u
SGFzQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25s
eVNldExpa2U6OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0MSw2ICsyNDcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXNCb2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9u
bHlTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExpa2UoKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAt
MjU1LDYgKzI2Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRP
bmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OmtleXMiKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3
YXJkS2V5c1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMpKSkpOwogfQogCkBAIC0yNjksNiArMjc5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5
KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6
dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yODMsNiArMjk1LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NldExpa2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKaW5k
ZXggYWE2ZjA4ODIzYWZkMTlkN2YyYzQzZTY4OTU2MjhkMDU0ODBiNGQxMC4uOTBlYjQ4OTkxMjc0
ZDRjOTYxYzkxNjhhYTdlZjVjODdmOTkxMzRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKQEAgLTMyLDYgKzMyLDgg
QEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NU2V0TGlrZS5o
IgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERh
dGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxNCw2
ICsyMTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNTZXRMaWtlU2l6ZUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJTZXRMaWtlOjpzaXplIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2Fy
ZFNpemVUb1NldExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7CiB9CiAK
QEAgLTIyOCw2ICsyMzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNT
ZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0TGlrZTo6aGFzIik7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQ3
LDYgKzI1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJp
ZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlz
KSkpKTsKIH0KIApAQCAtMjYxLDYgKzI2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQzo6SlNHbG9iCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjprZXlzIik7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFu
eT4oZm9yd2FyZEtleXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjc1LDYgKzI4NSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHko
SlNDOjpKU0dsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjp2
YWx1ZXMiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFsdWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4OSw2ICszMDEsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiU2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTMwOCw2ICszMjIsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25BZGRCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiU2V0TGlrZTo6YWRkIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzI3LDYgKzM0Myw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFy
Qm9keShKU0M6OkpTR2xvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRM
aWtlOjpjbGVhciIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGZvcndhcmRDbGVh
clRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNDMsNiAr
MzYxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlNldExpa2U6OmRlbGV0ZSIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFj
dGl2ZURPTU9iamVjdC5jcHAKaW5kZXggNmRmYzQyZmZkY2Y0ODQ0MzMxYWU5NWRiOTc0MTc5M2Nj
OWNkNzY2My4uN2I2NzBiMTU5MmZhMDE4MGM2MmU2ZGJhN2JjZDU3NTBlZmIzNjA0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5j
bHVkZSAiSlNOb2RlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjIyLDYgKzIyNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxlCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dT
Y29wZSwgIXRocm93U2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNob3VsZEFsbG93QWNjZXNzKTsKICAg
ICBpZiAoIXNob3VsZEFsbG93QWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01P
YmplY3Q6OmV4Y2l0aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5leGNpdGluZ0F0dHIoKSkpKTsK
IH0KQEAgLTIzNyw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdG
dW5jdGlvbiIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwogICAgIEVYQ0VQ
VElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8
ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2VzcykKQEAgLTI2
Myw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzcwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6cG9zdE1lc3NhZ2UiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI4Niw2ICsyOTQsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBj
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6Om92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTMwMSw2ICszMTEs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBwYXJhbTEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJwYXJhbTEiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CkBAIC0zMTksNiArMzMx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nl
c3MgPSBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpOwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91
bGRBbGxvd0FjY2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCmluZGV4IDQ2NzMzYTdkNWU3
M2FhOGM3OGQyYWM5ZjQxZjc2MDZjNjg5ODlhMzEuLjI4YTlhM2JlN2FiZWM4MDU3NTM2ODE4OTdi
OTJiMjgzMjNmNTc0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcApAQCAtMzUsNiArMzUs
OCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMjE5LDYgKzIyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6YXR0cmlidXRl
V2l0aENFUmVhY3Rpb25zIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zKCkpKSk7CiB9CkBAIC0yMzMsNiArMjM3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKEpTR2xvYmFs
T2IKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNTEsNiArMjU3LDggQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhD
RVJlYWN0aW9uc0dldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENF
UmVhY3Rpb25zOjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKSkpOwogfQpAQCAtMjY1LDYg
KzI3Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXIoSlNHCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1
dGV3aXRoY2VyZWFjdGlvbnNBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMjgzLDYgKzI5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5naWZp
ZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkp
KSk7CiB9CkBAIC0yOTYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmllckF0dHJp
YnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxlbigi
c3RyaW5naWZpZXJBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhp
c09iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMxOSw2ICszMzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3RO
ZWVkZWRHZXR0ZXIoSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlv
bnM6OmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCgpKSkpOwogfQpAQCAtMzMzLDYg
KzM0OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihKCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2Nv
cGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNTEsNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRl
ZEcKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjphdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJp
YnV0ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIpKSkpOwogfQpAQCAtMzY1LDYg
KzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2Nv
cGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0
ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODMsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRHZXR0
ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpz
dHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5n
aWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQoKSkpKTsKIH0KQEAgLTM5Niw2ICs0MjAsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5v
dE5lZWRlZFNldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VS
ZWFjdGlvbnM6OnN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiAgICAgYXV0byBpZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
Pigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0
dHJpYnV0ZU5vdE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2Jq
ZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDIyLDYgKzQ0OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENFCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrKCpsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFj
dGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7CkBA
IC00NDAsNiArNDY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0UKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKaW5kZXggZGUxOTRkNDU1MzUzZGNj
ZDg5NmE4ODM1Mjc3NjQwNDc3M2EwYzFiZS4uNmIwNDVhNTliZTcwYTYxZThhNjYzNmQ1NjdlMjMw
MjliNGMyZTYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjAxLDYgKzIwMyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpKSk7CiB9
CkBAIC0yMTUsNiArMjE5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXI6OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMjMzLDYgKzIzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zR2V0dGVyKEpTCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2
YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZVdpdGhvdXRS
ZWFjdGlvbnMoKSkpKTsKIH0KQEAgLTI0Nyw2ICsyNTUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91dFJlYWN0aW9uc1NldHRl
cihKUwogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpzZXRWYWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNjcsNiArMjc3
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwudmFsdWUoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAppbmRl
eCA0MGMzNDM3MzAyMzQ3MzdhOTc2YTc2ODUxYzE4NGU2Njg2M2Q1NTMwLi5hZGRmYzJlYTNhYzE5
OTA2MjNmZjA5YWQ3ZmM1MGFkOWI4Yjc5Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCkBA
IC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KQEAgLTIzOSw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZUludGVyZmFj
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVz
dENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiX3MpOwpA
QCAtMjU0LDYgKzI1OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2Vy
VGVzdEF0dHJpYnV0ZUludGVyZmFjZVNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlSW50ZXJmYWNl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3NCw2
ICsyODAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRy
aWJ1dGVTcGVjaWZpZWRHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVNwZWNpZmllZCIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5j
YWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJB
dHRyaWJ1dGUoaW1wbCwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwpAQCAtMjg5LDYgKzI5
Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0
ZVNwZWNpZmllZFNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlU3BlY2lmaWVkIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwOSw2ICszMTksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFy
aWFudEdldHRlcihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5n
QWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShp
bXBsLCAidGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Il9zKTsKQEAgLTMyNCw2ICszMzYsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFy
aWFudFNldHRlcihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
Q2FsbFRyYWNlcjo6c2V0VGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNDQsNiArMzU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJUZXN0UmVhZG9ubHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RSZWFkb25seUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC50ZXN0UmVhZG9ubHlBdHRyaWJ1dGUoKSkpKTsKIH0K
QEAgLTM1OSw2ICszNzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25JbnRl
cmZhY2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2Vy
Ojp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbkludGVyZmFjZSJf
cyk7CkBAIC0zNzgsNiArMzk2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjp0ZXN0T3BlcmF0aW9u
U3BlY2lmaWVkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRy
YWNlcjo6dGVzdENhbGxUcmFjZXJPcGVyYXRpb24oaW1wbCwgInRlc3RPcGVyYXRpb25TcGVjaWZp
ZWQiX3MpOwpAQCAtMzk3LDYgKzQxNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJh
dGlvbldpdGhBcmd1bWVudHMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
QEAgLTQyNyw2ICs0NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRo
TnVsbGFibGVBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNDUxLDYgKzQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhW
YXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTQ3NSw2ICs1MDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVs
bGFibGVWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTQ5OSw2ICs1MjcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25X
aXRoT3B0aW9uYWxWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFyaWFudE9wdGlvbmFsQXJnID0gYXJndW1l
bnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJ
RExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj46OlJldHVyblR5cGU+KCkgOiBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmlu
Zz4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJ
RExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsK
QEAgLTUyMSw2ICs1NTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRo
RGVmYXVsdFZhcmlhbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byB2YXJpYW50RGVmYXVsdEFyZyA9IGFyZ3VtZW50MC52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExVbmlvbjxJ
RExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKaW5kZXggNTk3Zjc2ZjRlMzgyMmZm
Yjk1OGI2OWI2OGM3MTllZjIxNTJjMTk3Mi4uNTlkZWVkZmQ2OTQ2MmZjOTg3MTdlNDQ0NTI1M2E1
ZTIzOGM4YmQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUg
IkpTTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0ZyYW1lVHJhY2Vycy5oPgpAQCAtNjQyLDYgKzY0NCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
OmFueUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hbnlBdHRyKCkpKSk7CiB9CkBAIC02NTUsNiArNjU5
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdERPTUpJVDo6Ym9vbGVhbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYm9vbGVhbkF0
dHIoKSkpKTsKIH0KQEAgLTY2OCw2ICs2NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtNjgxLDYgKzY4OSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
Om9jdGV0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMT2N0ZXQ+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwub2N0ZXRBdHRyKCkpKSk7CiB9CkBAIC02OTQs
NiArNzA0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdERPTUpJVDo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0
dHIoKSkpKTsKIH0KQEAgLTcwNyw2ICs3MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0QXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKSkpOwogfQpA
QCAtNzIwLDYgKzczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmxvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxv
bmdBdHRyKCkpKSk7CiB9CkBAIC03MzMsNiArNzQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25n
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0F0dHIoKSkpKTsKIH0K
QEAgLTc0Niw2ICs3NjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9u
Z0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpsb25nTG9uZ0F0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmxvbmdMb25nQXR0cigpKSkpOwogfQpAQCAtNzU5LDYgKzc3OSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
OnVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNp
Z25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCkpKSk7CiB9CkBAIC03NzIsNiArNzk0LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Zmxv
YXRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExGbG9hdD4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mbG9hdEF0dHIoKSkpKTsKIH0KQEAgLTc4NSw2ICs4
MDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxv
YXRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVucmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZEZsb2F0QXR0cigpKSkpOwogfQpAQCAtNzk4LDYgKzgy
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmRvdWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5kb3VibGVBdHRy
KCkpKSk7CiB9CkBAIC04MTEsNiArODM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5yZXN0cmljdGVkRG91Ymxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZERvdWJsZUF0
dHIoKSkpKTsKIH0KQEAgLTgyNCw2ICs4NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nQXR0cigpKSkpOwogfQpAQCAtODM3LDYgKzg2
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmJ5dGVTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExCeXRlU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5
dGVTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC04NTAsNiArODg0LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dXN2U3Ry
aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVzdlN0cmluZ0F0dHIoKSkpKTsKIH0KQEAg
LTg2Myw2ICs4OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpub2RlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlQXR0cigpKSkpOwogfQpAQCAt
ODc2LDYgKzkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFu
TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJvb2xlYW5OdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTg4
OSw2ICs5MjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxh
YmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCeXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5ieXRlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05MDIsNiArOTQ0LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6b2N0ZXROdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETE9jdGV0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5vY3RldE51bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTE1LDYgKzk1OSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01K
SVQ6OnNob3J0TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2hv
cnROdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTkyOCw2ICs5NzQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExVbnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC51bnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NDEsNiArOTg5LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6bG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwubG9uZ051bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTU0LDYgKzEwMDQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklU
Ojp1bnNpZ25lZExvbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TE51bGxhYmxlPElETFVuc2lnbmVkTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwudW5zaWduZWRMb25nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NjcsNiArMTAx
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxl
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmxvbmdMb25nTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExOdWxsYWJsZTxJRExMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubG9uZ0xvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk4MCw2ICsx
MDM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xv
bmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25nTG9uZz4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ051bGxhYmxl
QXR0cigpKSkpOwogfQpAQCAtOTkzLDYgKzEwNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpmbG9hdE51bGxhYmxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVsbGFibGVBdHRyKCkp
KSk7CiB9CkBAIC0xMDA2LDYgKzEwNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdE51
bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVu
cmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDE5LDYgKzEwNzksOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0RE9NSklUOjpkb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZG91YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDMyLDYgKzEwOTQsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFi
bGVBdHRyR2V0dGVyKEpTR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
RE9NSklUOjp1bnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRy
KCkpKSk7CiB9CkBAIC0xMDQ1LDYgKzExMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdOdWxsYWJs
ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmlu
Zz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTnVsbGFi
bGVBdHRyKCkpKSk7CiB9CkBAIC0xMDU4LDYgKzExMjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlU3RyaW5n
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExC
eXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3Ry
aW5nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDcxLDYgKzExMzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1
c3ZTdHJpbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETFVTVlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dXN2U3RyaW5nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDg0LDYgKzExNTQsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9N
SklUOjpub2RlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlTnVsbGFibGVBdHRyKCkpKSk7
CiB9CkBAIC0xMDk5LDYgKzExNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVCb2R5KAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0QXR0cmlidXRlIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMTM1LDYgKzEyMDksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25JdGVtQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdERPTUpJVDo6aXRlbSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpAQCAtMTE3Niw2ICsxMjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQm9keSgKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Omhhc0F0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuaGFzQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0xMjA1LDYgKzEyODMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRF
bGVtZW50QnlJZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERP
TUpJVDo6Z2V0RWxlbWVudEJ5SWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTEyNDEsNiArMTMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpnZXRFbGVtZW50c0J5TmFt
ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVu
YWJsZWRCeVNldHRpbmcuY3BwCmluZGV4IDUwMWI5ODhmYTJjNTIxZTZiYTcyMDUwNjNjMzRiN2Fk
OGUyNjQ4N2MuLmVlYjc5NzQyMzY3OTYwNmEwOWVkZDE1YzUxNzkyNzkxZTFkYWQ1YzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAj
aW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgpAQCAtMjM5LDYgKzI0MSw4IEBAIGJvb2wgc2V0SlNUZXN0RW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OlRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCkBAIC0yNTAsNiArMjU0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNH
bG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJs
ZWRCeVNldHRpbmc6OlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTI2NCw2ICsyNzAsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdB
dHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI4MCw2ICsyODgs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRC
eVNldHRpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c2V0RW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwMyw2ICsz
MTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Byb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OmVuYWJsZWRCeVNldHRpbmdPcGVyYXRp
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQuY3BwCmluZGV4IDNkZWIwMGM0ZDUzMGYyNTI5ZmU1MmVlOTRlYTNm
ZGJhYzBhOGFkNGEuLjc4M2ZlYTc5YjBjMTQwMWUzZDI4OTFkMzlmN2NkOWU1MDQ4MmY4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTE4OCw2ICsxOTAsOCBAQCBib29s
IHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEZv
ckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRGb3JD
b250ZXh0OjpUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0
U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5OSw2ICsyMDMsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0RW5hYmxlZEZvckNvbnRleHQ6OlRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRl
eHQiKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBjM2MwOGFkMDY0Y2YzZjIz
ZDU5MGUxYjg5YWY3OWIzOGRjMzFmMGFiLi5kYTk2ZGE4YjQyMmVhMTFiMDZiZWJhYTRkYzA2Mzlj
YjE5OTM1ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0zMSw2
ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CkBAIC0yODcsNiArMjg5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIx
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cjEoKSkpKTsKIH0KQEAgLTMwMCw2ICszMDQsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMigp
KSkpOwogfQpAQCAtMzE0LDYgKzMyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RF
dmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMyIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHIzKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cAppbmRleCBkNGQwZTZlYjA5Y2ZmNGFmNjk4ZTE3OTM4ZDdlNWM5N2E1MDY5OWRhLi4wMmQ3Yjhl
YmIyMDdkNjBhZjlmNTUzYjk2YWU0NDE3NGJmYWI0MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6
ZXIuaD4KQEAgLTI1NSw2ICsyNTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50VGFyZ2V0OjppdGVtIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmlu
ZGV4IGUwN2I0ZWE1N2Q1ZDhjOGI3NDM2ZDRkYzA3MDNmZTE5ZmJhYzdkYzcuLjUwOGUzMjMzNTZh
OGZiODhmYjgxMDliNjdjYzFiMDI4MDUwMmMwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBA
IC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXhjZXB0aW9uOjpu
YW1lIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubmFtZSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCmluZGV4IDU2NGY2ZmRjZmQ2NWJhODBlMGE0MGNhNGIy
MWQ4ZGE1NTBmNDFkMWQuLjA3ZDg5YTc1MzMxYzkyM2QxM2JiYzkzMmY2ODFlOGEyNTZiNWI0YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTI5LDYgKzI5
LDggQEAKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMTk1LDYgKzE5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjph
U2VjcmV0QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYVNlY3JldEF0dHJpYnV0ZSgp
KSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCA2YzBlNTQ2MDFhNDY1OTYx
Y2RjMDY4MjkxNGU3NmZlYmNkYzE1MmRhLi44OTY1OWE0NDQyNDA1YTg2NDcxYTNhYWE2ZThmMTdh
Y2MwYjc0MDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtOTQsNiArOTQsNyBA
QAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpT
VGVzdFR5cGVkZWZzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTgyMSw2ICs4
MjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpyZWd1bGFyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwucmVndWxhckF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtODM0LDYgKzgzNyw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OnNldFJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC04NTIsNiArODU3LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTg2NSw2ICs4NzIsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpzZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtODg0LDYgKzg5Myw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGVHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
OTAwLDYgKzkxMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0CiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRp
b25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTkyMSw2ICs5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtOTM3LDYgKzk1Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC05NTYsNiArOTczLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RDRVJlYWN0aW9ucyIpOwogICAgIHJldHVybiBKU1Rlc3RDRVJl
YWN0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC05NjcsNiArOTg2LDggQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0Q0VSZWFjdGlvbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENF
UmVhY3Rpb25zIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CkBAIC05
NzksNiArMTAwMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25z
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIik7CiAgICAgcmV0dXJuIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
OTkwLDYgKzEwMTMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpKSwgdmFsdWUpOwog
fQpAQCAtMTAwMiw2ICsxMDI3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0Q2FsbFRyYWNlciIpOwogICAgIHJldHVybiBKU1Rlc3RDYWxsVHJhY2VyOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwMTMsNiArMTA0MCw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENhbGxUcmFjZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q2FsbFRyYWNlciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIp
LCBzdHJsZW4oIlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMDI2LDYgKzEwNTUs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgcmV0dXJuIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwNDAsNiArMTA3MSw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RDYWxsYmFja0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIp
KSwgdmFsdWUpOwogfQpAQCAtMTA1NCw2ICsxMDg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMDY1LDYgKzExMDAsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKUwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ii
KSksIHZhbHVlKTsKIH0KQEAgLTEwNzcsNiArMTExNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9i
YWxPCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEdsb2JhbE9iamVjdDo6VGVzdERPTUpJVCIpOwogICAgIHJldHVybiBKU1Rlc3RET01KSVQ6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTA4OCw2ICsxMTI3LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dERPTUpJVCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigi
VGVzdERPTUpJVCIpKSwgdmFsdWUpOwogfQpAQCAtMTEwMCw2ICsxMTQxLDggQEAgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIp
OwogICAgIHJldHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0xMTExLDYgKzExNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0
eSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVu
KCJUZXN0RG9tYWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KQEAgLTExMjMsNiArMTE2OCw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFi
bGVkQnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTEzNCw2ICsxMTgxLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3RFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFi
bGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsK
IH0KQEAgLTExNDYsNiArMTE5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTE1Nyw2
ICsxMjA4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVz
dEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CkBAIC0xMTY5LDYgKzEyMjIsOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTExODAsNiArMTIzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0RXZlbnRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9
CkBAIC0xMTkyLDYgKzEyNDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyMDMsNiArMTI2Miw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRh
cmdldCIpLCBzdHJsZW4oIlRlc3RFdmVudFRhcmdldCIpKSwgdmFsdWUpOwogfQpAQCAtMTIxNSw2
ICsxMjc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
RXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCkBAIC0xMjI2LDYgKzEyODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9uIik7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0RXhj
ZXB0aW9uIikpLCB2YWx1ZSk7CiB9CkBAIC0xMjM4LDYgKzEzMDMsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSIpOwogICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTEyNDksNiArMTMxNiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2
YWx1ZSk7CiB9CkBAIC0xMjYxLDYgKzEzMzAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICByZXR1cm4gSlNUZXN0
R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyNzIsNiArMTM0Myw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEdsb2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVl
KTsKIH0KQEAgLTEyODQsNiArMTM1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Iik7CiAgICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTI5NSw2ICsxMzcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTEzMDcsNiArMTM4NCw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTMxOCw2ICsxMzk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEoKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTMzMCw2ICsx
NDExLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0xMzQxLDYgKzE0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMzU0LDYgKzE0MzksOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iagogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAg
ICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEz
NjgsNiArMTQ1NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdEludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZhY2UiKSksIHZhbHVl
KTsKIH0KQEAgLTEzODIsNiArMTQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUiKTsKICAgICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTM5Myw2ICsxNDg0LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0
b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CiB9CkBAIC0xNDA1LDYgKzE0
OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJh
YmxlIik7CiAgICAgcmV0dXJuIEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTE0MTYsNiArMTUxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwg
dmFsdWUpOwogfQpAQCAtMTQyOCw2ICsxNTI1LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE8K
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOwog
ICAgIHJldHVybiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0xNDM5LDYgKzE1MzgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iagogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVl
KTsKIH0KQEAgLTE0NTEsNiArMTU1Miw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxlCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3RNYXBMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdE1hcExpa2U6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTQ2Miw2ICsxNTY1LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFw
TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RNYXBM
aWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVz
dE1hcExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTE0NzQsNiArMTU3OSw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IApAQCAtMTQ4NSw2ICsxNTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG8KIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAt
MTQ5Nyw2ICsxNjA2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNTA4LDYg
KzE2MTksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVu
KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsK
IH0KQEAgLTE1MjAsNiArMTYzMyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTUzMSw2ICsx
NjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNTQzLDYg
KzE2NjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE1NTQsNiArMTY3Myw4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikp
LCB2YWx1ZSk7CiB9CkBAIC0xNTY2LDYgKzE2ODcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpBdWRpbyIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFt
ZWQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTU3Nyw2ICsxNzAwLDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RBdWRpb0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OkF1ZGlv
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0cmxlbigiQXVkaW8iKSksIHZh
bHVlKTsKIH0KQEAgLTE1ODksNiArMTcxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
Iik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCkBAIC0xNjAwLDYgKzE3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNH
bG9iYQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjEyLDYgKzE3NDEsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE2MjMsNiArMTc1NCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTYzNSw2ICsxNzY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNjQ2LDYg
KzE3ODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiKSks
IHZhbHVlKTsKIH0KQEAgLTE2NTgsNiArMTc5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTY2OSw2ICsxODA4LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikp
LCB2YWx1ZSk7CiB9CkBAIC0xNjgxLDYgKzE4MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFs
Twogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOwog
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTE2OTIsNiArMTgzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9
CkBAIC0xNzA0LDYgKzE4NDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTE3MTUsNiArMTg2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ciIpKSwgdmFsdWUpOwogfQpAQCAtMTcyNyw2ICsxODc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzM4LDYgKzE4ODksOCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVu
KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTc1MCw2
ICsxOTAzLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
NzYxLDYgKzE5MTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVl
KTsKIH0KQEAgLTE3NzMsNiArMTkzMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTc4NCw2ICsxOTQzLDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiks
IHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0K
QEAgLTE3OTYsNiArMTk1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAg
ICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTgwNyw2ICsxOTcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4MTksNiArMTk4NCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTgz
MCw2ICsxOTk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4NDIsNiArMjAxMSw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTg1Myw2ICsyMDI0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25z
dHIKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4NjUsNiArMjAzOCw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJD
b25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MTg3Niw2ICsyMDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcigKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE4ODgsNiArMjA2NSw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsK
ICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTg5OSw2ICsyMDc4LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTExLDYgKzIwOTIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTE5MjIsNiArMjEwNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE5MzUsNiArMjEyMCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwiKTsKICAgICByZXR1cm4gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTk0OSw2ICsyMTM2LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwiKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIiksIHN0cmxlbigiVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTYzLDYgKzIxNTIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycyIpOwogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5NzQsNiArMjE2NSw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTg2LDYgKzIxNzksOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgcmV0
dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTk5Nyw2ICsyMTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1
Y3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSks
IHZhbHVlKTsKIH0KQEAgLTIwMDksNiArMjIwNiw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0ds
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0
dXJuIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MjAyMCw2ICsyMjE5LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92
ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigi
VGVzdE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTIwMzIsNiArMjIzMyw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFBsdWdp
bkludGVyZmFjZSIpOwogICAgIHJldHVybiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjA0Myw2ICsyMjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0Kgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5J
bnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
UGx1Z2luSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRl
cmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CkBAIC0y
MDU1LDYgKzIyNjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRl
cmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RSZWFkT25seU1hcExpa2UiKTsKICAgICByZXR1cm4gSlNUZXN0UmVhZE9ubHlN
YXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwNjYsNiArMjI3Myw4IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFJlYWRPbmx5TWFwTGlrZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0UmVhZE9ubHlNYXBMaWtlIiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwg
dmFsdWUpOwogfQpAQCAtMjA3OCw2ICsyMjg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRM
aWtlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlTZXRMaWtlIik7CiAgICAgcmV0dXJu
IEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMDg5
LDYgKzIzMDAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9u
bHlTZXRMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RSZWFkT25seVNldExpa2UiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFJlYWRPbmx5U2V0TGlrZSIpLCBzdHJsZW4oIlRlc3RSZWFk
T25seVNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxMDEsNiArMjMxNCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdCIpOwogICAgIHJldHVybiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjExMiw2ICsyMzI3LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVj
dG9yKEpTR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0cmxlbigiVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOwogfQpAQCAtMjEyNCw2ICsyMzQxLDggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24i
KTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0yMTM1LDYgKzIzNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24i
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwgc3RybGVuKCJU
ZXN0U2VyaWFsaXphdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjE0Nyw2ICsyMzY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIHJldHVybiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0yMTU4LDYgKzIzODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcgogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVu
KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KQEAg
LTIxNzAsNiArMjM5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAgICByZXR1cm4gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjE4
MSw2ICsyNDA4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Iiks
IHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1ZSk7CiB9CkBAIC0yMTkz
LDYgKzI0MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIHJldHVy
biBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTIyMDQsNiArMjQzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjE3LDYgKzI0NTAsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIyMzEs
NiArMjQ2Niw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNDUsNiArMjQ4Miw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgcmV0
dXJuIEpTVGVzdFNldExpa2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjI1Niw2ICsy
NDk1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RTZXRMaWtlIiksIHN0cmxlbigiVGVzdFNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNjgs
NiArMjUwOSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0U3RyaW5naWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjI3OSw2ICsyNTIyLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3Ry
aW5naWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjkxLDYgKzI1MzYsOCBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgcmV0dXJuIEpT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTIzMDIsNiArMjU0OSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjMxNCw2ICsyNTYzLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsKICAgICByZXR1cm4gSlNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzI1
LDYgKzI1NzYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24iKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
ICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwg
dmFsdWUpOwogfQpAQCAtMjMzNyw2ICsyNTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzQ4LDYg
KzI2MDMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0bwogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXND
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CiB9CkBAIC0yMzYwLDYgKzI2MTcs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAg
ICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTIzNzEsNiArMjYzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSks
IHZhbHVlKTsKIH0KQEAgLTIzODMsNiArMjY0NCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTR2xv
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjM5NCw2ICsyNjU3LDggQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGVDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVl
KTsKIH0KQEAgLTI0MDYsNiArMjY3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjQxNyw2ICsyNjg0LDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1
ZSk7CiB9CkBAIC0yNDI5LDYgKzI2OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFR5cGVkZWZzIik7CiAgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTI0NDAsNiArMjcxMSw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFR5cGVkZWZzQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFR5cGVkZWZzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJs
ZW4oIlRlc3RUeXBlZGVmcyIpKSwgdmFsdWUpOwogfQpAQCAtMjQ1NSw2ICsyNzI4LDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25SZWd1bGFyT3BlcmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OnJlZ3VsYXJPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTI0NzgsNiArMjc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtMjQ5Niw2ICsyNzczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtMjUxNSw2ICsy
Nzk0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAg
IGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI1NDMsNiArMjgyNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwpAQCAtMjU2Niw2ICsyODQ5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVu
YWJsZWRJblNwZWNpZmljV29ybGQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTI1ODgsNiArMjg3Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkSW5T
cGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYxMCw2ICsyODk3LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkSW5TcGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OmVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYzMyw2ICsyOTIyLDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdElu
c3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnRlc3RQcml2YXRlRnVuY3Rpb24iKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwudGVzdFByaXZhdGVGdW5jdGlvbigpOwpAQCAtMjY1Miw2ICsyOTQzLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25DYWxjdWxhdGVTZWMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OmNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7
CiAgICAgaW1wbC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0y
NjY5LDYgKzI5NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvbwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6Z2V0U2VjcmV0Qm9vbGVhbiIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuZ2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMjY4NSw2ICsyOTgwLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0RmVhdHVyZUcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1
cmVHZXRTZWNyZXRCb29sZWFuKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDNmNTAzYWI4ZDVhMzJkZGUyZGQ1ZWU3
ZDg5NWY3NzZkMzY5NWZkN2QuLjUwNDk3ODdlMWExYjU0YTA1YjVmZmVkYzNlNmM1OGQ3NDVjZTI5
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yODIsNiArMjg0LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZUZ1bmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNzEzMzlh
MWFiODg1NTk0M2ZkYmExYzcwNDlhODBhN2IwYmYxNzAyYS4uODM0NDNhNzNlYzIxOThkYWQ5ODg2
ZmM4ZGIwYzFhNTNjZjE2OGMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTM4LDYgKzM4
LDggQEAKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdE5v
ZGUuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTUxMCw2ICs1MTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50
ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSkp
KTsKIH0KIApAQCAtNTI1LDYgKzUyOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEpTR2xvCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNB
dHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c1N0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNTQwLDYgKzU0Niw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZh
Y2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC01NjAsNiAr
NTY4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIxR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjEiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5pbXBsZW1lbnRzU3RyMSgpKSkpOwogfQpAQCAtNTc2LDYgKzU4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6
OmltcGxlbWVudHNTdHIyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSkp
KTsKIH0KQEAgLTU5Miw2ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RyMiIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTYxMiw2
ICs2MjYsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjMiKTsKICAgICBy
ZXR1cm4gdGhpc09iamVjdC5pbXBsZW1lbnRzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0K
IApAQCAtNjI2LDYgKzY0Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dEludGVyZmFjZTo6SW1wbGVtZW50c1N0cjMiKTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVu
dHNTdHIzKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTY0Miw2ICs2NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c05vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTm9kZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRz
Tm9kZSgpKSkpOwogfQpAQCAtNjU4LDYgKzY3OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVu
dHNOb2RlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2Rl
IiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC02NzksNiArNzAxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2UKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljUmVh
ZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKSkpOwogfQogCkBAIC02
OTQsNiArNzE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljQXR0ciIpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNzA5LDYgKzczNSw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY0F0dHJTZXR0ZXIoSlNHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRl
cmZhY2U6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKQEAgLTcy
OSw2ICs3NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIxIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpKSk7
CiB9CkBAIC03NDUsNiArNzc1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMiIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIy
KGltcGwpKSkpOwogfQpAQCAtNzYxLDYgKzc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldFN1cHBsZW1l
bnRhbFN0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC03ODEsNiArODE1LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmMKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
U3RyMyIpOwogICAgIHJldHVybiB0aGlzT2JqZWN0LnN1cHBsZW1lbnRhbFN0cjMobGV4aWNhbEds
b2JhbE9iamVjdCk7CiB9CiAKQEAgLTc5NSw2ICs4MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6U3VwcGxlbWVudGFsU3RyMyIpOwogICAgIHRo
aXNPYmplY3Quc2V0U3VwcGxlbWVudGFsU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MTEsNiArODQ5LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3Vw
cGxlbWVudGFsTm9kZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5v
ZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBs
KSkpKTsKIH0KQEAgLTgyNyw2ICs4NjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRTdXBwbGVtZW50YWxO
b2RlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUi
LCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTg0OCw2ICs4OTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlUmVmbGVjdEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjphdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIpKSkpOwogfQpAQCAtODY0LDYgKzkwOCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRl
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RJbnRlcmZhY2U6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTg4Nyw2ICs5MzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdElu
dGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuaW1wbGVt
ZW50c01ldGhvZDEoKTsKQEAgLTkwNyw2ICs5NTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0
aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c01ldGhvZDIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkzNiw2ICs5ODYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDMiKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSkpKSk7CiB9CiAKQEAgLTk1Myw2ICsxMDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxl
bWVudHNNZXRob2Q0Iik7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgVGVzdEludGVy
ZmFjZTo6aW1wbGVtZW50c01ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtOTcyLDYgKzEwMjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5
KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6dGFr
ZU5vZGVzIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIGltcGxSZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZh
Y2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEZNb3ZlKGltcGxSZXN1bHQubm9kZXMpKSkpOwpAQCAtOTkxLDYgKzEwNDcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMSIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMShpbXBsKTsKQEAg
LTEwMTEsNiArMTA2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2Qy
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMDQwLDYgKzExMDAs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMyIpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1
cHBsZW1lbnRhbE1ldGhvZDMoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwog
fQogCkBAIC0xMDU3LDYgKzExMTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
TWV0aG9kNCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5jcHAKaW5kZXggMzYyOGNkNjYyN2NjOGVmZjc1MzRiOTY0NmY4YmVm
NWE5MjkxNDhkZi4uNzA3YzYxOGMyZDMyNTQxOTkwYTYwMTFhMTJiNGVjZWI0NmIyODYyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCkBA
IC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihK
U0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmU6OnJlYWRvbmx5Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZG9ubHko
KSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4
IDFjMTFiYzZiZmI5NmJmYmJkN2I5MDdhOWNiY2M1ODA1Mjk2YjI4ZDUuLjJiYTBhOGNjZDZhNzgw
MTU5NTQxYzE1MThjN2ViNGI4YjcyNzU0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Nyw2
ICsxOTksOCBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3ImIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjp0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QudGVzdEF0dHJpYnV0ZUN1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtMjA4
LDYgKzIxMiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVz
dEF0dHJpYnV0ZUN1c3RvbShKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcjo6dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRo
aXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQog
CkBAIC0yMTksNiArMjI1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oSlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6VGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0
b20obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjM0LDYgKzI0Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnRlc3RDdXN0b21G
dW5jdGlvbiIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RDdXN0b21GdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGViZTJjNjJmOTk0
ZTFhYjQ1ZDZmNjEzODQ3MTQ4NDIzMTU5M2FhMzQuLjA1OTAyODdkYjQzYTc3NGMzZDBkNjgwMTI2
Mjc3ZTBiMzczZjQ2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpA
QCAtMzU4LDYgKzM2MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CkBAIC0zODMsNiArMzg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG8KICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5j
cHAKaW5kZXggNTkxNWExNTMwZjI2ZWYxY2YxNTliOWM3YjU0OGE0ZjNjMzI1ZjA0Yy4uMGRkZTg5
M2ZmN2I5MjBhZjI1Y2ZlZWQ3OGQ0ZTRlNmU1YmZiNmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CkBAIC0yNjUsNiArMjY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3QKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6
bmFtZWREZWxldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggZDVm
NDc4ZWZlNTYwMGRhNTQ0NjY4NTM3YTA1YzJjZGJiNzZkNDhiZi4uNzgwMTNmOTVhNmFjMWVlZjRh
MWVmZjcwNjVlNTQzMTQyN2Q5YzdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjQxLDYgKzI0
Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0dGVyTmFtZSIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGVjNjcwMDY5NjA0ZDhlMTRlOGI4
MmYxYjUwZjFhNDIyYjQ2NjU5MTIuLjY3M2M0YTA4ZjI4MWI0MDVhMmFjZmMzZGRiZGU0YmMwOGY3
YTFlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTMxMCw2ICszMTIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHAKaW5kZXggMGJlMzQwNWEyNDE4N2ZkMzUzZTZlMDdhNmIwYjhi
YTlmMDFkMmY2Ni4uNGE3NjBlNDZmNTJmYzIxNmU3MzhlOWUwNTNhMWUwOGM5NTNmOTJhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNw
cApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzM1LDYgKzMzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJv
dG90eXBlRnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmFtZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTM2MCw2ICszNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlw
ZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAppbmRleCBhZTRlZTk2ODM1NGUyYzAy
YTRlOTEwNWE5MDVkNWIyYzI3OTlhMTRlLi45OTQ5NGI1NDRmYzRiY2E2MzllMjYxZmE0NWZmMDc4
YjJkNWIwMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBA
IC0zNTgsNiArMzYwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpuYW1lZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtMzgzLDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
VW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtNDAxLDYgKzQwNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5z
aWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NDE0LDYgKzQyMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlcjo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlw
ZUZ1bmN0aW9uSW5kZXhlZFNldHRlciIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1p
bjxzaXplX3Q+KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50ID09IDEpIHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25J
bmRleGVkU2V0dGVyMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRU
aGlzKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcy5jcHAKaW5kZXggMjZjNjIyNWExMjA4MjcyYzQ1MmIzNmQwYjE3
MDgyMzA3Yzc2OTVhZi4uNzEzMDMxOTAxYzA4ZWUwMjFmNTBkMDBjZTlhYzY1YjQ0M2U5MzY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXMuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zMzgsNiArMzQwLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp1bmZvcmdlYWJsZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC0zNTMsNiArMzU3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5zdGEKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllczo6dW5mb3JnZWFibGVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudW5m
b3JnZWFibGVPcGVyYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucy5jcHAKaW5kZXggMjc0MjNhYWM1ZTYxMzIyNGM0NzY1MWVhYTM0MmZmYjJm
N2YwNDg4NC4uNjYyZjk3NGY4M2IxODEyNjZjNGQwYTVkYzgwYmY4ZDU1MmRiNDIxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAgLTMx
LDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTMxOSw2ICszMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0z
MzQsNiArMzM4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3YKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnM6OnVuZm9yZ2VhYmxlT3BlcmF0aW9uIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
ICAgICBpbXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggYTNiODc5
MzFlMTJmYWViNzNhYjVmMTQ0MjVmNDY1ZDE1MjhiMTI2Yi4uNTRjNTM2ZWZjMTc4OTBkMjI5MGU0
NDc2YTQ4NzNiMjIxZDYzYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCkBAIC0yODksNiArMjkwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vZGVOYW1lR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6bmFtZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLm5hbWUoKSkpKTsKIH0KQEAgLTMwMiw2ICszMDUsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpzZXROYW1l
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzIy
LDYgKzMyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6dGVzdFdvcmtlclByb21pc2UiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zMzks
NiArMzQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3UKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgIGltcGwuY2FsY3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpA
QCAtMzU2LDYgKzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9kCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0
U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMzcyLDYgKzM4Myw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVy
ZUdldFNlY3JlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6
dGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xl
YW4oKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMTY0MzNkOTlmMTJhMTBkMTExZmE4YTUwYzYxZWM4
ODRlMjZjNzI5MS4uNTQzNTFlYmM3MTZkMDhlNTIwN2RkYjAxN2IyMGZkZmNmZDA0MmM1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgog
I2luY2x1ZGUgIkpTV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTI2NjYsNiArMjY2Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnJlYWRPbmx5TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlMb25nQXR0cigp
KSkpOwogfQpAQCAtMjY3OSw2ICsyNjgyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVhZE9ubHlTdHJpbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0yNjky
LDYgKzI2OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0
T2JqQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRPbmx5VGVzdE9i
akF0dHIoKSkpKTsKIH0KQEAgLTI3MDUsNiArMjcxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5
TG9uZ0F0dHIiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljUmVh
ZE9ubHlMb25nQXR0cigpKSkpOwogfQogCkBAIC0yNzE3LDYgKzI3MjYsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdGF0
aWNTdHJpbmdBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6
c3RhdGljU3RyaW5nQXR0cigpKSkpOwogfQogCkBAIC0yNzI5LDYgKzI3NDAsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRTdGF0aWNTdHJpbmdBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC0yNzQ1LDYgKzI3NTgsOCBA
QCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpUZXN0U3ViT2Jq
Iik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0yNzU3LDYgKzI3NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JUZXN0U3RhdGljUmVhZG9ubHlPYmpHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0U3RhdGljUmVhZG9ubHlPYmoiKTsKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250
ZXh0KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yNzc0LDYgKzI3OTEsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjplbnVtQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRp
b248VGVzdE9iajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmVudW1BdHRyKCkpKSk7CiB9CkBAIC0yNzg3LDYgKzI4MDYsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbnVt
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yODA4LDYgKzI4MjksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtMjgyMSw2ICsyODQ0LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Qnl0ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMjgzOSw2ICsyODY0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak9jdGV0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5vY3RldEF0dHIoKSkpKTsKIH0KQEAgLTI4NTIsNiArMjg3OSw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9j
dGV0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
Mjg3MCw2ICsyODk5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9y
dEF0dHIoKSkpKTsKIH0KQEAgLTI4ODMsNiArMjkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFNob3J0QXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjkwMSw2ICsy
OTM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6Y2xhbXBlZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMQ2xhbXBBZGFwdG9yPElETFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTE0LDYgKzI5NDksOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRDbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRh
cHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5MzIsNiArMjk2OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RW5mb3JjZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTQ1LDYgKzI5
ODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5
NjMsNiArMzAwNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTc2LDYgKzMwMTksOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRVbnNpZ25lZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25l
ZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTk0LDYgKzMwMzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25n
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cigpKSkpOwogfQpAQCAtMzAwNyw2ICszMDU0
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMzAyNSw2ICszMDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bG9uZ0xvbmdBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5sb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMwMzgsNiArMzA4OSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldExvbmdMb25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMzA1Niw2ICszMTA5LDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0
dHIoKSkpKTsKIH0KQEAgLTMwNjksNiArMzEyNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xv
bmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTMwODcsNiArMzE0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ0F0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5zdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0zMTAwLDYgKzMxNTksOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpzZXRTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzExOCw2ICszMTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWwKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTMxMzEsNiArMzE5NCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldFVzdnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMTQ5LDYgKzMyMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0T2JqQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC50ZXN0T2JqQXR0cigpKSkpOwogfQpAQCAtMzE2Miw2ICszMjI5LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
VGVzdE9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE9iakF0
dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTMxODAsNiArMzI0OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3ROdWxsYWJsZU9iakF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0dHIoKSkpKTsKIH0KQEAgLTMxOTMsNiAr
MzI2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTMyMTEsNiArMzI4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmxlbmllbnRUZXN0T2JqQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5sZW5pZW50
VGVzdE9iakF0dHIoKSkpKTsKIH0KQEAgLTMyMjQsNiArMzI5OSw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldExlbmll
bnRUZXN0T2JqQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJsZW5pZW50
VGVzdE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyNDIsNiArMzMxOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuZm9yZ2VhYmxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKSkpOwogfQpAQCAt
MzI1NSw2ICszMzM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmciKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9y
PElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSkpKTsKIH0KQEAgLTMyNjgsNiArMzM0
OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ1NldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTMyODYsNiArMzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihK
U0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExU
cmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KCkpKSk7CiB9CkBAIC0zMjk5LDYgKzMzODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNHbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0Vt
cHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzE3LDYgKzM0
MDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5
dGVTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKSkpOwogfQpAQCAtMzMzMCw2ICszNDE5
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0Qnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzQ4LDYgKzM0MzksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdMb25n
UmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBA
IC0zMzYxLDYgKzM0NTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
TG9uZ1JlY29yZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMzM3OSw2ICszNDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExv
bmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzM5Miw2
ICszNDg5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMUmVjb3JkPElETFVTVlN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM0MTAsNiArMzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3Zz
dHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDIzLDYgKzM1
MjQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29y
ZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTM0NDEsNiArMzU0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdP
YmpSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0
T2JqPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnN0cmluZ09ialJlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTM0NTQsNiAr
MzU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzQ3Miw2ICszNTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nTnVsbGFibGVPYmpSZWNv
cmRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5n
LCBJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDg1LDYgKzM1OTQsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM1MDMsNiArMzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ1ZvaWRDYWxsYmFj
a1JlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01T
dHJpbmcsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3Ry
aW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzUxNiw2ICszNjI5LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0
dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0U3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNr
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTM0
LDYgKzM2NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpkaWN0aW9uYXJ5QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZGljdGlv
bmFyeUF0dHIoKSkpKTsKIH0KQEAgLTM1NDcsNiArMzY2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldERpY3Rpb25h
cnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM1NjUsNiArMzY4NCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxl
RGljdGlvbmFyeUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElE
TERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZURpY3Rp
b25hcnlBdHRyKCkpKSk7CiB9CkBAIC0zNTc4LDYgKzM2OTksOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXROdWxsYWJs
ZURpY3Rpb25hcnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTk2LDYgKzM3
MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5p
b25BdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKCkpKSk7CiB9CkBAIC0zNjA5LDYg
KzM3MzQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUlu
VW5pb25BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNjI3LDYgKzM3NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBl
SW5TZXF1ZW5jZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElE
TENsYW1wQWRhcHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNl
QXR0cigpKSkpOwogfQpAQCAtMzY0MCw2ICszNzY5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QW5ub3RhdGVkVHlw
ZUluU2VxdWVuY2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2NTgsNiArMzc4OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TEVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpKSk7CiB9CkBAIC0zNjcxLDYg
KzM4MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25F
bnVtQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1
ZSA9IHBhcnNlRW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM2OTIsNiArMzgyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNZWRp
YURldmljZXNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1lZGlhRGV2aWNlcyIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlcz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1lZGlhRGV2
aWNlcygpKSkpOwogfQpAQCAtMzcwNSw2ICszODQyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6eG1sT2JqQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC54
bWxPYmpBdHRyKCkpKSk7CiB9CkBAIC0zNzE4LDYgKzM4NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRYTUxPYmpB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM3MzYsNiArMzg3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVh
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmlzQ3JlYXRlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmlzQ3JlYXRlKCkpKSk7CiB9CkBAIC0zNzQ5LDYgKzM4OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ3JlYXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDcmVhdGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzc2Nyw2
ICszOTEyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSkpKTsKIH0KQEAgLTM3ODAsNiArMzkyNyw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTM3OTgsNiArMzk0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdh
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpKSk7
CiB9CkBAIC0zODExLDYgKzM5NjIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODI5
LDYgKzM5ODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50
ZWdyYWxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpnZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRy
KSkpKTsKIH0KQEAgLTM4NDIsNiArMzk5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEludGVncmFsQXR0cmlidXRl
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYwLDYgKzQwMTcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpnZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbnNpZ25lZExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHN0ZDo6
bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSkpKTsKIH0KQEAgLTM4NzMsNiArNDAzMiw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0clNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODkxLDYgKzQwNTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExC
b29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29s
ZWFuYXR0ckF0dHIpKSkpOwogfQpAQCAtMzkwNCw2ICs0MDY3LDggQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Qm9vbGVh
bkF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTIyLDYg
KzQwODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpnZXRVUkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpKTsKIH0KQEAgLTM5MzUs
NiArNDEwMiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTMsNiArNDEyMiw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmdldFVSTEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKSkpOwogfQpAQCAtMzk2Niw2ICs0MTM3LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzk4NCw2ICs0MTU3LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRTdHJpbmdBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0
ckF0dHIpKSkpOwogfQpAQCAtMzk5Nyw2ICs0MTcyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJp
bmdBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQwMTUsNiArNDE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEludGVncmFsQXR0cmlidXRlOldlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50SW50ZWdyYWxBdHRyQXR0cikpKSk7CiB9CkBAIC00MDI4LDYgKzQyMDcsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRl
Z3JhbEF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTQwNDYsNiArNDIyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKSkpOwogfQpAQCAt
NDA1OSw2ICs0MjQyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRCb29sZWFuQXR0cmlidXRlOldlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExC
b29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MDc3LDYgKzQyNjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRV
UkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA5MCw2ICs0Mjc3LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQxMDksNiArNDI5OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC00MTI1LDYgKzQzMTYsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDE0Niw2ICs0MzM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY0dldHRlcigK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZVN0YXRpYyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6
OmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMoKSkpKTsKIH0KIApAQCAtNDE2MSw2ICs0
MzU2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRlcigKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewpAQCAtNDE4MCw2ICs0Mzc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dHlwZWRBcnJheUF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHlwZWRB
cnJheUF0dHIoKSkpKTsKIH0KQEAgLTQxOTMsNiArNDM5Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFR5cGVkQXJy
YXlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZs
b2F0MzJBcnJheSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTQyMTAsNiArNDQxMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0
dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbUF0dHIiKTsKICAgICByZXR1cm4gdGhp
c09iamVjdC5jdXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC00MjIxLDYg
KzQ0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSgogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Q3VzdG9tQXR0ciIpOwogICAgIHRo
aXNPYmplY3Quc2V0Q3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC00MjMzLDYgKzQ0MzgsOCBAQCBib29sIHNldEpTVGVzdE9iakN1
c3RvbUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQiKTsK
ICAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBl
dmVudE5hbWVzKCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0K
IApAQCAtNDI0NCw2ICs0NDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHUKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCku
Zm9vRXZlbnQiKTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29F
dmVudCwgdmFsdWUpOwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1
ZSk7CiAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOwpAQCAtNDI1OSw2ICs0NDY4LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpPbndlYmtpdGZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRy
aWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgd29ybGRG
b3JET01PYmplY3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjcwLDYgKzQ0ODEsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Vi
a2l0Zm9vU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHNldEV2
ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoJnRoaXNPYmplY3QsIHZhbHVlKTsKICAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZSh2YWx1ZSk7CkBAIC00Mjg2LDYgKzQ0OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC00
Mjk5LDYgKzQ1MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNT
dGF0ZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRXaXRoRXhlY1N0YXRlQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzMTcsNiArNDUzNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNDMzMCw2
ICs0NTQ5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFu
ZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDM0OCw2
ICs0NTY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MzY0LDYgKzQ1
ODcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtNDM4NSw2ICs0NjEwLDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmli
dXRlR2UKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00NDAxLDYgKzQ2MjgsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3Rh
dGVBdHRyaWJ1dGVTZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4
ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQyMiw2ICs0NjUxLDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRl
V2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CiAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSgh
Y29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDQzOCw2ICs0NjY5
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJU
ZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDQ2MCw2ICs0NjkzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpKSk7CiB9CkBAIC00NDc2LDYgKzQ3MTEsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRDb25kaXRpb25hbEF0dHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQ0OTcsNiArNDczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxBdHRyMigpKSkpOwogfQpAQCAtNDUxMyw2ICs0
NzUyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMiIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NTM0LDYgKzQ3NzUsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRp
b25hbEF0dHIzIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSkpKTsKIH0KQEAg
LTQ1NTAsNiArNDc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIzU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjMiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDU3MCw2ICs0ODE1LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVj
dEE6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDU4NCw2ICs0ODMxLDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNCIpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI0IiksIHN0cmxlbigiY29uZGl0
aW9uYWxBdHRyNCIpKSwgdmFsdWUpOwogfQpAQCAtNDU5OSw2ICs0ODQ4LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjb25kaXRpb25hbEF0dHI1Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDYxMyw2ICs0ODY0LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNSIpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxB
dHRyNSIpKSwgdmFsdWUpOwogfQpAQCAtNDYyOCw2ICs0ODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpjb25kaXRpb25hbEF0dHI2Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtNDY0Miw2ICs0ODk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNiIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIp
KSwgdmFsdWUpOwogfQpAQCAtNDY1Nyw2ICs0OTE0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y2FjaGVkQXR0cmlidXRl
MSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0
dHJpYnV0ZTEuZ2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkBAIC00Njc1LDYgKzQ5MzQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
YWNoZWRBdHRyaWJ1dGUyIik7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2Jq
ZWN0Lm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVl
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTQ2OTQsNiArNDk1
NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNhY2hlZEF0dHJpYnV0ZTMiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRW
YWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUzLmdldCgpKQogICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpA
QCAtNDcxNCw2ICs0OTc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YW55QXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NzI3LDYgKzQ5OTIsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBbnlB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
NzQ1LDYgKzUwMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvYmplY3RBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5vYmplY3RBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3NTgsNiArNTAyNyw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNl
dE9iamVjdEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPYmplY3Q+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTQ3NzYsNiArNTA0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnRlbnREb2N1bWVudCIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPERvY3VtZW50Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdT
ZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUobGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5j
b250ZW50RG9jdW1lbnQoKSkpKSk7CiB9CkBAIC00Nzg5LDYgKzUwNjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptdXRh
YmxlUG9pbnQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxTVkdQb2lu
dD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLm11dGFibGVQb2ludCgpKSkpOwogfQpAQCAtNDgwMiw2ICs1MDc3LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludFNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0TXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxTVkdQ
b2ludD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIs
ICJtdXRhYmxlUG9pbnQiLCAiU1ZHUG9pbnQiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00ODIwLDYgKzUwOTcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpibHVlYmVy
cnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuYmx1ZWJlcnJ5KCkpKSk7CiB9CkBAIC00ODMzLDYgKzUxMTIs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpzZXRCbHVlYmVycnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDg1MSw2ICs1MTMyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2IK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZGVzY3JpcHRpb24iKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZGVzY3JpcHRpb24oKSkpKTsKIH0KQEAgLTQ4NjQsNiArNTE0Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmlkIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmlkKCkpKSk7CiB9CkBAIC00ODc3LDYgKzUxNjIsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRJZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC00ODk1LDYgKzUxODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFz
aEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpoYXNoIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
aGFzaCgpKSkpOwogfQpAQCAtNDkwOCw2ICs1MTk3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTQ5MjAsNiArNTIxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVw
bGFjZWFibGVBdHRyaWJ1dGUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0
eS4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRy
aWJ1dGUiKSwgc3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQpAQCAt
NDkzMyw2ICs1MjI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
RG91YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1
dGUoKSkpKTsKIH0KQEAgLTQ5NDYsNiArNTI0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMTG9uZz4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVMb25nQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC00OTU5LDYgKzUyNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZUJvb2xlYW5BdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQm9vbGVhbkF0
dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk3Miw2ICs1MjcxLDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERP
TVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVT
dHJpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5ODUsNiArNTI4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5u
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk5OCw2ICs1MzAxLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwMTYsNiArNTMy
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRh
YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgp
KSkpOwogfQpAQCAtNTAyOSw2ICs1MzM2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0TnVsbGFibGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MDQ3LDYgKzUzNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVVT
VlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUwNjAs
NiArNTM3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNTA3OCw2ICs1MzkxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJ5
dGVTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxl
Qnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDkxLDYgKzU0MDYsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXROdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExCeXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NTEwOSw2ICs1NDI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MTIyLDYgKzU0NDEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoSlNHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVy
YXRpb248VGVzdE9iajo6T3B0aW9uYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpKSk7CiB9CkBAIC01MTM1LDYg
KzU0NTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJl
c2VydmVkRW51bVR5cGVTZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0
aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC01MTU2LDYgKzU0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmVhZE9ubHlWb2lkUHJvbWlz
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExWb2lk
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTUxNjksNiArNTQ5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVh
ZE9ubHlQcm9taXNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFByb21pc2U8SURMSW50ZXJmYWNlPFRlc3ROb2Rl
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUx
ODIsNiArNTUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJk
c0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJk
c0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTE5NSw2ICs1NTI0LDggQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUiKTsKICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBz
dHJsZW4oInB1dEZvcndhcmRzQXR0cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRU
byA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjE4LDYgKzU1NDksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTIzMSw2ICs1NTY0LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJwdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC01MjU0LDYgKzU1ODksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdpZmllckF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC01MjY3LDYgKzU2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUyODUsNiAr
NTYyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVh
ZFdyaXRlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTI5OSw2ICs1NjQwLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVzdE9iamVjdCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzIw
LDYgKzU2NjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
bmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuY29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkp
KSk7CiB9CkBAIC01MzM3LDYgKzU2ODIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dAogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRpb25hbEFuZENvbmRp
dGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3Qi
LCAiY29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01
MzU5LDYgKzU3MDYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
NTM3Miw2ICs1NzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVD
b25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUzOTAsNiArNTc0MSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZVVuZm9yZ2VhYmxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1
bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZSgpKSkpOwogfQpAQCAtNTQw
Myw2ICs1NzU2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGVVbmZvcmdlYWJsZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1l
Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlIiwgIk5vZGUiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDIxLDYg
KzU3NzYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVu
Zm9yZ2VhYmxlUHJpdmF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNl
PE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVu
Zm9yZ2VhYmxlUHJpdmF0ZSgpKSkpOwogfQpAQCAtNTQzNCw2ICs1NzkxLDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmli
dXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0NTIsNiArNTgxMSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVByb21pc2VHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExEb3VibGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5y
dW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2UoKSkpKTsKIH0KQEAg
LTU0NjUsNiArNTgyNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSdW50aW1l
Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2VTZXR0CiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRl
QXR0cmlidXRlUHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExQcm9taXNlPElETERvdWJsZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0ODMsNiArNTg0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlR2V0dGVy
KEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxs
eUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTQ5Niw2ICs1ODYxLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5k
b3dBdHRyaWJ1dGVTZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NTE0LDYgKzU4ODEsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtl
ckF0dHJpYnV0ZUdldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTU1
MjcsNiArNTg5Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTU0
NSw2ICs1OTE2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtl
ckF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93
QW5kV29ya2VyQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01NTU4LDYgKzU5MzEsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdv
cmtlckF0dHJpYnV0ZVNldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1NzksNiArNTk1NCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQ
YXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwpAQCAtNTU5Nyw2ICs1OTc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNTYxNiw2ICs1
OTk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09
IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CkBAIC01NjQ0LDYgKzYwMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTU2NjcsNiArNjA1
MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjplbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTY4
OSw2ICs2MDc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEIKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OndvcmxkU3BlY2lmaWNNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU3MTEsNiArNjA5OCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNh
bGN1bGF0ZVNlY3JldFJlc3VsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY2Fs
Y3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtNTcyOCw2ICs2MTE3LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmdldFNlY3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkp
KTsKIH0KQEAgLTU3NDQsNiArNjEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0RmVhdHVyZUdldFNl
Y3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExCb29sZWFuPihpbXBsLnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAt
NTc2MSw2ICs2MTU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwog
ICAgIGltcGwudm9pZE1ldGhvZCgpOwpAQCAtNTc3OCw2ICs2MTczLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZFdpdGhBcmdzQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnZvaWRNZXRob2RXaXRoQXJncyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNTgwNiw2ICs2MjAzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmJ5dGVNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCeXRlPihpbXBsLmJ5dGVNZXRo
b2QoKSkpKTsKIH0KQEAgLTU4MjEsNiArNjIyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0Jv
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlTWV0aG9k
V2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU4NDcs
NiArNjI0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvY3RldE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpKSk7
CiB9CkBAIC01ODYyLDYgKzYyNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRNZXRob2RXaXRoQXJn
cyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTg4OCw2ICs2Mjkz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmxvbmdNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExMb25nPihpbXBsLmxvbmdNZXRob2QoKSkpKTsKIH0KQEAgLTU5
MDMsNiArNjMxMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25nTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5MjksNiArNjMzOCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9i
ak1ldGhvZEJvZHkoSlNDOjpKCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvYmpNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kKCkpKSk7CiB9CkBAIC01OTQ0LDYg
KzYzNTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5NzAsNiArNjM4Myw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFi
bGVNZXRob2RCb2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojp1bmZvcmdlYWJsZU1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETExvbmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpKTsKIH0KQEAgLTU5ODUs
NiArNjQwMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjAwNyw2
ICs2NDI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwMjksNiArNjQ0
OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ01ldGhvZCIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLm51bGxhYmxlU3RyaW5nTWV0aG9kKCkpKSk7CiB9CkBA
IC02MDQ0LDYgKzY0NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRo
b2QiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIFRl
c3RPYmo6Om51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKCkpKSk7CiB9CiAKQEAgLTYwNTgsNiAr
NjQ4MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwNzgsNiArNjUwMyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhFbnVtQXJnQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjEwMCw2ICs2NTI3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhT
dGFuZGFsb25lRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNjEyMiw2ICs2NTUxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW4KICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEVudW1B
cmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gZW51bUFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlw
ZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlw
ZT4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIs
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KSk7CkBA
IC02MTQyLDYgKzY1NzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFy
Z0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmlu
ZWQoKSA/IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CkBAIC02MTYyLDYgKzY1OTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjE4NSw2ICs2NjIwLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFVTVlN0cmluZ0EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6Om1ldGhvZFdpdGhVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKQEAgLTYyMDcsNiArNjY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVT
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRo
TnVsbGFibGVVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTYyMjksNiArNjY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoVVNWU3RyaW5n
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjI1MSw2ICs2NjkyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhC
eXRlU3RyaW5nQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02
MjczLDYgKzY3MTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeQogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmlu
Z0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjI5NSw2ICs2
NzQwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
NjMxNyw2ICs2NzY0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZSIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMzOSw2ICs2Nzg4LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFJlY29yZEJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6Om1ldGhvZFdpdGhSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTYzNjEsNiArNjgxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25CCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKQEAgLTYzNzgs
NiArNjgzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9u
ZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25S
ZXR1cm5pbmdMb25nKCkpKSk7CiB9CkBAIC02MzkzLDYgKzY4NDgsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
RXhjZXB0aW9uUgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
bWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5t
ZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKSk7CiB9CkBAIC02NDA4LDYgKzY4
NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21NZXRob2RCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9k
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtNjQyMiw2ICs2
ODgxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzIik7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3Vz
dG9tTWV0aG9kV2l0aEFyZ3MoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwog
fQogCkBAIC02NDM2LDYgKzY4OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQm9keShKUwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHJpdmF0ZU1ldGhvZCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjQ1Niw2ICs2OTE5LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uUHVibGljQW5kUHJpdmF0ZU1ldGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnB1YmxpY0FuZFByaXZhdGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NzYsNiArNjk0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVu
ZXJCb2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphZGRF
dmVudExpc3RlbmVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02
NTA1LDYgKzY5NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjUzNCw2ICs3MDAzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aEV4ZWNTdGF0ZVZvaWRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OndpdGhFeGVjU3RhdGVWb2lkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLndpdGhF
eGVjU3RhdGVWb2lkKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC02NTUxLDYgKzcwMjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqQm9keQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aEV4ZWNTdGF0ZU9i
aiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC53aXRoRXhlY1N0YXRlT2JqKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC02NTY2LDYgKzcwMzksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
RXhlY1N0YXRlVm9pZEV4YwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6d2l0aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53aXRo
RXhlY1N0YXRlVm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCkpKTsKQEAgLTY1ODMsNiArNzA1OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVP
YmpFeGNlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRo
RXhlY1N0YXRlT2JqRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVP
YmpFeGNlcHRpb24oKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpKSkpKTsKIH0KQEAgLTY1OTgsNiArNzA3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElL
RUxZKCFjb250ZXh0KSkKQEAgLTY2MTgsNiArNzA5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRp
b25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2MzgsNiArNzExOSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkK
QEAgLTY2NTYsNiArNzEzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02Njc0LDYgKzcxNTksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9j
dW1lbnRBcmd1bWVudAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6d2l0aERvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlm
IChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02Njk2LDYgKzcxODMsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVy
RG9jdW1lbnRBcgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
d2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9N
V2luZG93KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
KmNhbGxGcmFtZSkuZG9jdW1lbnQoKTsKICAgICBpZiAoIWluY3VtYmVudERvY3VtZW50KQpAQCAt
NjcxNiw2ICs3MjA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3UKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CiAgICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoaW5jdW1iZW50
RE9NV2luZG93KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgKmNhbGxGcmFtZSkpOwpAQCAtNjczMyw2ICs3MjI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBvcHQgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNjc1Myw2ICs3MjQ2LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvcHQg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjc3Myw2ICs3
MjY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFs
QXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02Nzk4LDYgKzcy
OTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02ODI2LDYg
KzczMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9
IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
Njg0Niw2ICs3MzQ3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmlu
ZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBj
b252ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTY4NjYsNiArNzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9u
YWxBdG9tU3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBu
dWxsQXRvbSgpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg4Niw2ICs3Mzkx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1
ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gImZvbyJfcyA6IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNjkwNiw2ICs3NDEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bEF0b21TdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTY5MjYsNiArNzQzNSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0g
YXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02
OTQ2LDYgKzc0NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNV
bmRlZmluZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTY2LDYgKzc0NzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1bWVudDAu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmlu
Z0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKTsKQEAgLTY5ODYsNiArNzUwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDA2LDYgKzc1MjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBz
dHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGNv
bnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNzAyNiw2ICs3NTQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bEF0b21TdHJpbmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURM
RE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAg
LTcwNDYsNiArNzU2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJ
c05hTiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAg
ICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNjYsNiArNzU4OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEZsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZl
cnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CkBAIC03MDg2LDYgKzc2MTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMbwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9w
dGlvbmFsTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmdM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxMDYs
NiArNzYzMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVy
byIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBudW1iZXIgPSBjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzEyNiw2ICs3NjU1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsVW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxNDYsNiArNzY3Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51
bWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcxNjYsNiArNzY5OSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFNlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpt
ZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlz
VW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVy
blR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTg2LDYgKzc3MjEsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5ID0gYXJn
dW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyMDYs
NiArNzc0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElE
TEJvb2xlYW4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+
OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNzIyNiw2ICs3NzY1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MjQ2LDYgKzc3
ODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0
PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcy
NjYsNiArNzgwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxPYmplY3QiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8g
YSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExPYmplY3Q+
OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETE9iamVjdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKSk7CkBAIC03Mjg2LDYgKzc4MzEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxOdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0
aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0
aW9uYWxOdWxsYWJsZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczMDYsNiArNzg1Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbCIsICJU
ZXN0T2JqIik7IH0pOwpAQCAtNzMyNiw2ICs3ODc1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
WFAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdp
dGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZl
ciIpOyB9KTsKQEAgLTczNDYsNiArNzg5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0
aW9uYWxSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOwogICAgIGF1dG8gcmVjb3JkID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/
IFdURjo6bnVsbG9wdCA6IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmlu
ZywgSURMTG9uZz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtNzM2Niw2ICs3OTE5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUHIKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFByb21p
c2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gcHJvbWlzZSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxscHRy
IDogY29udmVydDxJRExQcm9taXNlPElETFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCkpOwpAQCAtNzM4Niw2ICs3OTQxLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxi
YWNrQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNzQwOCw2ICs3OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWMKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC03NDMzLDYgKzc5OTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50
ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmciKTsgfSk7CkBAIC03NDUzLDYgKzgwMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTc0NzUsNiArODAzOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFjCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC03NTAwLDYgKzgwNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tGdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7IH0pOwpAQCAt
NzUyMCw2ICs4MDg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnIik7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dE11c3RCZU9iamVjdEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJh
Y2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFy
ZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwpAQCAtNzUzOSw2ICs4MTA4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdp
dGhDYWxsYmFja0FyZyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc1NjEsNiArODEzMiw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRp
dGlvbmFsTWV0aG9kMUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbE1ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmNvbmRp
dGlvbmFsTWV0aG9kMSgpKSkpOwogfQpAQCAtNzU3OSw2ICs4MTUyLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9u
YWxNZXRob2QyQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmNvbmRpdGlvbmFsTWV0aG9kMiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1l
dGhvZDIoKTsKQEAgLTc1OTksNiArODE3NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbE1l
dGhvZDMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2QzKCk7CkBAIC03
NjE4LDYgKzgxOTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwpAQCAt
NzYzNiw2ICs4MjE1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2QKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFy
ZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAg
LTc2NTQsNiArODIzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBh
dXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzY2OSw2ICs4MjUyLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc2ODQsNiArODI2OSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGNhbGxiYWNrID0g
Y29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
b3ZlcmxvYWRlZE1ldGhvZCIpOyB9KTsKQEAgLTc2OTksNiArODI4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q2Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92
ZXJsb2FkZWRNZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKQEAgLTc3MTQsNiArODMwMyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5QXJnID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3MjksNiArODMyMCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q4Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRo
b2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc3NDQsNiArODMzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q5Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpv
dmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PFdpbmRvd1Byb3h5Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldp
bmRvd1Byb3h5Iik7IH0pOwpAQCAtNzc1OSw2ICs4MzU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEwQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJs
b2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElE
TERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBA
IC03Nzc0LDYgKzgzNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCbwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3ODksNiArODM4OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNzgwNCw2ICs4NDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm8KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYmxv
YkFyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPEJsb2I+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTc4MTgsNiArODQyMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RPdmVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QiKTsK
ICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7CiAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTNCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVk
VGhpcykpKTsKQEAgLTc4NzAsNiArODQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
Nzg4OCw2ICs4NDk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RX
aXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc5MDYsNiArODUxNSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjpt
aW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3ND
b3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtNzkzNyw2ICs4NTQ4LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBv
YmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURM
SW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CkBAIC03OTUyLDYgKzg1NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzk2Nyw2
ICs4NTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAg
IGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc5OTIsNiArODYwOSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxU
ZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CkBAIC04MDA3LDYgKzg2MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3Zl
cmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3Ry
aW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
QEAgLTgwMjIsNiArODY0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CiAgICAgc2l6
ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rp
bmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgwNDks
NiArODY3Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1
aXNoaW5nVW5pb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODA2Nyw2ICs4NjkyLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAg
ICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0
T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CkBAIC04MDg1LDYgKzg3MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7CiAgICAg
ICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpOwpAQCAtODEwNyw2ICs4NzM2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51
bGxhYmxlVW5pb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxMjIsNiAr
ODc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBh
dXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwpAQCAtODEzNyw2ICs4NzcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOwogICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5n
dWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MTY0LDYg
Kzg3OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpl
Y3RPck5vZGUgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZl
cnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxNzksNiArODgxNiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE9wdGlvbmFsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJ
RExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODE5
NCw2ICs4ODMzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWwKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1p
bjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50ID09IDApIHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMpKSk7CkBAIC04MjIyLDYgKzg4
NjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25E
aXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwpAQCAtODI0MCw2ICs4ODgz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQ
YXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJm
YWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9u
RGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CkBAIC04MjU4LDYgKzg5
MDMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdp
dGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiAgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwog
ICAgIGlmIChhcmdzQ291bnQgPT0gMikgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5n
QXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTgyODEsNiArODkyOCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uQ2xhc3NNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpjbGFzc01ldGhvZCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIFRlc3RPYmo6OmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTgyOTcsNiArODk0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoT3B0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjbGFz
c01ldGhvZFdpdGhPcHRpb25hbCIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJnID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJu
VHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVy
dDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAt
ODMxNCw2ICs4OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KEoKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kMiIpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xh
c3NNZXRob2QyKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAt
ODMyOSw2ICs4OTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTgzNDYsNiArOTAwMSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpvdmVybG9hZGVkTWV0aG9kMSIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdHlwZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CkBAIC04MzY0LDYgKzkwMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxTwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9
IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlm
IChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgzOTEsNiArOTA1MCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aENsYW1wCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtODQxNiw2ICs5MDc3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xh
bXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0
aG9kV2l0aENsYW1wT25PcHRpb25hbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMQ2xhbXBB
ZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkp
OwpAQCAtODQzNiw2ICs5MDk5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9y
Y2VSYW5nZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODQ2MSw2
ICs5MTI2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0
aW9uYWwiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURM
TG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04NDgx
LDYgKzkxNDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNl
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NTAzLDYgKzkxNzIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODUyMyw2ICs5MTk0LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlz
dEZ1bmN0aW8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmRv
bVN0cmluZ0xpc3RGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtODU0Myw2ICs5MjE2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmEKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhPcHRpb25h
bFVuaW9uUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIG9wdGlvbmFsVW5pb24gPSBhcmd1bWVudDAudmFsdWUoKS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURM
U2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8SURMVW5yZXN0
cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmlu
ZywgSURMU2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtODU2Myw2ICs5MjM4LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEFuZFdpdGhvdXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODU4OCw2ICs5MjY1LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWRCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmdldEVsZW1lbnRCeUlkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC04NjA4LDYgKzkyODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHkoSgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Z2V0U1ZHRG9jdW1lbnQiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1l
bnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSkpOwogfQpAQCAtODYyMyw2ICs5
MzA0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29udmVydDFCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQxIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC04NjQ1LDYgKzkzMjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpK
UwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29udmVydDIi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg2NjcsNiArOTM1Miw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQzQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpjb252ZXJ0MyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwpAQCAtODY4OSw2ICs5Mzc2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6SlMKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQ0Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NzExLDYgKzk0MDAsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NdXRhYmxlUG9pbnRGdW5jdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1
bmN0aW9uKCkpKSk7CiB9CkBAIC04NzI2LDYgKzk0MTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VCb2R5KEpTQzo6
SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YmFuYW5h
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmJhbmFuYSgpOwpAQCAtODc0Myw2ICs5NDM2LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnZhcmlhZGljU3RyaW5nTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC04NzY3LDYgKzk0NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1l
dGhvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dmFyaWFk
aWNEb3VibGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTg3OTEsNiArOTQ4OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp2YXJpYWRpY05vZGVNZXRob2QiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg4MTUsNiArOTUxNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZhcmlhZGljVW5pb25NZXRob2RCCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjp2YXJpYWRpY1VuaW9uTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC04ODM5LDYgKzk1NDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpTQzo6SlNHbG9i
YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04ODY0LDYgKzk1NjcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6dGVzdFByb21pc2VGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwpAQCAtODg4MSw2ICs5NTg2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODkwMyw2ICs5NjEwLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNl
KSkpOwpAQCAtODkyMCw2ICs5NjI5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTg5NDAsNiArOTY1
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byBhID0gY29udmVydDxJRExGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKQEAgLTg5NTUsNiArOTY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byByZXF1ZXN0ID0gY29udmVydDxJRExJbnRl
cmZhY2U8RmV0Y2hSZXF1ZXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwpAQCAtODk3MCw2ICs5Njg1LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90
PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAx
KSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwpAQCAtODk5Myw2ICs5NzEwLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJv
bWlzZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RT
dGF0aWNQcm9taXNlRnVuY3Rpb24iKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBU
ZXN0T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05MDA5LDYgKzk3Mjgs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24i
KTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OnRlc3RTdGF0aWNQcm9taXNl
RnVuY3Rpb25XaXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTAyNSw2ICs5NzQ2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbVByb21pc2VGdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUHJv
bWlzZUZ1bmN0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBXVEZNb3ZlKHBy
b21pc2UpKSkpKTsKIH0KIApAQCAtOTAzOSw2ICs5NzYyLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljQ3Vz
dG9tUHIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RT
dGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnRlc3RTdGF0aWNDdXN0b21Qcm9t
aXNlRnVuY3Rpb24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFdURk1vdmUocHJv
bWlzZSkpKSkpOwogfQogCkBAIC05MDUzLDYgKzk3NzgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJu
c093bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdEN1
c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUmV0dXJu
c093blByb21pc2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7
CiB9CiAKQEAgLTkwNjcsNiArOTc5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmV0dXJuc093blBy
b21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJldHVybnNPd25Qcm9taXNl
QW5kUHJvbWlzZVByb3h5RnVuY3Rpb24oKSkpKTsKIH0KQEAgLTkwODMsNiArOTgxMiw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQxCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjb25kaXRpb25hbE92ZXJsb2FkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtOTEwMSw2ICs5ODMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
ICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTkxMjAsNiArOTg1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zlcmxv
YWRPCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBzaXplX3QgYXJn
c0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hp
bmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtOTE0Nyw2ICs5ODgy
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8g
c3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CkBAIC05MTYzLDYgKzk5MDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92
ZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2luZ2xlQ29u
ZGl0aW9uYWxPdmVybG9hZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTE4MCw2ICs5OTE5LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZCIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAg
ICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC05MjAzLDYgKzk5NDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0YWNoU2hhZG93
Um9vdCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtOTIyNSw2ICs5
OTY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJh
bWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNDcsNiAr
OTk5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpidWZmZXJTb3VyY2VQYXJhbWV0ZXIiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNjksNiArMTAwMTYsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdh
Y3lDYWxsZXJOYW1lZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6bGVnYWN5Q2FsbGVyTmFtZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTkyOTEsNiArMTAwNDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdFJldHVyblZhbHVl
T3B0aW1pemF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05
MzE2LDYgKzEwMDY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlv
bldpdGhFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkzNDEsNiArMTAwOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dp
bmRvd0Z1bmN0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dGdW5jdGlvbigpOwpAQCAtOTM1OCw2ICsxMDExMyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
bHlFeHBvc2VkCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwuY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKCk7CkBAIC05Mzc1LDYgKzEw
MTMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3Jr
ZXJGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QW5kV29ya2VyRnVuY3Rpb24oKTsKQEAgLTkzOTIsNiArMTAxNTEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0
cmluZ0JvZHkoSlNDOjpKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0
cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmNwcAppbmRleCA0YjRiYTczODNmYjkwNWYyZTM3OTkzYWI5OTMwYTFmMDUxMGU2
M2YyLi45ZWVhYjg3NGJlNjQ3MDg3NzY2MTQ3NzdiZDcxMjY0ODQ0YTBhNWFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRp
b24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
QEAgLTIwNyw2ICsyMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpub25Db25k
aXRpb25hbE9wZXJhdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5ub25Db25kaXRpb25hbE9w
ZXJhdGlvbigpOwpAQCAtMjI3LDYgKzIzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uQ29uCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWw6OmNvbmRpdGlvbmFsT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5kZXgg
M2QwNzkzMjBmNDk0NjVhOTY5YTY4ZGY0ZGQ1NTFjOGFjNDIzNzI3YS4uZjdkMGFhOWU3OGM5ODNk
NTIzYTI0MmNjZWU1YmFmNjE4ZjI0NDIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9u
UHJvdG90eXBlLmg+CkBAIC0yNDQsNiArMjQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPdmVycmlkZUJ1aWx0aW5z
OjpuYW1lZEl0ZW0iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKaW5kZXggMzI0NDNmNTI2YmU0
M2IyNDUzOThkNDAwNzI1OGI2MjZjNzhmNmM0Mi4uODgxMzZjOGVjMzU0YWM4YTgwYjE3MTBlOWE5
YmM1NThhZmU4NWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CkBAIC0yODMsNiArMjg1LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudDo6cHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlz
ZTxJRExBbnk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5wcm9taXNlKCkpKSk7CiB9CkBAIC0yOTYsNiArMzAwLDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbkdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudDo6cmVhc29uIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhc29uKCkp
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKaW5kZXggOGM1OTE3YTM2MWJmNGNi
YWRiNzBlZjgzNGNjMzRmNjEwYjcxNmY0Zi4uZWU3ZGYyNDQyZGY0ODYyNzg5NjIwOWY4ZTNiNGFh
OTViODhkZGJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcApAQCAtMzksNiArMzks
OCBAQAogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDMsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0U2VyaWFsaXphdGlvbjo6Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtMjU0LDYgKzI1OCw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
ZXJpYWxpemF0aW9uOjpzZXRGaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3Miw2ICsyNzgsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0
ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFs
aXphdGlvbjo6c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25n
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0yODUsNiArMjkzLDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNl
dFNlY29uZExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzAzLDYgKzMxMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjp0aGlyZFVuc2VyaWFs
aXphYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8
VGVzdEV4Y2VwdGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkp
KTsKIH0KQEAgLTMxNiw2ICszMjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0VGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2Vw
dGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6
YXRpb24iLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0
LDYgKzM0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTM0Nyw2ICszNjMsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZVNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlv
bjo6c2V0Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY1LDYgKzM4Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
ZmlmdGhMb25nQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNzgsNiArMzk4LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6
YXRpb246OnNldEZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zOTYsNiArNDE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNpeHRo
VHlwZWRlZkF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRG91YmxlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtNDA5LDYgKzQzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRTaXh0aFR5
cGVkZWZBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC00MjcsNiArNDUzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXQKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldmVudGhEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJm
YWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NDAsNiArNDY4LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNl
cmlhbGl6YXRpb246OnNldFNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9u
IiwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQ1OCw2ICs0ODgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3MSw2ICs1MDMsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXph
dGlvbjo6c2V0RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJlaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQ4OSw2ICs1MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6bmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJs
ZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01
MDIsNiArNTM4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25O
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC01MjAsNiArNTU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MzMsNiAr
NTczLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTU1MSw2ICs1OTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTY0
LDYgKzYwOCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTU4Miw2ICs2MjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcgogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6dHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01OTUsNiArNjQz
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKaW5kZXggY2EwZWVmMTM1NWUyNDdhMDA4NzY3MjJkODcw
ZjNlMGU2OTE3Mjc4OC4uZjE0ZWViMmI3NDEyMzZjYjFkMGVjODg2OGFjYzVlN2QxOTk5ZDUwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCkBAIC0zMCw2ICsz
MCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXpl
ci5oPgpAQCAtMTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6aW5oZXJpdExv
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpKTsK
IH0KQEAgLTIwMyw2ICsyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsbwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNldEluaGVyaXRM
b25nQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAppbmRl
eCAzMmFmYzM2YmM3MzhmNzlkMzAyYTY3YzJjOTcxZmY4YWEyYzVhZDc2Li4zODNjNDNhODNkY2Q4
MzA5ODBjODEyMWE0YzBjMjI5NjZlMjExNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAtMTkzLDYgKzE5
NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpmaW5hbExvbmdBdHRyaWJ1dGVGb28i
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKSk7CiB9CkBAIC0yMDYs
NiArMjEwLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNldEZpbmFsTG9uZ0F0dHJp
YnV0ZUZvbyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0y
MjQsNiArMjMwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmFsTG9uZ0F0dHJp
YnV0ZUJhciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpKTsKIH0K
QEAgLTIzNyw2ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2V0RmluYWxM
b25nQXR0cmlidXRlQmFyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKaW5kZXggYzE1NTY3ZTI0NjMxMjkzNDNkMTkwYjVhYTQ1NDE1NmViODQ2MDEzNC4u
NGJlZTJjZGFhZjQ4MmZiNWY4MmE5YWFmZTk1MzMyODVhOGYwYzEyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTM3
LDYgKzM3LDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0y
MTcsNiArMjE5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFsdWUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZSgpKSkpOwogfQpAQCAtMjMwLDYgKzIzNCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWYWx1ZVNldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldFZhbHVlIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0yNDgsNiArMjU0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIo
SlMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6cmVhZG9ubHlWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJl
YWRvbmx5VmFsdWUoKSkpKTsKIH0KQEAgLTI2MSw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0
ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjYWNoZWRWYWx1ZSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZh
bHVlID0gdGhpc09iamVjdC5tX2NhY2hlZFZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2Fj
aGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjc5
LDYgKzI4OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldENhY2hlZFZh
bHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTcsNiArMzA5LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRz
R2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6cG9ydHMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0
cygpKSkpOwogfQpAQCAtMzEwLDYgKzMyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0CiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6OmNhY2hlZFJlYWRvbmx5VmFsdWUiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpA
QCAtMzMwLDYgKzM0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpmdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzUy
LDYgKzM3MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5j
dGlvblJldHVybmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9u
UmV0dXJuaW5nKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAxNTEzZmQ4
ZmFkNmViMjNiYzVhZmRiZmU5MjVmNjFjZmM4NDNlODQ3Li43Y2QwMGEyNWY5YTJiNGY1MWIzZmRl
NGNjNTEyN2ZkYmJkMDEzMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTI5LDYg
KzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KQEAgLTE5MCw2ICsxOTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyOjp0b1N0
cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwudG9TdHJpbmcoKSkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCmlu
ZGV4IGQwMTdkZmI0OTY3MWU3ZDdmMGIwYjU5MzMwYmU4NzYwNjMxNTg0NWEuLjU0Y2ZiZjc5NjNj
OTY3MjM1YmQ5NWNhNzZjM2RhZTA2MDVkZGQzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcApAQCAtMjksNiArMjksOCBAQAog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5o
PgpAQCAtMTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b246OnRvU3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCmlu
ZGV4IDNmNjI4NzYzOWY0MjhiODMwY2JmNDNlMzE2NjA2ZmU4OTZlZjE2NzcuLjUyZmNiNWYxMmQ2
NzExNzEwNGExZmQwYzVhYjk3Yjk5MWYyNmRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRl
ICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5
Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZp
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIw
Nyw2ICsyMTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZp
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
cy5jcHAKaW5kZXggYjg2ZjEyZjkxNzUzOWMyZDUzOWQ1MDljOWFhODQ4NDJmOWZhMjZhMy4uMDg2
NTI5N2U4OWQ5NzRhNjFlYWJlOGNiNjhiMDljYTkyNDFlMDA0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKQEAg
LTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJv
dG90eQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YWx0ZXJuYXRlSWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSkpOwogfQpAQCAtMjA3LDYgKzIx
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjphbHRlcm5h
dGVJZGVudGlmaWVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlm
aWVyKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCmluZGV4IDY2NmUzNTY3ZWQ0OTg2Mzc2YmM3ZGZhZTRk
NGQyZGFjYTliMDBiNzIuLjE5ZThlNmU3MWFjYmM1ODM4MjBhY2I5YjMzMmRiODc5YzU2ZDRlNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNE
T01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkyLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZ1Byb3RvdHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnRvU3RyaW5nIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCmluZGV4IGM1MDM3ZWYz
NTFiOTU2MWZiMGMwN2YwYjM1YWJmMGRlMTAxMDc3MGMuLmU1NTM0NjE1OGUxNDgzY2FkMzZmZDVk
NjYxMmZjNjE3ZThiODhiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNs
dWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVy
LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Niw2ICsx
OTgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMSw2ICsyMTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZVByb3RvdHlwZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZpZXIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCmluZGV4IDkwMDI5YmNl
NjM4NjJlN2NmM2I4NzhmMzM5NjBiM2Q2MGYzZmY5YTQuLmNjZDFjMmViMjBlZDNkMjExYWU4Zjlj
NWExNjEyNjI1ZTg2Y2U0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTk3LDYg
KzE5OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMCw2ICsyMTQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGVJZGVudGlmaWVyU2V0dGVyKEpTR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnNldElkZW50aWZpZXIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMzAsNiArMjM2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKaW5kZXggMWQ2ODlkMjllYTAyOWI2YzZlNDcxN2JhMjFlYzZjOTgyMDUzNmI3NS4uZTMx
NTI0ZjEzYjZlZTgxNTBmMGFkZmZjZjY1MjAyZjQ1NjRmNDQzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCkBAIC00NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2Uu
aCIKICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9i
ai5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCkBAIC0zMDYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjp1bnNpZ25lZExvbmdM
b25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0
cigpKSkpOwogfQpAQCAtMzE5LDYgKzMyMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0VW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzM3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzZXJpYWxpemVkU2NyaXB0VmFs
dWUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkp
KTsKIH0KQEAgLTM1MCw2ICszNTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2VyaWFsaXplZFNjcmlwdFZh
bHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjcsNiArMzc3LDggQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OlRlc3RTdWJP
YmoiKTsKICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
QEAgLTM3OSw2ICszOTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNB
dHRyaWJ1dGVXaXRoQ2xhbXBHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcCIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFt
cCgpKSkpOwogfQpAQCAtMzkyLDYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0QXR0cmlidXRlV2l0
aENsYW1wIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdM
b25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDEwLDYgKzQyNiw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZkdldHRlcihK
U0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6YXR0
cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExD
bGFtcEFkYXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKCkpKSk7CiB9CkBAIC00MjMsNiArNDQxLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1w
SW5UeXBlZGVmU2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFR5cGVkZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDEs
NiArNDYxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291
cmNlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpidWZmZXJTb3VyY2VBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuYnVmZmVyU291cmNlQXR0cigpKSkpOwogfQpAQCAtNDU0LDYgKzQ3Niw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RU
eXBlZGVmczo6c2V0QnVmZmVyU291cmNlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJ
RExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NDcyLDYgKzQ5Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0RvbVRp
bWVTdGFtcEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6ZG9tVGltZVN0YW1wQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5kb21UaW1lU3RhbXBBdHRyKCkpKSk7CiB9CkBAIC00ODUsNiArNTEx
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpzZXREb21UaW1lU3RhbXBBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwNSw2ICs1MzMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbkZ1bmNCb2R5KEpTQzo6SgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpmdW5jIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHggPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNv
bnZlcnQ8SURMU2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CkBAIC01MjUsNiArNTU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KEoK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2hh
ZG93Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NTksNiArNTkx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RUeXBlZGVmczo6bWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NzksNiArNjEzLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVNlcXVlbmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RU
eXBlZGVmczo6bnVsbGFibGVTZXF1ZW5jZUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjAxLDYgKzYzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnNlcXVlbmNl
T2ZOdWxsYWJsZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTYyMyw2ICs2NjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZOdWxs
YWJsZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NSw2
ICs2ODUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY2Nyw2ICs3MDksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblVuaW9uQXJnQm9keShKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFR5cGVkZWZzOjp1bmlvbkFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjg5LDYgKzczMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmZ1bmNXaXRo
Q2xhbXAiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTcxNCw2ICs3
NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpmdW5jV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03MzYsNiArNzg0LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25Qb2ludEZ1bmN0aW9uQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RUeXBlZGVmczo6cG9pbnRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9pbnRGdW5jdGlvbigpKSkpOwog
fQpAQCAtNzUxLDYgKzgwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTc3MSw2ICs4
MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzkxLDYgKzg0NSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0VHlwZWRlZnM6OmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04MTEsNiArODY3LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RUeXBlZGVmczo6bWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhv
ZFdpdGhFeGNlcHRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQxYzlmZWM2MWUyOGJh
YzM4N2NjYzdiOWIzM2Y1ZmQwZDhmMzQxZTIuLmUzMDkyYjdlOWY1MjZlODIxNjA4ZjkzOTdmMmU1
ZDYzYmZkMjlkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02MzMsNyArNjMzLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCgpIGNvbnN0OwotICAgIE9wdGlvbmFs
PEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0OworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBm
cmFtZUlEKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+
IGZyYW1lSUQoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgLy8gdG8gZ2V0IHZpc3VhbGx5IG9yZGVy
ZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQKICAgICB2b2lkIHNldFZpc3VhbGx5T3Jk
ZXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjJkNWFkODJlNjg5YzgzZjBlODNkMzdiYjdhM2IxOTI0NjI4YzRkMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5jcHAKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkV4ZWN1dGlvblN0YWNrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5n
IEV4ZWN1dGlvblN0YWNrOjp0b0pTT05TdHJpbmcodWludDY0X3QgZnJhbWVJRCkKK3sKKyAgICBp
ZiAoZG9jdW1lbnRJZFVSTE1hcC5maW5kKGZyYW1lSUQpID09IGRvY3VtZW50SWRVUkxNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgYXV0byBkb2N1bWVudFVSTCA9IGRv
Y3VtZW50SWRVUkxNYXAuZ2V0KGZyYW1lSUQpOworCisgICAgYXV0byBvYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJUb3BMZXZlbERvbWFpbiIs
IHJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiVG9w
TGV2ZWxVUkwiLCBkb2N1bWVudFVSTC5zdHJpbmcoKSk7CisgICAgb2JqZWN0LT5zZXRJbnRlZ2Vy
KCJGcmFtZUlEIiwgZnJhbWVJRCk7CisgICAgYXV0byBzY3JpcHRFeGVjdXRpb24gPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgCisgICAgaWYgKGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3Vt
ZW50cy5maW5kKGZyYW1lSUQpID09IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5lbmQo
KSkgeworICAgICAgICBvYmplY3QtPnNldEFycmF5KCJTY3JpcHRFeGVjdXRpb24iLCBXVEZNb3Zl
KHNjcmlwdEV4ZWN1dGlvbikpOworICAgICAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmco
KTsKKyAgICB9CisgICAgCisgICAgYXV0byBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudCA9
IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5nZXQoZnJhbWVJRCk7CisgICAgCisgICAg
Zm9yIChhdXRvIHNjcmlwdFdpdGhBUElzS2V5IDogYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1l
bnQua2V5cygpKSB7CisgICAgICAgIGF1dG8gc2NyaXB0V2l0aEFQSXMgPSBhcGlzQ2FsbGVkQnlT
Y3JpcHRzSW5Eb2N1bWVudC5nZXQoc2NyaXB0V2l0aEFQSXNLZXkpOworICAgICAgICBhdXRvIGFj
Y2Vzc2VkQVBJcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNv
bnN0JiBBUElOYW1lIDogc2NyaXB0V2l0aEFQSXMpIHsKKyAgICAgICAgICAgIGF1dG8gdGVtcCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICB0ZW1wLT5zZXRJbnRlZ2VyKEFQ
SU5hbWUua2V5LCBBUElOYW1lLnZhbHVlKTsKKyAgICAgICAgICAgIGFjY2Vzc2VkQVBJcy0+cHVz
aE9iamVjdChXVEZNb3ZlKHRlbXApKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFwaUV4ZWN1
dGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0
SW50ZWdlcigiU2NyaXB0SUQiLCBzY3JpcHRXaXRoQVBJc0tleSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgPT0gZG9jdW1l
bnRJZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKQorICAgICAgICAgICAgYXBpRXhlY3V0aW9uLT5z
ZXRTdHJpbmcoIlNjcmlwdFVSTCIsICJVbmF2YWlsYWJsZSIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcyA9IGRvY3VtZW50SWRBbmRT
Y3JpcHRJZFVSTE1hcC5nZXQoZnJhbWVJRCk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcy5maW5kKHNjcmlwdFdpdGhBUElzS2V5KSA9PSBkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLmVuZCgpKQorICAgICAgICAgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5n
KCJTY3JpcHRVUkwiLCAiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygiU2NyaXB0VVJMIiwgZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcy5nZXQoc2NyaXB0V2l0aEFQSXNLZXkpKTsKKyAgICAgICAgfQorICAgICAg
ICBhcGlFeGVjdXRpb24tPnNldEFycmF5KCJBY2Nlc3NlZEFQSXMiLCBXVEZNb3ZlKGFjY2Vzc2Vk
QVBJcykpOworICAgICAgICBzY3JpcHRFeGVjdXRpb24tPnB1c2hPYmplY3QoV1RGTW92ZShhcGlF
eGVjdXRpb24pKTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5zZXRBcnJheSgiU2NyaXB0RXhl
Y3V0aW9uIiwgV1RGTW92ZShzY3JpcHRFeGVjdXRpb24pKTsKKyAgICByZXR1cm4gb2JqZWN0LT50
b0pTT05TdHJpbmcoKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRp
b25TdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYTcwMTZlOWU5MjRmNjZhZjIzMDNlYzUyMzlmZGU1MWE2
MzJkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9u
U3RhY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IEV4ZWN1dGlvblN0YWNrIHsKKyAgICBleHBsaWNpdCBFeGVjdXRpb25TdGFjayhjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorICAgICAgICA6IHJlZ2lzdHJhYmxlRG9tYWluIHsg
ZG9tYWluIH0KKyAgICB7CisgICAgfQorCisgICAgRXhlY3V0aW9uU3RhY2soKSA9IGRlZmF1bHQ7
CisgICAgRXhlY3V0aW9uU3RhY2soY29uc3QgRXhlY3V0aW9uU3RhY2smKSA9IGRlbGV0ZTsKKyAg
ICBFeGVjdXRpb25TdGFjayYgb3BlcmF0b3I9KGNvbnN0IEV4ZWN1dGlvblN0YWNrJikgPSBkZWxl
dGU7CisgICAgRXhlY3V0aW9uU3RhY2soRXhlY3V0aW9uU3RhY2smJikgPSBkZWZhdWx0OworICAg
IEV4ZWN1dGlvblN0YWNrJiBvcGVyYXRvcj0oRXhlY3V0aW9uU3RhY2smJikgPSBkZWZhdWx0Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvSlNPTlN0cmluZyh1aW50NjRfdCAvKiBGcmFt
ZUlEICovKTsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOworCisg
ICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIEZyYW1lSUQg
YW5kIERvY3VtZW50IFVSTC4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBVUkw+IGRvY3VtZW50SWRV
UkxNYXA7CisgICAgCisgICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyBhIHN0YWNrIG9mIGV4
ZWN1dGluZyBzY3JpcHRzIGluIGVhY2ggZG9jdW1lbnQuCisgICAgLy8gQ3VycmVudGx5LCBpdCBv
bmx5IGNhcHR1cmVzIGNsYXNzaWMgc2NyaXB0cy4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0
b3I8dWludDY0X3Q+PiBleGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHM7CisgICAgCisgICAgLy8g
VGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIEZyYW1lSUQsIFNjcmlw
dElELCBhbmQgU2NyaXB0IFVSTHMuCisgICAgSGFzaE1hcDx1aW50NjRfdCwgSGFzaE1hcDx1aW50
NjRfdCwgU3RyaW5nPj4gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwOworICAgIAorICAgIC8v
IFRoaXMgSGFzaE1hcCBtYWludGFpbnMgdGhlIEFQSXMgY2FsbGVkIGJ5IGEgc2NyaXB0IGluIGEg
ZG9jdW1lbnQuCisgICAgLy8gSGFzaE1hcDxGcmFtZUlELCBIYXNoTWFwPFNjcmlwdElELCBIYXNo
Q291bnRlZFNldDxDb3VudE9mQVBJTmFtZXM+Pj4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNo
TWFwPHVpbnQ2NF90LCBIYXNoQ291bnRlZFNldDxTdHJpbmc+Pj4gYXBpc0NhbGxlZEJ5U2NyaXB0
c0luRG9jdW1lbnRzOworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCmluZGV4IDY3ZmJmZmMyZDIwYWIyZmQ4YmE1NmE4ZGZhNGQ0
YWU3OGE5NWViMjAuLjc3Y2ZiZTgxYmNkNTU1MGNlNDU5Zjg0OTlkNDJjMjY5MzJkZDc1OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCkBAIC0yOCw2
ICsyOCwxMCBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRG9jdW1lbnQ7CkBAIC01Nyw2ICs2MSwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbG9nU3Vi
cmVzb3VyY2VMb2FkaW5nRm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgLyogZmly
c3RQYXJ0eURvbWFpbiAqLywgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIC8qIHRoaXJkUGFydHlE
b21haW4gKi8sIGJvb2wgLyogc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gKi8pIHsgfQogCisg
ICAgdmlydHVhbCB2b2lkIHB1c2hBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmLCBjb25zdCB1
aW50NjRfdCAvKiBzY3JpcHRJRCAqLywgY29uc3QgU3RyaW5nJiAvKiBzY3JpcHRVUkwgKi8pIHsg
fQorICAgIHZpcnR1YWwgdWludDY0X3QgcG9wQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50Jikg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgdWludDY0X3QgcGVla0FjdGl2ZVNjcmlwdChjb25z
dCBEb2N1bWVudCYpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBwZWVrU2NyaXB0
RXhlY3V0aW9uU3RhY2soY29uc3QgRG9jdW1lbnQmKSB7IHJldHVybiB7IH07IH0KKworICAgIHZp
cnR1YWwgdm9pZCBsb2dBY2Nlc3NlZEFQSXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0
cmluZyYgLyogYXBpTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGVla0FjY2Vzc2Vk
QVBJcyhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsgfQorCiAgICAgdmlydHVhbCBTdHJp
bmcgc3RhdGlzdGljc0ZvclVSTChjb25zdCBVUkwmKSB7IHJldHVybiB7IH07IH0KICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBjbGVhclN0YXRlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNw
cAppbmRleCBlMjNjNzkxNzJhNTg5YjdlNjg3ZTcwYTg2MGI0ODVlYmVlNGZjNGRjLi5lNDEzY2Q4
Y2FjZjJmZDZlY2E3NjQ5ZjM4OTU0MDg5ZTBlZDIyZDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5jcHAKQEAgLTk4LDYgKzk4LDE3IEBAIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKK0V4ZWN1dGlvblN0YWNrJiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5zdXJl
RXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc0VwaGVtZXJhbCgpKTsKKworICAg
IHJldHVybiBtX2V4ZWN1dGlvblN0YWNrTWFwLmVuc3VyZShkb21haW4sIFsmZG9tYWluXSB7Cisg
ICAgICAgIHJldHVybiBFeGVjdXRpb25TdGFjayhkb21haW4pOworICAgIH0pLml0ZXJhdG9yLT52
YWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzY2hlZHVs
ZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuaXNFbXB0eSgpKSB7CkBAIC0yNjEsNiArMjcyLDE5NSBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnB1c2hBY3Rp
dmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCB1aW50NjRfdCBzY3JpcHRJ
RCwgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisKKyAgICBh
dXRvIGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKyAgICBhdXRv
JiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21h
aW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9KTsKKyAgICAKKyAgICAvLyBS
ZWdpc3RlciBzY3JpcHQgaWQgd2l0aCBzY3JpcHQgdXJsIGZvciBlYWNoIGZyYW1lLgorICAgIGlm
IChleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZmluZChmcmFtZUlE
KSAhPSBleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZW5kKCkpIHsK
KyAgICAgICAgYXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzID0gZXhlY3V0aW9uU3RhY2su
ZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIC8vIFdl
IHVzZSBIYXNoTWFwLmFkZCBoZXJlIGJlY2F1c2UgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzY3Jp
cHQgVVJMIGlzIG5vbmUgKGluIGNhc2Ugb2YgbWljcm90YXNrcykuCisgICAgICAgIC8vIEhhc2hN
YXAuYWRkIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGV4aXNpdG5nIHNjcmlwdCBVUkwgZG9lcyBub3Qg
Z2V0IG92ZXJ3cml0dGVuLgorICAgICAgICBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzLT52YWx1
ZS5hZGQoc2NyaXB0SUQsIHNjcmlwdFVSTCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAg
ICAgIEhhc2hNYXA8dWludDY0X3QsIFN0cmluZz4gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMczsK
KyAgICAgICAgZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcy5zZXQoc2NyaXB0SUQsIHNjcmlwdFVS
TCk7CisgICAgICAgIGV4ZWN1dGlvblN0YWNrLmRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5z
ZXQoZnJhbWVJRCwgV1RGTW92ZShkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzKSk7CisgICAgfQor
ICAgIAorICAgIGlmIChleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMu
ZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVu
dHMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9
IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQp
OworICAgICAgICBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUuYXBwZW5kKHNj
cmlwdElEKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8dWludDY0
X3Q+IGV4ZWN1dGluZ1NjcmlwdHNTdGFjazsKKyAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNr
LmFwcGVuZChzY3JpcHRJRCk7CisgICAgICAgIGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1Njcmlw
dHNJbkRvY3VtZW50cy5zZXQoZnJhbWVJRCwgV1RGTW92ZShleGVjdXRpbmdTY3JpcHRzU3RhY2sp
KTsKKyAgICAgICAgCisgICAgICAgIGV4ZWN1dGlvblN0YWNrLmRvY3VtZW50SWRVUkxNYXAuc2V0
KGZyYW1lSUQsIGRvY3VtZW50LnVybCgpKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShkb2N1bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdElEKTsKKyAgICBVTlVTRURfUEFS
QU0oc2NyaXB0VVJMKTsKKyNlbmRpZgorfQorCit1aW50NjRfdCBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cG9wQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBp
ZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBFTkFCTEUoV0VCX0FQ
SV9TVEFUSVNUSUNTKQorICAgIGF1dG8gZnJhbWVJRCB7IGRvY3VtZW50LmZyYW1lSUQoKS0+dG9V
SW50NjQoKSB9OworCisgICAgYXV0byYgZXhlY3V0aW9uU3RhY2sgPSBlbnN1cmVFeGVjdXRpb25T
dGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJs
KCkgfSk7CisgICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50
cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3Vt
ZW50cy5lbmQoKSkgeworICAgICAgICBhdXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9y
ID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJ
RCk7CisKKyAgICAgICAgaWYgKCFleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUu
aXNFbXB0eSgpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdGVtcCA9IGV4ZWN1dGluZ1NjcmlwdHNT
dGFja0l0ZXJhdG9yLT52YWx1ZS5sYXN0KCk7CisKKyAgICAgICAgICAgIGlmIChleGVjdXRpbmdT
Y3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGV4
ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5yZW1vdmUoZnJhbWVJRCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNr
SXRlcmF0b3ItPnZhbHVlLnJlbW92ZUxhc3QoKTsKKworICAgICAgICAgICAgcmV0dXJuIHRlbXA7
CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwordWludDY0X3QgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnBlZWtBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlm
IChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gMDsKKworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgYXV0byBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJ
bnQ2NCgpIH07CisKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0
YWNrRm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwo
KSB9KTsKKyAgICBpZiAoZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRz
LmZpbmQoZnJhbWVJRCkgIT0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1l
bnRzLmVuZCgpKSB7CisgICAgICAgIGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3Ig
PSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlE
KTsKKyAgICAgICAgaWYgKCFleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9y
LT52YWx1ZS5sYXN0KCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQp
OworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
K3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworI2lmIEVO
QUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFi
bGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0g
ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFp
bik7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJSZWdpc3RyYWJsZSBkb21haW46ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKHJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGZvciAoYXV0byBrZXkgOiBleGVjdXRpb25TdGFj
ay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMua2V5cygpKSB7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiRnJhbWUgSUQ6ICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJp
bmc6Om51bWJlcihrZXkpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgICAiKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTY3JpcHQgU3RhY2s6IFsiKTsKKyAgICAg
ICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlvblN0YWNrLmV4
ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGtleSk7CisKKyAgICAgICAgZm9yIChhdXRv
IGNvbnN0JiBleGVjdXRpbmdTY3JpcHQgOiBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+
dmFsdWUpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGV4ZWN1
dGluZ1NjcmlwdCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLCIpOwor
ICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXSIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiXG4iKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICByZXR1cm4geyB9Owor
I2VuZGlmCit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0FjY2Vzc2VkQVBJ
cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcm
IGFwaU5hbWUpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGF1dG8qIGNvbnRleHQgPSBK
U0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgCisgICAgaWYgKCFVTkxJS0VMWSghY29udGV4dCkp
IHsKKyAgICAgICAgCisgICAgICAgIGlmICghY29udGV4dC0+aXNEb2N1bWVudCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICBhdXRvIGFjdGl2ZVNjcmlwdElEID0gcGVl
a0FjdGl2ZVNjcmlwdChkb2N1bWVudCk7CisKKyAgICAgICAgaWYgKCFhY3RpdmVTY3JpcHRJRCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGZyYW1lSUQgeyBkb2N1bWVudC5m
cmFtZUlEKCktPnRvVUludDY0KCkgfTsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3Vy
ZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBk
b2N1bWVudC51cmwoKSB9KTsKKworICAgICAgICBpZiAoc3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlT
Y3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBzdGF0aXN0aWNzLmFwaXNDYWxsZWRC
eVNjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICAgICAgYXV0byBkb2N1bWVudFdp
dGhTY3JpcHRzSXRlcmF0b3IgPSBzdGF0aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3Vt
ZW50cy5maW5kKGZyYW1lSUQpOworCisgICAgICAgICAgICBpZiAoZG9jdW1lbnRXaXRoU2NyaXB0
c0l0ZXJhdG9yLT52YWx1ZS5maW5kKGFjdGl2ZVNjcmlwdElEKSAhPSBkb2N1bWVudFdpdGhTY3Jp
cHRzSXRlcmF0b3ItPnZhbHVlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY3JpcHRz
V2l0aEFQSXNJdGVyYXRvciA9IGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRvci0+dmFsdWUuZmlu
ZChhY3RpdmVTY3JpcHRJRCk7CisgICAgICAgICAgICAgICAgc2NyaXB0c1dpdGhBUElzSXRlcmF0
b3ItPnZhbHVlLmFkZChhcGlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiBhcGlzOworICAgICAgICAgICAgICAgIGFwaXMu
YWRkKGFwaU5hbWUpOworICAgICAgICAgICAgICAgIGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRv
ci0+dmFsdWUuc2V0KGFjdGl2ZVNjcmlwdElELCBXVEZNb3ZlKGFwaXMpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEhhc2hD
b3VudGVkU2V0PFN0cmluZz4+IGFwaXNFeGVjdXRpbmdJblNjcmlwdDsKKyAgICAgICAgICAgIEhh
c2hDb3VudGVkU2V0PFN0cmluZz4gYXBpczsKKyAgICAgICAgICAgIGFwaXMuYWRkKGFwaU5hbWUp
OworCisgICAgICAgICAgICBhcGlzRXhlY3V0aW5nSW5TY3JpcHQuc2V0KGFjdGl2ZVNjcmlwdElE
LCBXVEZNb3ZlKGFwaXMpKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2Ny
aXB0c0luRG9jdW1lbnRzLnNldChmcmFtZUlELCBhcGlzRXhlY3V0aW5nSW5TY3JpcHQpOworICAg
ICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKGFwaU5hbWUpOworI2VuZGlmCit9CisKK1N0cmluZyBXZWJS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyhjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBhdXRvJiBzdGF0aXN0aWNz
ID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3RyYWJsZURv
bWFpbiB7IGRvY3VtZW50LnVybCgpIH0pOworICAgIFN0cmluZyBBUElKU09OU3RyaW5nID0gc3Rh
dGlzdGljcy50b0pTT05TdHJpbmcoZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpKTsKKyAg
ICByZXR1cm4gQVBJSlNPTlN0cmluZzsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50
KTsKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJl
Y3RSZXNwb25zZSwgRmV0Y2hEZXN0aW5hdGlvbklzU2NyaXB0TGlrZSBpc1NjcmlwdExpa2UpCiB7
CiAgICAgaWYgKGlzRXBoZW1lcmFsKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5o
CmluZGV4IDE4NmZhYTEzZjY4NDI0ZDAyM2ZmZTc0YmE5NTc0ODAzZjIzZDdjODMuLjllM2MzYjAy
ZDU0ZTExNzNhNmE0YjVlNTU2Y2IxM2EyNmM2NjhhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oCkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyNpbmNsdWRlIDxXZWJDb3JlL0V4ZWN1dGlvblN0YWNrLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CkBAIC01Miw2ICs1NiwxNCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBXZWJDb3JlOjpEb2N1bWVu
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OlNjcmVlbkFQSSkgZmlu
YWw7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmdGb3JUZXN0aW5nKGNvbnN0IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluLCBjb25zdCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiYgdGhpcmRQYXJ0eURvbWFpbiwgYm9vbCBzaG91bGRTY2hlZHVsZU5v
dGlmaWNhdGlvbik7CiAKKyAgICB2b2lkIHB1c2hBY3RpdmVTY3JpcHQoY29uc3QgV2ViQ29yZTo6
RG9jdW1lbnQmLCBjb25zdCB1aW50NjRfdCBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHRV
UkwpIGZpbmFsOworICAgIHVpbnQ2NF90IHBvcEFjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3JlOjpE
b2N1bWVudCYpIGZpbmFsOworICAgIHVpbnQ2NF90IHBlZWtBY3RpdmVTY3JpcHQoY29uc3QgV2Vi
Q29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKyAgICBTdHJpbmcgcGVla1NjcmlwdEV4ZWN1dGlvblN0
YWNrKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmluYWw7CisKKyAgICB2b2lkIGxvZ0FjY2Vz
c2VkQVBJcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBhcGlOYW1lKSBmaW5h
bDsKKyAgICBTdHJpbmcgcGVla0FjY2Vzc2VkQVBJcyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYp
IGZpbmFsOworCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgc2V0
U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpOwogI2VuZGlmCkBAIC03OCw2ICs5MCwxMSBA
QCBwcml2YXRlOgogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFz
dFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBXZWJDb3JlOjpFeGVjdXRpb25TdGFjayYgZW5zdXJlRXhlY3V0aW9uU3RhY2tG
b3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpOwor
ICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OkV4ZWN1dGlv
blN0YWNrPiBtX2V4ZWN1dGlvblN0YWNrTWFwOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpUaW1l
ciBtX25vdGlmaWNhdGlvblRpbWVyOwogCiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbj4gbV9kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406201</attachid>
            <date>2020-08-07 12:28:23 -0700</date>
            <delta_ts>2020-08-07 16:00:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200807142822.patch</filename>
            <type>text/plain</type>
            <size>576301</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi44ZGI0YzNiYTBmMDljMWZh
NGI5MjExYzNhZjAxYmJiYTdlYmM3Yzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMiBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKworICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwp
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5j
RXZhbCk6CisKIDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4x
NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEu
LmFkNjM0MjUxOTg1ODcwOTYwOTdiYWY4NTgyMGQ2ZjY4YTI5ZjRjNzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOSBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+
CisKKyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGgg
ZXhlY3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdl
YiBBUElzLiAKKyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNj
cmlwdHMsIHRoYXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2Vz
IHRvIHRoZSByZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFk
ZGVkIGxhdGVyLiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3Rl
ckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93QmFzZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFz
ZS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1
dGVHZXR0ZXJCb2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRl
ckJvZHlEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRp
b24pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnB1c2hBY3RpdmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21l
IG1vcmUgQW5pbWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMy
NmI3YTcyZWYzYTkzMTVjMTlkNTcuLmM2ZDVjNGY5NTEyZDBjZDVhMWQ1ZDMyMzUwNmE0OWExNWU0
NzA2ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDcgIFVtYXIgSXFiYWwg
IDx1aXFiYWxAYXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQg
dGhlaXIgbGlua2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2
ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWN0aXZlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBhbGwgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0
ZjA5MDIzYjg3YWVhMjdiMDQyMzYzOWUuLjU2M2I2NmM5OGI2M2VkNDkzMmFlMDU0OTMxNDgzYzMy
Nzc1YzEzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9i
YWxPYmplY3QubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5tbQpAQCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
SlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVs
bHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWlu
ZwogICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JD
YWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJF
dmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQKKyNlbmRpZgogfTsK
IAogdm9pZCBKU0FQSUdsb2JhbE9iamVjdDo6cmVwb3J0VW5jYXVnaHRFeGNlcHRpb25BdEV2ZW50
TG9vcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CmluZGV4IDRlN2NkYzFmN2MzMjc1NTEwZGU0OWZlNzlhZWEwYmIzYmNkMThhN2MuLmQyMWUxZTc2
M2E0MDNmNGM0NGNmZGMzNzNjZGUwMzJhODZjMDcwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTUzLDkgKzE1MywyMyBA
QCBKU1ZhbHVlIGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEVDTUFNb2RlIGVjbWFNbwogICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVj
dEV2YWxDb2RlQ2FjaGUoKS5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsZXJDb2RlQmxvY2ssIHByb2dy
YW1Tb3VyY2UsIGNhbGxlckNhbGxTaXRlSW5kZXgsIGV2YWwpOwogICAgIH0KIAorI2lmIEVOQUJM
RShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RU
YWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0KGdsb2JhbE9iamVjdCwgZXZhbC0+c291cmNlKCkucHJvdmlkZXJJRCgpLCBldmFsLT5z
b3VyY2VVUkwoKSk7CisjZW5kaWYKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJh
bWUtPnRoaXNWYWx1ZSgpOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtLmludGVy
cHJldGVyOworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzY29wZS5yZWxl
YXNlKCk7CisgICAgYXV0byB0ZW1wID0gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgIGlmIChnbG9iYWxPYmpl
Y3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNh
bGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQ
cm9taXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRlbXA7CisjZWxz
ZQogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZh
bCwgZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pKTsKKyNlbmRpZgog
fQogCiB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKQEAgLTg5Niw2
ICs5MTAsMjMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICBwcm90b0NhbGxGcmFt
ZS5pbml0KG5ld0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgdGhpc1ZhbHVlLCBh
cmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFU
SVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uU3RhcnQpIHsKKyAgICAgICAgaWYgKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24p
LT5zb3VyY2VDb2RlKCkpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24p
LT5zb3VyY2VDb2RlKCktPnByb3ZpZGVySUQoKSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlv
biktPnNvdXJjZUNvZGUoKS0+cHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOworICAgICAgICAgICAg
Ly8gV2UgY2FuIGNhbGwgdGVtcEZ1bmN0aW9uLT5zb3VyY2VDb2RlKCktPnByb3ZpZGVyKCktPnNv
dXJjZSgpLnV0ZjgoKS5kYXRhKCkgdG8gZ2V0IHRoZSBzY3JpcHQgc291cmNlLgorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpKQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksIGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVj
dXRhYmxlLT5jbGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSwgIlVuYXZhaWxhYmxlIik7CisgICAg
ICAgICAgICAvLyBUaGlzIGVsc2UgY29uZGl0aW9uIGNhdGVycyBtaWNyb3Rhc2tzLiBXZSB0cnkg
dG8gbGluayBjb2RlIGV4ZWN1dGVkIGluIG1pY3JvdGFza3MgdG8gdGhlaXIgcGFyZW50IHNjcmlw
dCBsaWtlIGFueSBvdGhlciBjYWxsYmFjay4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIG1pY3Jv
dGFza3Mgc2VlbSB0byBoYXZlIHRoZWlyIG93biBpZGVudGlmZXIgd2hlbiBhY2Nlc3NlZCB3aXRo
IChjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmVpdGhlckNvZGVCbG9jaygpLT5zb3Vy
Y2UoKS5wcm92aWRlcklEKCkpLgorICAgICAgICAgICAgLy8gV2UgY2FsbCBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpIHRvIGdldCB0aGUg
cGFyZW50IElEICh0aGUgc2NyaXB0IHRoYXQgY3JlYXRlZCB0aGUgbWljcm90YXNrKSBvZiBhIG1p
Y3JvdGFzay4KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgSlNWYWx1ZSByZXN1bHQ7
CiAgICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkwNCw5
ICs5MzUsMjEgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICByZXN1bHQgPSBqaXRD
b2RlLT5leGVjdXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewogICAgICAg
ICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbi5yYXdQb2ludGVyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisjaWYgRU5B
QkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3Qt
Pmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIEpTVmFsdWUoKSk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisjZW5kaWYKICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybihyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUzMjFlMmJkMjU4ODVh
YzYxMmMxZWViYzg1ZDMyNDRmYTVkNmE3MzcuLjJlNjU4Mjg5NDhiMTE2MTljODMwNjBmYTZjOWU4
YWUyMGUzMzA4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02NzgsNiArNjc4LDEwIEBAIGNv
bnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA9IHsKICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxs
cHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGluYXRlU3Ry
ZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyBy
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0Cisg
ICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25FbmQKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZkNjA1
M2JlYWRjNTVmNzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0Zjli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCkBAIC0zOTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpT
R2xvYmFsT2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIs
IC8vIGRlZmF1bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAg
ICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9y
RnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIC8q
IFNvdXJjZSBmb3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEzMjNm
ODg2MDQ0YTBiNjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVmMjgy
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aApAQCAtMjQwLDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgewog
CiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNQcm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0
cmVhbWluZ1B0ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2Fs
bGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3QqLCBj
b25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlv
bk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1bmN0
aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBib29s
ICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQ
dHIpKGNvbnN0IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpTR2xv
YmFsT2JqZWN0IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCmluZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIuLjQw
MmM2YTIyYzAxNTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAKQEAgLTQ5NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9i
YWxGdW5jRXZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBpZiAo
IWV2YWwpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uU3RhcnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydChnbG9iYWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+c291
cmNlVVJMKCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0uaW50
ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2JhbE9i
amVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9y
Q2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNl
bHNlCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0uaW50
ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFRoaXMoKSwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UK
aW5kZXggMDZlMzUxOWEwZDc0ZmRjYzBhMGYwMWNkYTk4NDZmZmVmMjk4OGZiYi4uNGM2MmFiZjlh
ZTExYmM0YTE1NDk4MGRmZjI5YjUzOWYzZTdiMjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC03
MTIsNiArNzEyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IGxvYWRlci9Eb2N1bWVudFdyaXRlci5oCiAgICAgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCiAgICAg
bG9hZGVyL0VtcHR5RnJhbWVMb2FkZXJDbGllbnQuaAorICAgIGxvYWRlci9FeGVjdXRpb25TdGFj
ay5oCiAgICAgbG9hZGVyL0ZldGNoT3B0aW9ucy5oCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5oCiAg
ICAgbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTA1ZWM3OWU3Njdi
Y2EwNDZiNWVhOWI5YzU4NTE1ZDkyNDI0MmEyYy4uYjYzODE1NWZlZWVlN2JhNTA3ZGFiNmU3OGU5
YmM0MTIxYmI5NDgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNiArMTQ2Nyw3IEBAIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3Bw
CiBsb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorbG9h
ZGVyL0V4ZWN1dGlvblN0YWNrLmNwcAogbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAKIGxv
YWRlci9GZXRjaElkaW9tcy5jcHAKIGxvYWRlci9Gb3JtU3RhdGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDhlZDQxYjEw
MTNiZjUzNzM2NDE4MzdjNzA0ZTE3ZjE0MDExNWQ5MC4uZDNjODVhMjc4ZDBiZjgwNWQ5NzlkNGZm
YTFmYmVlNzI4NGZhYWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE2Nyw2ICs1MTY3LDcgQEAKIAkJRjVDMDQxREIwRkZD
QTdDRTAwODM5RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBI
VE1MRGF0YUxpc3RFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjVDMDQxRTIwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9
OwogCQlGNUUwQzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRp
bWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1RTBDNjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGlt
ZUlucHV0VHlwZS5oICovOyB9OworCQlGNjQwODMzODI0QzI3Qjg5MDA4OTMyNkUgLyogRXhlY3V0
aW9uU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2NDA4MzM3MjRDMjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY5MTZDNDhFMERCNTEwRjgw
MDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZDRDgz
IC8qIEpTWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUY5RjBFRDdBMERC
NTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIwMEQx
NkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRkE2NTRBNkMx
MTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRva2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkExMTA4QUJFRDAwMjYxNUUwIC8q
IE1hdGhNTFRva2VuRWxlbWVudC5oICovOyB9OwpAQCAtMTYxMDYsNiArMTYxMDcsOCBAQAogCQlG
NUMwNDFFMjBGRkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFMaXN0RWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1OTE2NDNDNDJDMDBENkNCNjkgLyogQmFz
ZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1QTE2NDNDNDJDMDBENkNCNjkg
LyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8q
IEV4ZWN1dGlvblN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZF
IC8qIEV4ZWN1dGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY3NUEwNTlBRjE3MEQ4RkFBNUI4Q0FCRSAvKiBN
YXRoTUxTZWxlY3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hdGhNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGODIxNjI5OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjY0NTgsNiArMjY0NjEsOCBAQAogCQkJCUY1MkFENUUzMTUz
NDI0NUYwMDU5RkJFNiAvKiBFbXB0eUNsaWVudHMuY3BwICovLAogCQkJCUIyNTU5OTBEMEQwMEQ4
QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLywKIAkJCQk0MTRERURFNTFGOUZFOTE1MDA0
N0M0MEQgLyogRW1wdHlGcmFtZUxvYWRlckNsaWVudC5oICovLAorCQkJCUY2NDA4MzM2MjRDMjdC
N0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5jcHAgKi8sCisJCQkJRjY0MDgzMzcyNEMyN0I3
RTAwODkzMjZFIC8qIEV4ZWN1dGlvblN0YWNrLmggKi8sCiAJCQkJQ0VCQjhDMzIyMDc4NkRDQjAw
MDM5NTQ3IC8qIEZldGNoSWRpb21zLmNwcCAqLywKIAkJCQlDRUJCOEMzMTIwNzg2RENCMDAwMzk1
NDcgLyogRmV0Y2hJZGlvbXMuaCAqLywKIAkJCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyog
RmV0Y2hPcHRpb25zLmggKi8sCkBAIC0zMDkyMSw2ICszMDkyNiw3IEBACiAJCQkJNTFGNjQ1NjIx
RjQ1Mzk4RjAwQjU0REVEIC8qIEV4Y2VwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
MjkzODZCMjM1RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFi
bGVNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVB
NUI5MyAvKiBFeHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBF
OEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGY5M2UzZmQzMWM2
NWU0YjJlNTIyNzQ1Nzk4NzNhYWExZGM0ZjcxNmMuLjY2NWZjYmE4ZjM4NjBmMDkzYjkyZDJjZTNl
Y2MzMmJlMzQ2OTcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcApAQCAtNjEsNiArNjEsOSBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKQEAgLTg4LDYgKzkxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlIEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsK
ICAgICBudWxscHRyLAogICAgIG51bGxwdHIsCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvblN0YXJ0LAorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09y
UHJvbWlzZUV4ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogSlNET01XaW5kb3dCYXNlOjpKU0RP
TVdpbmRvd0Jhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPERPTVdpbmRv
dz4mJiB3aW5kb3csIEpTV2luZG93UHJveHkqIHByb3h5KQpAQCAtNDg3LDQgKzQ5NCwyNiBAQCB2
b2lkIEpTRE9NV2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9i
amVjdCwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQor
eworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIHsKKyAgICAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3JpcHQo
KnRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpLCBzY3JpcHRJRCwgc2Ny
aXB0VVJMKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxi
YWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kKGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvYmplY3QpCit7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOwor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCp0
aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuaAppbmRleCBlYzZkZGMxNzAyMTA4ZTk5Y2Y5OWRjMzYzMzVlMjVlMDA2NDVkODVhLi5hYWRi
OTk2NmE2ODgxZjJlNmY1MDc5Yjc3YmM2MzkyNTVhNGVjMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtODUsNiArODUsMTEgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93
KERPTVdpbmRvdyopOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzdGF0
aWMgYm9vbCByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0KGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29uc3Qg
U3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25FbmQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworI2Vu
ZGlmCisKIHByb3RlY3RlZDoKICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6U3Ry
dWN0dXJlKiwgUmVmUHRyPERPTVdpbmRvdz4mJiwgSlNXaW5kb3dQcm94eSopOwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTV2luZG93UHJveHkqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGRj
ZTczODIwYmJiZmQ5Yjk1YzU4NzlkMTNlZjY1ZWFiOThhOTA0MTguLjdmYjJiNzZkYWI2ZDljOWU4
OTE4MjlkMDEyYzUwMDg1NTlhMjhjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApAQCAtNTEsNiArNTEsMTAgQEAgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNSZW1vdGVET01XaW5kb3dCYXNlOjpzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlID0KICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAg
ICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlh
dGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIs
IC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OkpT
UmVtb3RlRE9NV2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8
UmVtb3RlRE9NV2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5j
cHAKaW5kZXggYzQ0ZjJmYjNhMGIwNWRhYWIxYThhOWUyZjg5YjUyZDg1MWViNDM2OC4uOWViMGFm
Y2NkMzA5NzdhZjljOThlMzk3NmUzMzI0ZTE2MDUyY2QzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtNjks
NiArNjksMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrZXJHbG9iYWxT
Y29wZUJhc2U6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUKICAgICAmZGVmYXVsdExhbmd1YWdl
LAogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0
YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVs
bHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRp
b25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2VyR2xvYmFsU2NvcGVC
YXNlOjpKU1dvcmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNw
cAppbmRleCBiMTRiODE1NDJkYjg4OWVjNmQyNTliYzViNzBlZjJhNTA5OWM5NmQxLi5kODJjOGIz
MWE2MWNhOGQxMmUzMTZmMzNmN2QwODlkN2ExZmNmMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTYx
LDYgKzYxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTV29ya2xldEdsb2Jh
bFNjb3BlQmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsCiAgICAgJmRlZmF1bHRMYW5ndWFn
ZSwKICAgICBudWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5z
dGFudGlhdGVTdHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51
bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0
aW9uU3RhcnQKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFj
a09yUHJvbWlzZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1dvcmtsZXRHbG9iYWxTY29w
ZUJhc2U6OkpTV29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0NjJi
OTg0YjM0ZGYyN2MyNDI5ZjdmMjExNmRhNzIyNTEzZTRkOTdhLi5lY2IxODY4OWE4N2ViN2Y0MmI3
YmMyYjg3ZGVhNjRhY2MzYzE3ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBsdWdp
blZpZXdCYXNlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRl
ICJSdW5KYXZhU2NyaXB0UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTEzOSw2
ICsxNDAsOSBAQCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
b3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogCiAgICAgUmVmPEZyYW1lPiBwcm90
ZWN0b3IobV9mcmFtZSk7CiAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgVVJMKj4gc291cmNlVVJMU2Nv
cGUobV9zb3VyY2VVUkwsICZzb3VyY2VVUkwpOworICAgIAorICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wdXNoQWN0aXZlU2NyaXB0KCpt
X2ZyYW1lLmRvY3VtZW50KCksIGpzU291cmNlQ29kZS5wcm92aWRlcklEKCksIHNvdXJjZVVSTC5z
dHJpbmcoKSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNj
cmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCks
IHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKSk7CiAKQEAgLTE1NCw5ICsxNTgsMTUgQEAgVmFsdWVP
ckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmMKICAgICAgICAgb3B0aW9uYWxEZXRhaWxzID0gV1RGTW92ZShkZXRh
aWxzKTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxEZXRhaWxzKQorICAgIGlmIChvcHRpb25h
bERldGFpbHMpIHsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQo
KSk7CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgqb3B0aW9uYWxEZXRhaWxzKTsKKyAg
ICB9CiAKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIAogICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNTVkZGM3YTc1NWI4ODU1NDhmMDEx
MDc4ODgzNmI0MGYxN2VlNWY5Li43M2U5MWFhZTQ2MzU5NzZhMjJiOGU1MTUwZWIwMzUyYjlhYTRj
Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQpAQCAtNTAxNSw2ICs1MDE1LDQyIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdl
dHRlckJvZHlEZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAgICAgCisgICAgbXkgQGFwaXNOb3RU
b0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZh
dGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3Rh
dGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50
Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZp
Y2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAg
ICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NO
YW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBs
YXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7Cisg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAg
ICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkg
JGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisK
KyAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAg
JGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7Cisg
ICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIp
IHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50
TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29u
c3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05h
bWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkg
QHRlbXAgPSAoKTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2Vu
ZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBl
LT5uYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7
CisgICAgICAgICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsIFwiJHthcGlDbGFzc05hbWV9Ojoke2FwaUZ1bmNOYW1lfSR7
YXBpQXJndW1lbnRzfVwiKTtcbiIpOworICAgIH0KKwogICAgIGlmICgkaGFzQ3VzdG9tR2V0dGVy
KSB7CiAgICAgICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3It
PldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRB
c30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICByZXR1cm4gdGhpc09iamVjdC4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KGxleGljYWxHbG9i
YWxPYmplY3QpO1xuIik7CkBAIC01MTQ5LDYgKzUxODUsNDUgQEAgc3ViIEdlbmVyYXRlQXR0cmli
dXRlU2V0dGVyQm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0
aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAibGV4aWNhbEdsb2Jh
bE9iamVjdCIpOwogCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0
dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3Mg
SlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBM
aWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBt
eSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50
KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxk
SW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJS
ZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0
cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAg
ICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3RvbVNldHRl
cigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0
b3ItPldLX3VjZmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRhdHRy
aWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRhcGlG
dW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAg
ICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1
dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5uYW1l
OworICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBs
YWNlYWJsZX0pIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7
CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZv
cndhcmRzfSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAgICAgICAg
ICAoJGFwaUZ1bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lv
bihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7Cisg
ICAgICAgICAgICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAgICRhcGlB
cmd1bWVudHMgPSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgXCIk
e2FwaUNsYXNzTmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7Cisg
ICAgfQorCiAgICAgaWYgKCRuZWVkU2VjdXJpdHlDaGVjaykgewogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC01MzY2LDYg
KzU0NDEsMzQgQEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24KIAogICAgIEdl
bmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAk
b3BlcmF0aW9uLCAiKmxleGljYWxHbG9iYWxPYmplY3QiKSB1bmxlc3MgJGdlbmVyYXRpbmdPdmVy
bG9hZERpc3BhdGNoZXI7CiAKKyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTTW9j
a1BhZ2VPdmVybGF5IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCBKU1F1aWNrVGltZVBsdWdp
blJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3Mg
SlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2Nr
Q0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpT
SW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hv
dWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7Cisg
ICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1
bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIFxuIik7CisgICAgICAgIG15ICRhcGlDbGFzc05hbWUgPSBzdWJzdHIoJGNsYXNz
TmFtZSwgMik7CisgICAgICAgIG15ICRhcGlGdW5jTmFtZSA9ICJOb25lIjsKKworICAgICAgICBp
ZiAoJGdlbmVyYXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKKyAgICAgICAgICAgICRhcGlGdW5j
TmFtZSA9ICRmdW5jdGlvbk5hbWU7CisgICAgICAgIH0gZWxzaWYgKEhhc0N1c3RvbU1ldGhvZCgk
b3BlcmF0aW9uKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0aW9uSW1wbGVt
ZW50YXRpb25OYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1l
ID0gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNz
TmFtZX06OiR7YXBpRnVuY05hbWV9XCIpO1xuIik7CisgICAgfQorCiAgICAgIyBGb3Igb3Zlcmxv
YWRzLCB3ZSBnZW5lcmF0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgaW4gdGhlIG92ZXJsb2FkIGRpc3Bh
dGNoZXIsIGluc3RlYWQgb2YgdGhlIGJvZHkgb2YgZWFjaCBvdmVybG9hZCwgYXMgcGVyIHNwZWNp
ZmljYXRpb246CiAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tY3Jl
YXRlLW9wZXJhdGlvbi1mdW5jdGlvbgogICAgIGlmICghJGlzT3ZlcmxvYWRlZCB8fCAkZ2VuZXJh
dGluZ092ZXJsb2FkRGlzcGF0Y2hlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAppbmRleCAzY2M3MzgwN2QyMjFiZGIz
ZjU1ODRiNzgyN2FkOWMwMWJjOGI2MGJmLi4yMTMyMzA4MDIxYTVhNWZmZTRkZDM5NjQzM2UzOTZm
YThhM2M4NmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNNYXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNNYXBMaWtlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9N
TWFwTGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNp
emUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjMwLDYgKzIzNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5j
dGlvbkdldEJvZHkoSlNDOjpKU0dsb2JhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJNYXBMaWtlOjpnZXQiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC0yNDksNiArMjU1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFz
Qm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1h
cExpa2U6OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI2OCw2ICsyNzYsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9k
eShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6
ZW50cmllcyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4Miw2ICsyOTIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBl
RnVuY3Rpb25LZXlzQm9keShKU0M6OkpTR2xvYgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiTWFwTGlrZTo6a2V5cyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAg
LTI5Niw2ICszMDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBM
aWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZh
bHVlc1RvTWFwTGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRo
aXMpKSkpOwogfQogCkBAIC0zMTAsNiArMzI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OmZvckVhY2giKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC0zMjksNiArMzQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uU2V0Qm9keShKU0M6OkpTR2xvYmEKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNldCIpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTM1MSw2ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsbwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6Y2xlYXIiKTsKICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICBmb3J3YXJkQ2xlYXJUb01hcExpa2UoKmxleGljYWxHbG9iYWxP
YmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzY3LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlND
OjpKU0dsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBMaWtlOjpkZWxl
dGUiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcAppbmRleCA0NDZiYTM5MDdm
NzlmOWM5OTg1NDJjODg5MTc1MmRmOTI3YWFmZDBlLi43MTRjNGEwODBjODllYWMxMGEyZTgwMDU4
MzhiZDgyYjMzZjBkYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNSZWFkT25seU1hcExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKQEAgLTMyLDYgKzMy
LDggQEAKICNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIx
MCw2ICsyMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXpl
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0
KSkpKTsKIH0KIApAQCAtMjI0LDYgKzIyOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OmdldCIp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKQEAgLTI0Myw2ICsyNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOgog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjpoYXMi
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CkBAIC0yNjIsNiArMjcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSgK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5TWFwTGlrZTo6ZW50
cmllcyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI3Niw2ICsyODYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90
b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0K
IApAQCAtMjkwLDYgKzMwMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keShKCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnZhbHVlcyIpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExB
bnk+KGZvcndhcmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJh
bWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMzA0LDYgKzMxOCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9u
Rm9yRWFjaEJvZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25s
eU1hcExpa2U6OmZvckVhY2giKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcApp
bmRleCBlYzQ0NGY1NmRmNTlmMmVmOWFiODI1YTY3MmM3MTY1NTk1MGQ3ZjQwLi44ODIyYWFmNTk1
NjdlZmJhZmRjYWZmOTBjYzE0Mzg3ODQyMDhmNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5j
cHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NU2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGlu
TmFtZXMuaD4KQEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFk
T25seVNldExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OnNpemUiKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvU2V0TGlrZShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9u
SGFzQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25s
eVNldExpa2U6OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0MSw2ICsyNDcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlv
bkVudHJpZXNCb2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9u
bHlTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExpa2UoKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAt
MjU1LDYgKzI2Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRP
bmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OmtleXMiKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3
YXJkS2V5c1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3Rl
ZFRoaXMpKSkpOwogfQogCkBAIC0yNjksNiArMjc5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5
KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6
dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yODMsNiArMjk1LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25Gb3JFYWNoQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NldExpa2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKaW5k
ZXggYWE2ZjA4ODIzYWZkMTlkN2YyYzQzZTY4OTU2MjhkMDU0ODBiNGQxMC4uOTBlYjQ4OTkxMjc0
ZDRjOTYxYzkxNjhhYTdlZjVjODdmOTkxMzRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKQEAgLTMyLDYgKzMyLDgg
QEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NU2V0TGlrZS5o
IgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERh
dGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxNCw2
ICsyMTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNTZXRMaWtlU2l6ZUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJTZXRMaWtlOjpzaXplIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2Fy
ZFNpemVUb1NldExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7CiB9CiAK
QEAgLTIyOCw2ICsyMzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNT
ZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0TGlrZTo6aGFzIik7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQ3
LDYgKzI1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJp
ZXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlz
KSkpKTsKIH0KIApAQCAtMjYxLDYgKzI2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQzo6SlNHbG9iCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjprZXlzIik7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFu
eT4oZm9yd2FyZEtleXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjc1LDYgKzI4NSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHko
SlNDOjpKU0dsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjp2
YWx1ZXMiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMQW55Pihmb3J3YXJkVmFsdWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4OSw2ICszMDEsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiU2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTMwOCw2ICszMjIsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rp
b25BZGRCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiU2V0TGlrZTo6YWRkIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzI3LDYgKzM0Myw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFy
Qm9keShKU0M6OkpTR2xvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRM
aWtlOjpjbGVhciIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGZvcndhcmRDbGVh
clRvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNDMsNiAr
MzYxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3Rv
dHlwZUZ1bmN0aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlNldExpa2U6OmRlbGV0ZSIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFj
dGl2ZURPTU9iamVjdC5jcHAKaW5kZXggNmRmYzQyZmZkY2Y0ODQ0MzMxYWU5NWRiOTc0MTc5M2Nj
OWNkNzY2My4uN2I2NzBiMTU5MmZhMDE4MGM2MmU2ZGJhN2JjZDU3NTBlZmIzNjA0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5j
bHVkZSAiSlNOb2RlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjIyLDYgKzIyNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxlCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dT
Y29wZSwgIXRocm93U2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNob3VsZEFsbG93QWNjZXNzKTsKICAg
ICBpZiAoIXNob3VsZEFsbG93QWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01P
YmplY3Q6OmV4Y2l0aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5leGNpdGluZ0F0dHIoKSkpKTsK
IH0KQEAgLTIzNyw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdG
dW5jdGlvbiIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwogICAgIEVYQ0VQ
VElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8
ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2VzcykKQEAgLTI2
Myw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzcwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6cG9zdE1lc3NhZ2UiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI4Niw2ICsyOTQsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBj
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6Om92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTMwMSw2ICszMTEs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBwYXJhbTEgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJwYXJhbTEiLCAiVGVzdEFjdGl2ZURP
TU9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CkBAIC0zMTksNiArMzMx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9i
amVjdFByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nl
c3MgPSBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNh
bEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpOwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91
bGRBbGxvd0FjY2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCmluZGV4IDQ2NzMzYTdkNWU3
M2FhOGM3OGQyYWM5ZjQxZjc2MDZjNjg5ODlhMzEuLjI4YTlhM2JlN2FiZWM4MDU3NTM2ODE4OTdi
OTJiMjgzMjNmNTc0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcApAQCAtMzUsNiArMzUs
OCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMjE5LDYgKzIyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6YXR0cmlidXRl
V2l0aENFUmVhY3Rpb25zIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zKCkpKSk7CiB9CkBAIC0yMzMsNiArMjM3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdENFUmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKEpTR2xvYmFs
T2IKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNTEsNiArMjU3LDggQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhD
RVJlYWN0aW9uc0dldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENF
UmVhY3Rpb25zOjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKSkpOwogfQpAQCAtMjY1LDYg
KzI3Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNTZXR0ZXIoSlNHCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21F
bGVtZW50UmVhY3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1
dGV3aXRoY2VyZWFjdGlvbnNBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMjgzLDYgKzI5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5naWZp
ZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkp
KSk7CiB9CkBAIC0yOTYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmllckF0dHJp
YnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxlbigi
c3RyaW5naWZpZXJBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhp
c09iamVjdC5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMxOSw2ICszMzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3RO
ZWVkZWRHZXR0ZXIoSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlv
bnM6OmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCgpKSkpOwogfQpAQCAtMzMzLDYg
KzM0OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0
ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZFNldHRlcihKCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2Nv
cGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNTEsNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRl
ZEcKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjphdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJp
YnV0ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIpKSkpOwogfQpAQCAtMzY1LDYg
KzM4NSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RB
dHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTCiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2Nv
cGUgY3VzdG9tRWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0
ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODMsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRHZXR0
ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpz
dHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5n
aWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQoKSkpKTsKIH0KQEAgLTM5Niw2ICs0MjAsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5v
dE5lZWRlZFNldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VS
ZWFjdGlvbnM6OnN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiAgICAgYXV0byBpZCA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
Pigic3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0
dHJpYnV0ZU5vdE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2Jq
ZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDIyLDYgKzQ0OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENFCiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrKCpsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFj
dGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7CkBA
IC00NDAsNiArNDY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dENFUmVhY3Rpb25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0UKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKaW5kZXggZGUxOTRkNDU1MzUzZGNj
ZDg5NmE4ODM1Mjc3NjQwNDc3M2EwYzFiZS4uNmIwNDVhNTliZTcwYTYxZThhNjYzNmQ1NjdlMjMw
MjliNGMyZTYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVy
LmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjAxLDYgKzIwMyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpKSk7CiB9
CkBAIC0yMTUsNiArMjE5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJWYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0
YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXI6OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMjMzLDYgKzIzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zR2V0dGVyKEpTCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2
YWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZVdpdGhvdXRS
ZWFjdGlvbnMoKSkpKTsKIH0KQEAgLTI0Nyw2ICsyNTUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91dFJlYWN0aW9uc1NldHRl
cihKUwogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2Fs
bG93ZWRTY29wZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjpzZXRWYWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNjcsNiArMjc3
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwudmFsdWUoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAppbmRl
eCA0MGMzNDM3MzAyMzQ3MzdhOTc2YTc2ODUxYzE4NGU2Njg2M2Q1NTMwLi5hZGRmYzJlYTNhYzE5
OTA2MjNmZjA5YWQ3ZmM1MGFkOWI4Yjc5Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCkBA
IC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KQEAgLTIzOSw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclRlc3RBdHRyaWJ1dGVJbnRlcmZhY2VHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZUludGVyZmFj
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVz
dENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiX3MpOwpA
QCAtMjU0LDYgKzI1OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2Vy
VGVzdEF0dHJpYnV0ZUludGVyZmFjZVNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlSW50ZXJmYWNl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3NCw2
ICsyODAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRy
aWJ1dGVTcGVjaWZpZWRHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVNwZWNpZmllZCIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5j
YWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJB
dHRyaWJ1dGUoaW1wbCwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwpAQCAtMjg5LDYgKzI5
Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0
ZVNwZWNpZmllZFNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlU3BlY2lmaWVkIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwOSw2ICszMTksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFy
aWFudEdldHRlcihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5n
QWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShp
bXBsLCAidGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Il9zKTsKQEAgLTMyNCw2ICszMzYsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFy
aWFudFNldHRlcihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
Q2FsbFRyYWNlcjo6c2V0VGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNDQsNiArMzU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJUZXN0UmVhZG9ubHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RSZWFkb25seUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC50ZXN0UmVhZG9ubHlBdHRyaWJ1dGUoKSkpKTsKIH0K
QEAgLTM1OSw2ICszNzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25JbnRl
cmZhY2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2Vy
Ojp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbkludGVyZmFjZSJf
cyk7CkBAIC0zNzgsNiArMzk2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdENhbGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjp0ZXN0T3BlcmF0aW9u
U3BlY2lmaWVkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRy
YWNlcjo6dGVzdENhbGxUcmFjZXJPcGVyYXRpb24oaW1wbCwgInRlc3RPcGVyYXRpb25TcGVjaWZp
ZWQiX3MpOwpAQCAtMzk3LDYgKzQxNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJh
dGlvbldpdGhBcmd1bWVudHMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
QEAgLTQyNyw2ICs0NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRo
TnVsbGFibGVBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNDUxLDYgKzQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhW
YXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTQ3NSw2ICs1MDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVs
bGFibGVWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTQ5OSw2ICs1MjcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25X
aXRoT3B0aW9uYWxWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFyaWFudE9wdGlvbmFsQXJnID0gYXJndW1l
bnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJ
RExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj46OlJldHVyblR5cGU+KCkgOiBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmlu
Zz4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJ
RExET01TdHJpbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsK
QEAgLTUyMSw2ICs1NTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0Q2FsbFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRo
RGVmYXVsdFZhcmlhbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byB2YXJpYW50RGVmYXVsdEFyZyA9IGFyZ3VtZW50MC52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExVbmlvbjxJ
RExCb29sZWFuLCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKaW5kZXggNTk3Zjc2ZjRlMzgyMmZm
Yjk1OGI2OWI2OGM3MTllZjIxNTJjMTk3Mi4uNTlkZWVkZmQ2OTQ2MmZjOTg3MTdlNDQ0NTI1M2E1
ZTIzOGM4YmQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUg
IkpTTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0ZyYW1lVHJhY2Vycy5oPgpAQCAtNjQyLDYgKzY0NCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
OmFueUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hbnlBdHRyKCkpKSk7CiB9CkBAIC02NTUsNiArNjU5
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdERPTUpJVDo6Ym9vbGVhbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYm9vbGVhbkF0
dHIoKSkpKTsKIH0KQEAgLTY2OCw2ICs2NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtNjgxLDYgKzY4OSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
Om9jdGV0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMT2N0ZXQ+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwub2N0ZXRBdHRyKCkpKSk7CiB9CkBAIC02OTQs
NiArNzA0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdERPTUpJVDo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0
dHIoKSkpKTsKIH0KQEAgLTcwNyw2ICs3MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklUVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0QXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKSkpOwogfQpA
QCAtNzIwLDYgKzczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25n
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmxvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxv
bmdBdHRyKCkpKSk7CiB9CkBAIC03MzMsNiArNzQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25n
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0F0dHIoKSkpKTsKIH0K
QEAgLTc0Niw2ICs3NjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9u
Z0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpsb25nTG9uZ0F0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmxvbmdMb25nQXR0cigpKSkpOwogfQpAQCAtNzU5LDYgKzc3OSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6
OnVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNp
Z25lZExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCkpKSk7CiB9CkBAIC03NzIsNiArNzk0LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Zmxv
YXRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExGbG9hdD4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mbG9hdEF0dHIoKSkpKTsKIH0KQEAgLTc4NSw2ICs4
MDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxv
YXRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVucmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZEZsb2F0QXR0cigpKSkpOwogfQpAQCAtNzk4LDYgKzgy
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmRvdWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5kb3VibGVBdHRy
KCkpKSk7CiB9CkBAIC04MTEsNiArODM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dERPTUpJVFVucmVzdHJpY3RlZERvdWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5yZXN0cmljdGVkRG91Ymxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZERvdWJsZUF0
dHIoKSkpKTsKIH0KQEAgLTgyNCw2ICs4NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nQXR0cigpKSkpOwogfQpAQCAtODM3LDYgKzg2
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmJ5dGVTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExCeXRlU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5
dGVTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC04NTAsNiArODg0LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dXN2U3Ry
aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVzdlN0cmluZ0F0dHIoKSkpKTsKIH0KQEAg
LTg2Myw2ICs4OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpub2RlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlQXR0cigpKSkpOwogfQpAQCAt
ODc2LDYgKzkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFu
TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJvb2xlYW5OdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTg4
OSw2ICs5MjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxh
YmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCeXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5ieXRlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05MDIsNiArOTQ0LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6b2N0ZXROdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETE9jdGV0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5vY3RldE51bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTE1LDYgKzk1OSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01K
SVQ6OnNob3J0TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2hv
cnROdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTkyOCw2ICs5NzQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExVbnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC51bnNpZ25lZFNob3J0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NDEsNiArOTg5LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6bG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwubG9uZ051bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTU0LDYgKzEwMDQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklU
Ojp1bnNpZ25lZExvbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TE51bGxhYmxlPElETFVuc2lnbmVkTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwudW5zaWduZWRMb25nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NjcsNiArMTAx
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxl
QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmxvbmdMb25nTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExOdWxsYWJsZTxJRExMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubG9uZ0xvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk4MCw2ICsx
MDM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xv
bmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25nTG9uZz4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ051bGxhYmxl
QXR0cigpKSkpOwogfQpAQCAtOTkzLDYgKzEwNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpmbG9hdE51bGxhYmxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVsbGFibGVBdHRyKCkp
KSk7CiB9CkBAIC0xMDA2LDYgKzEwNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUVW5yZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdE51
bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVu
cmVzdHJpY3RlZEZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDE5LDYgKzEwNzksOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0RE9NSklUOjpkb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZG91YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDMyLDYgKzEwOTQsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFi
bGVBdHRyR2V0dGVyKEpTR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
RE9NSklUOjp1bnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRy
KCkpKSk7CiB9CkBAIC0xMDQ1LDYgKzExMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0RE9NSklURG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdOdWxsYWJs
ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmlu
Zz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTnVsbGFi
bGVBdHRyKCkpKSk7CiB9CkBAIC0xMDU4LDYgKzExMjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlU3RyaW5n
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExC
eXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3Ry
aW5nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDcxLDYgKzExMzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1
c3ZTdHJpbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETFVTVlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dXN2U3RyaW5nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDg0LDYgKzExNTQsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9N
SklUOjpub2RlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlTnVsbGFibGVBdHRyKCkpKSk7
CiB9CkBAIC0xMDk5LDYgKzExNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVCb2R5KAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0QXR0cmlidXRlIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMTM1LDYgKzEyMDksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBl
RnVuY3Rpb25JdGVtQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdERPTUpJVDo6aXRlbSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpAQCAtMTE3Niw2ICsxMjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQm9keSgKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Omhhc0F0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuaGFzQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0xMjA1LDYgKzEyODMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRF
bGVtZW50QnlJZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERP
TUpJVDo6Z2V0RWxlbWVudEJ5SWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTEyNDEsNiArMTMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RET01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpnZXRFbGVtZW50c0J5TmFt
ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVu
YWJsZWRCeVNldHRpbmcuY3BwCmluZGV4IDUwMWI5ODhmYTJjNTIxZTZiYTcyMDUwNjNjMzRiN2Fk
OGUyNjQ4N2MuLmVlYjc5NzQyMzY3OTYwNmEwOWVkZDE1YzUxNzkyNzkxZTFkYWQ1YzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFi
bGVkQnlTZXR0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAj
aW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgpAQCAtMjM5LDYgKzI0MSw4IEBAIGJvb2wgc2V0SlNUZXN0RW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RT
dWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OlRlc3RTdWJP
YmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCkBAIC0yNTAsNiArMjU0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNH
bG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJs
ZWRCeVNldHRpbmc6OlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTI2NCw2ICsyNzAsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdB
dHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmVuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI4MCw2ICsyODgs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRC
eVNldHRpbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RW5hYmxlZEJ5U2V0dGluZzo6c2V0RW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwMyw2ICsz
MTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Byb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OmVuYWJsZWRCeVNldHRpbmdPcGVyYXRp
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RW5hYmxlZEZvckNvbnRleHQuY3BwCmluZGV4IDNkZWIwMGM0ZDUzMGYyNTI5ZmU1MmVlOTRlYTNm
ZGJhYzBhOGFkNGEuLjc4M2ZlYTc5YjBjMTQwMWUzZDI4OTFkMzlmN2NkOWU1MDQ4MmY4NmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
bmFibGVkRm9yQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTE4OCw2ICsxOTAsOCBAQCBib29s
IHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEZv
ckNvbnRleHRUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRGb3JD
b250ZXh0OjpUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0
U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5OSw2ICsyMDMsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dENvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRG
b3JDb250ZXh0VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0RW5hYmxlZEZvckNvbnRleHQ6OlRlc3RTdWJPYmpFbmFibGVkRm9yQ29u
dGV4dCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRl
eHQiKSwgc3RybGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBjM2MwOGFkMDY0Y2YzZjIz
ZDU5MGUxYjg5YWY3OWIzOGRjMzFmMGFiLi5kYTk2ZGE4YjQyMmVhMTFiMDZiZWJhYTRkYzA2Mzlj
YjE5OTM1ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0zMSw2
ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVh
cEFuYWx5emVyLmg+CkBAIC0yODcsNiArMjg5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIx
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cjEoKSkpKTsKIH0KQEAgLTMwMCw2ICszMDQsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6YXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMigp
KSkpOwogfQpAQCAtMzE0LDYgKzMyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RF
dmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMyIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHIzKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cAppbmRleCBkNGQwZTZlYjA5Y2ZmNGFmNjk4ZTE3OTM4ZDdlNWM5N2E1MDY5OWRhLi4wMmQ3Yjhl
YmIyMDdkNjBhZjlmNTUzYjk2YWU0NDE3NGJmYWI0MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdl
dC5jcHAKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6
ZXIuaD4KQEAgLTI1NSw2ICsyNTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50VGFyZ2V0OjppdGVtIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmlu
ZGV4IGUwN2I0ZWE1N2Q1ZDhjOGI3NDM2ZDRkYzA3MDNmZTE5ZmJhYzdkYzcuLjUwOGUzMjMzNTZh
OGZiODhmYjgxMDliNjdjYzFiMDI4MDUwMmMwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBA
IC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXhjZXB0aW9uOjpu
YW1lIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubmFtZSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCmluZGV4IDU2NGY2ZmRjZmQ2NWJhODBlMGE0MGNhNGIy
MWQ4ZGE1NTBmNDFkMWQuLjA3ZDg5YTc1MzMxYzkyM2QxM2JiYzkzMmY2ODFlOGEyNTZiNWI0YjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTI5LDYgKzI5
LDggQEAKICNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMTk1LDYgKzE5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjph
U2VjcmV0QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYVNlY3JldEF0dHJpYnV0ZSgp
KSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCA2YzBlNTQ2MDFhNDY1OTYx
Y2RjMDY4MjkxNGU3NmZlYmNkYzE1MmRhLi44OTY1OWE0NDQyNDA1YTg2NDcxYTNhYWE2ZThmMTdh
Y2MwYjc0MDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtOTQsNiArOTQsNyBA
QAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpT
VGVzdFR5cGVkZWZzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTgyMSw2ICs4
MjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpyZWd1bGFyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwucmVndWxhckF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtODM0LDYgKzgzNyw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OnNldFJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC04NTIsNiArODU3LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIo
SlNHbG9iYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
cHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1YmxpY0Fu
ZFByaXZhdGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTg2NSw2ICs4NzIsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNl
dHRlcihKU0dsb2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpzZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtODg0LDYgKzg5Myw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxB
dHRyaWJ1dGVHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
OTAwLDYgKzkxMSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0CiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRp
b25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTkyMSw2ICs5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtOTM3LDYgKzk1Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC05NTYsNiArOTczLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RDRVJlYWN0aW9ucyIpOwogICAgIHJldHVybiBKU1Rlc3RDRVJl
YWN0aW9uczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCks
IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC05NjcsNiArOTg2LDggQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0Q0VSZWFjdGlvbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENF
UmVhY3Rpb25zIiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CkBAIC05
NzksNiArMTAwMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25z
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIik7CiAgICAgcmV0dXJuIEpT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
OTkwLDYgKzEwMTMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENFUmVhY3Rpb25zU3Ry
aW5naWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXIiKSwgc3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpKSwgdmFsdWUpOwog
fQpAQCAtMTAwMiw2ICsxMDI3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VS
ZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0Q2FsbFRyYWNlciIpOwogICAgIHJldHVybiBKU1Rlc3RDYWxsVHJhY2VyOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwMTMsNiArMTA0MCw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENhbGxUcmFjZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q2FsbFRyYWNlciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIp
LCBzdHJsZW4oIlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMDI2LDYgKzEwNTUs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgcmV0dXJuIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwNDAsNiArMTA3MSw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENhbGxiYWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RDYWxsYmFja0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIp
KSwgdmFsdWUpOwogfQpAQCAtMTA1NCw2ICsxMDg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRo
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMDY1LDYgKzExMDAsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKUwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Ii
KSksIHZhbHVlKTsKIH0KQEAgLTEwNzcsNiArMTExNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9i
YWxPCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEdsb2JhbE9iamVjdDo6VGVzdERPTUpJVCIpOwogICAgIHJldHVybiBKU1Rlc3RET01KSVQ6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTA4OCw2ICsxMTI3LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RE9NSklUQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dERPTUpJVCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigi
VGVzdERPTUpJVCIpKSwgdmFsdWUpOwogfQpAQCAtMTEwMCw2ICsxMTQxLDggQEAgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIp
OwogICAgIHJldHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0xMTExLDYgKzExNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0
eSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVu
KCJUZXN0RG9tYWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KQEAgLTExMjMsNiArMTE2OCw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFi
bGVkQnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTEzNCw2ICsxMTgxLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3RFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFi
bGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsK
IH0KQEAgLTExNDYsNiArMTE5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNU
ZXN0RW5hYmxlZEZvckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTE1Nyw2
ICsxMjA4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRG
b3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVz
dEVuYWJsZWRGb3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CkBAIC0xMTY5LDYgKzEyMjIsOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTExODAsNiArMTIzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0RXZlbnRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0
cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9
CkBAIC0xMTkyLDYgKzEyNDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVu
dENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyMDMsNiArMTI2Miw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRh
cmdldCIpLCBzdHJsZW4oIlRlc3RFdmVudFRhcmdldCIpKSwgdmFsdWUpOwogfQpAQCAtMTIxNSw2
ICsxMjc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
RXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Io
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCkpOwogfQogCkBAIC0xMjI2LDYgKzEyODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQog
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9uIik7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0RXhj
ZXB0aW9uIikpLCB2YWx1ZSk7CiB9CkBAIC0xMjM4LDYgKzEzMDMsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSIpOwogICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTEyNDksNiArMTMxNiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2Vu
ZXJhdGVJc1JlYWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2
YWx1ZSk7CiB9CkBAIC0xMjYxLDYgKzEzMzAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAog
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICByZXR1cm4gSlNUZXN0
R2xvYmFsT2JqZWN0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyNzIsNiArMTM0Myw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEdsb2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVl
KTsKIH0KQEAgLTEyODQsNiArMTM1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEdsb2JhbE9iamVjdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Iik7CiAgICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTI5NSw2ICsxMzcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTEzMDcsNiArMTM4NCw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTMxOCw2ICsxMzk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEoKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTMzMCw2ICsx
NDExLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0xMzQxLDYgKzE0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbAogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMzU0LDYgKzE0MzksOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iagogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAg
ICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEz
NjgsNiArMTQ1NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRl
cmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdEludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZhY2UiKSksIHZhbHVl
KTsKIH0KQEAgLTEzODIsNiArMTQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdV
bmRlcnNjb3JlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2Nv
cmUiKTsKICAgICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTM5Myw2ICsxNDg0LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0
b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50
ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVz
dEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CiB9CkBAIC0xNDA1LDYgKzE0
OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJh
YmxlIik7CiAgICAgcmV0dXJuIEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTE0MTYsNiArMTUxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwg
dmFsdWUpOwogfQpAQCAtMTQyOCw2ICsxNTI1LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0SXRlcmFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE8K
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOwog
ICAgIHJldHVybiBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0xNDM5LDYgKzE1MzgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iagogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVj
dG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVl
KTsKIH0KQEAgLTE0NTEsNiArMTU1Miw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxlCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3RNYXBMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdE1hcExpa2U6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTQ2Miw2ICsxNTY1LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFw
TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RNYXBM
aWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVz
dE1hcExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTE0NzQsNiArMTU3OSw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IApAQCAtMTQ4NSw2ICsxNTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG8KIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigi
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAt
MTQ5Nyw2ICsxNjA2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNTA4LDYg
KzE2MTksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdAogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVu
KCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsK
IH0KQEAgLTE1MjAsNiArMTYzMyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTUzMSw2ICsx
NjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNTQzLDYg
KzE2NjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE1NTQsNiArMTY3Myw4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0TmFtZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikp
LCB2YWx1ZSk7CiB9CkBAIC0xNTY2LDYgKzE2ODcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2Jh
bE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpBdWRpbyIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFt
ZWQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTU3Nyw2ICsxNzAwLDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RBdWRpb0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OkF1ZGlv
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0cmxlbigiQXVkaW8iKSksIHZh
bHVlKTsKIH0KQEAgLTE1ODksNiArMTcxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
Iik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOwogfQogCkBAIC0xNjAwLDYgKzE3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNH
bG9iYQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERl
bGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxl
dGVyTm9JZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjEyLDYgKzE3NDEsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5h
bWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE2MjMsNiArMTc1NCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTYzNSw2ICsxNzY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNjQ2LDYg
KzE3ODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiKSks
IHZhbHVlKTsKIH0KQEAgLTE2NTgsNiArMTc5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRl
cldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0
aEluZGV4ZWRHZXR0ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTY2OSw2ICsxODA4LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikp
LCB2YWx1ZSk7CiB9CkBAIC0xNjgxLDYgKzE4MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFs
Twogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOwog
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTE2OTIsNiArMTgzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdp
dGhDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRH
ZXR0ZXJDYWxsV2l0aCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJD
YWxsV2l0aCIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9
CkBAIC0xNzA0LDYgKzE4NDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTE3MTUsNiArMTg2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVu
dGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5h
bWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZEdldHRlck5vSWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmll
ciIpKSwgdmFsdWUpOwogfQpAQCAtMTcyNyw2ICsxODc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0
aElkZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzM4LDYgKzE4ODksOCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNv
bnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVu
KCJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTc1MCw2
ICsxOTAzLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
NzYxLDYgKzE5MTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVl
KTsKIH0KQEAgLTE3NzMsNiArMTkzMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTc4NCw2ICsxOTQzLDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiks
IHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0K
QEAgLTE3OTYsNiArMTk1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAg
ICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTgwNyw2ICsxOTcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4MTksNiArMTk4NCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTgz
MCw2ICsxOTk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
U2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4NDIsNiArMjAxMSw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTg1Myw2ICsyMDI0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25z
dHIKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVy
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0
dGVyQW5kU2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJB
bmRTZXR0ZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4NjUsNiArMjAzOCw4IEBAIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJD
b25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MTg3Niw2ICsyMDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcigKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGluc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE4ODgsNiArMjA2NSw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsK
ICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTg5OSw2ICsyMDc4LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTExLDYgKzIwOTIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTE5MjIsNiArMjEwNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cyIpLCBzdHJsZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE5MzUsNiArMjEyMCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWwiKTsKICAgICByZXR1cm4gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTk0OSw2ICsyMTM2LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xv
YmFsT2JqZWN0OjpUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwiKTsKICAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsIiksIHN0cmxlbigiVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTYzLDYgKzIxNTIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycyIpOwogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5NzQsNiArMjE2NSw4IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTg2LDYgKzIxNzksOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgcmV0
dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTk5Nyw2ICsyMTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1
Y3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSks
IHZhbHVlKTsKIH0KQEAgLTIwMDksNiArMjIwNiw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0ds
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0
dXJuIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MjAyMCw2ICsyMjE5LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92
ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7
CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRo
aXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigi
VGVzdE92ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTIwMzIsNiArMjIzMyw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFBsdWdp
bkludGVyZmFjZSIpOwogICAgIHJldHVybiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjA0Myw2ICsyMjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0Kgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5J
bnRlcmZhY2VDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
UGx1Z2luSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRl
cmZhY2UiKSwgc3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CkBAIC0y
MDU1LDYgKzIyNjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRl
cmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RSZWFkT25seU1hcExpa2UiKTsKICAgICByZXR1cm4gSlNUZXN0UmVhZE9ubHlN
YXBMaWtlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwNjYsNiArMjI3Myw4IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFJlYWRPbmx5TWFwTGlrZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0UmVhZE9ubHlNYXBMaWtlIiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwg
dmFsdWUpOwogfQpAQCAtMjA3OCw2ICsyMjg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRM
aWtlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlTZXRMaWtlIik7CiAgICAgcmV0dXJu
IEpTVGVzdFJlYWRPbmx5U2V0TGlrZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMDg5
LDYgKzIzMDAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9u
bHlTZXRMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RSZWFkT25seVNldExpa2UiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFJlYWRPbmx5U2V0TGlrZSIpLCBzdHJsZW4oIlRlc3RSZWFk
T25seVNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxMDEsNiArMjMxNCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdCIpOwogICAgIHJldHVybiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjExMiw2ICsyMzI3LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVj
dG9yKEpTR2xvYmFsT2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0cmxlbigiVGVzdFJlcG9ydEV4
dHJhTWVtb3J5Q29zdCIpKSwgdmFsdWUpOwogfQpAQCAtMjEyNCw2ICsyMzQxLDggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24i
KTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwog
fQogCkBAIC0yMTM1LDYgKzIzNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24i
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwgc3RybGVuKCJU
ZXN0U2VyaWFsaXphdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjE0Nyw2ICsyMzY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIHJldHVybiBK
U1Rlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0yMTU4LDYgKzIzODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcgogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5k
aXJlY3RJbmhlcml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVu
KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KQEAg
LTIxNzAsNiArMjM5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6
YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAgICByZXR1cm4gSlNU
ZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjE4
MSw2ICsyNDA4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlh
bGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXQiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Iiks
IHN0cmxlbigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1ZSk7CiB9CkBAIC0yMTkz
LDYgKzI0MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIHJldHVy
biBKU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTIyMDQsNiArMjQzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0
RmluYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2Vy
aWFsaXphdGlvbkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJp
dEZpbmFsIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjE3LDYgKzI0NTAsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIyMzEs
NiArMjQ2Niw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNDUsNiArMjQ4Miw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNv
bnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgcmV0
dXJuIEpTVGVzdFNldExpa2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjI1Niw2ICsy
NDk1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RTZXRMaWtlIiksIHN0cmxlbigiVGVzdFNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNjgs
NiArMjUwOSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0U3RyaW5naWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjI3OSw2ICsyNTIyLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3Ry
aW5naWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjkxLDYgKzI1MzYsOCBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9i
amVjdDo6VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgcmV0dXJuIEpT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9
CiAKQEAgLTIzMDIsNiArMjU0OSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RTdHJpbmdp
ZmllckFub255bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjMxNCw2ICsyNTYzLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVy
YXRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsKICAgICByZXR1cm4gSlNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzI1
LDYgKzI1NzYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24iKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
ICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFt
ZWRPcGVyYXRpb24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwg
dmFsdWUpOwogfQpAQCAtMjMzNyw2ICsyNTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJP
cGVyYXRpb25JbXBsZW1lbnRlZEFzIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uSW1wbGVtZW50ZWRBczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzQ4LDYg
KzI2MDMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0bwogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXND
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CiB9CkBAIC0yMzYwLDYgKzI2MTcs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbklt
cGxlbWVudGVkQXNDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAg
ICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTIzNzEsNiArMjYzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmlu
Z2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0
cmluZyIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSks
IHZhbHVlKTsKIH0KQEAgLTIzODMsNiArMjY0NCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTR2xv
CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRP
bmx5QXR0cmlidXRlIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjM5NCw2ICsyNjU3LDggQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGVDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRl
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVl
KTsKIH0KQEAgLTI0MDYsNiArMjY3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjQxNyw2ICsyNjg0LDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlIiksIHN0cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1
ZSk7CiB9CkBAIC0yNDI5LDYgKzI2OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdFR5cGVkZWZzIik7CiAgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTI0NDAsNiArMjcxMSw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dFR5cGVkZWZzQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFR5cGVkZWZzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJs
ZW4oIlRlc3RUeXBlZGVmcyIpKSwgdmFsdWUpOwogfQpAQCAtMjQ1NSw2ICsyNzI4LDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25SZWd1bGFyT3BlcmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OnJlZ3VsYXJPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTI0NzgsNiArMjc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxl
ZEF0UnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtMjQ5Niw2ICsyNzczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtMjUxNSw2ICsy
Nzk0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNl
RnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAg
IGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI1NDMsNiArMjgyNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25z
dHJ1Y3RvckZ1bmN0aW9uRW5hYmxlZEF0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwpAQCAtMjU2Niw2ICsyODQ5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVu
YWJsZWRJblNwZWNpZmljV29ybGQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTI1ODgsNiArMjg3Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkSW5T
cGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYxMCw2ICsyODk3LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkSW5TcGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OmVuYWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYzMyw2ICsyOTIyLDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdElu
c3RhbmNlRnVuY3Rpb25UZXN0UHJpdmF0ZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnRlc3RQcml2YXRlRnVuY3Rpb24iKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwudGVzdFByaXZhdGVGdW5jdGlvbigpOwpAQCAtMjY1Miw2ICsyOTQzLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25DYWxjdWxhdGVTZWMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OmNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7
CiAgICAgaW1wbC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0y
NjY5LDYgKzI5NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvbwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6Z2V0U2VjcmV0Qm9vbGVhbiIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGlt
cGwuZ2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMjY4NSw2ICsyOTgwLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0RmVhdHVyZUcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1
cmVHZXRTZWNyZXRCb29sZWFuKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDNmNTAzYWI4ZDVhMzJkZGUyZGQ1ZWU3
ZDg5NWY3NzZkMzY5NWZkN2QuLjUwNDk3ODdlMWExYjU0YTA1YjVmZmVkYzNlNmM1OGQ3NDVjZTI5
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yODIsNiArMjg0LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZUZ1bmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNzEzMzlh
MWFiODg1NTk0M2ZkYmExYzcwNDlhODBhN2IwYmYxNzAyYS4uODM0NDNhNzNlYzIxOThkYWQ5ODg2
ZmM4ZGIwYzFhNTNjZjE2OGMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTM4LDYgKzM4
LDggQEAKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdE5v
ZGUuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTUxMCw2ICs1MTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50
ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSkp
KTsKIH0KIApAQCAtNTI1LDYgKzUyOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEpTR2xvCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNB
dHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c1N0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNTQwLDYgKzU0Niw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZh
Y2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVy
OjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC01NjAsNiAr
NTY4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIxR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjEiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5pbXBsZW1lbnRzU3RyMSgpKSkpOwogfQpAQCAtNTc2LDYgKzU4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6
OmltcGxlbWVudHNTdHIyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSkp
KTsKIH0KQEAgLTU5Miw2ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RyMiIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTYxMiw2
ICs2MjYsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZAogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjMiKTsKICAgICBy
ZXR1cm4gdGhpc09iamVjdC5pbXBsZW1lbnRzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0K
IApAQCAtNjI2LDYgKzY0Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dEludGVyZmFjZTo6SW1wbGVtZW50c1N0cjMiKTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVu
dHNTdHIzKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTY0Miw2ICs2NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c05vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTm9kZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRz
Tm9kZSgpKSkpOwogfQpAQCAtNjU4LDYgKzY3OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVu
dHNOb2RlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2Rl
IiwgIk5vZGUiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC02NzksNiArNzAxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2UKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljUmVh
ZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKSkpOwogfQogCkBAIC02
OTQsNiArNzE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljQXR0ciIpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNzA5LDYgKzczNSw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY0F0dHJTZXR0ZXIoSlNHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRl
cmZhY2U6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBBdHRyaWJ1dGVT
ZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKQEAgLTcy
OSw2ICs3NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsU3RyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIxIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpKSk7
CiB9CkBAIC03NDUsNiArNzc1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMiIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIy
KGltcGwpKSkpOwogfQpAQCAtNzYxLDYgKzc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldFN1cHBsZW1l
bnRhbFN0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC03ODEsNiArODE1LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmMKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
U3RyMyIpOwogICAgIHJldHVybiB0aGlzT2JqZWN0LnN1cHBsZW1lbnRhbFN0cjMobGV4aWNhbEds
b2JhbE9iamVjdCk7CiB9CiAKQEAgLTc5NSw2ICs4MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZQogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVy
ZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6U3VwcGxlbWVudGFsU3RyMyIpOwogICAgIHRo
aXNPYmplY3Quc2V0U3VwcGxlbWVudGFsU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC04MTEsNiArODQ5LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3Vw
cGxlbWVudGFsTm9kZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5v
ZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBs
KSkpKTsKIH0KQEAgLTgyNyw2ICs4NjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRTdXBwbGVtZW50YWxO
b2RlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUi
LCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTg0OCw2ICs4OTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlUmVmbGVjdEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjphdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIpKSkpOwogfQpAQCAtODY0LDYgKzkwOCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRl
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RJbnRlcmZhY2U6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTg4Nyw2ICs5MzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdElu
dGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuaW1wbGVt
ZW50c01ldGhvZDEoKTsKQEAgLTkwNyw2ICs5NTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0
aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c01ldGhvZDIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkzNiw2ICs5ODYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDMiKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0
ZWRUaGlzLT5pbXBsZW1lbnRzTWV0aG9kMygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSkpKSk7CiB9CiAKQEAgLTk1Myw2ICsxMDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxl
bWVudHNNZXRob2Q0Iik7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgVGVzdEludGVy
ZmFjZTo6aW1wbGVtZW50c01ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtOTcyLDYgKzEwMjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5
KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6dGFr
ZU5vZGVzIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIGltcGxSZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZh
Y2U8Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEZNb3ZlKGltcGxSZXN1bHQubm9kZXMpKSkpOwpAQCAtOTkxLDYgKzEwNDcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBl
RnVuY3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMSIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMShpbXBsKTsKQEAg
LTEwMTEsNiArMTA2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2Qy
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMDQwLDYgKzExMDAs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMyIpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1
cHBsZW1lbnRhbE1ldGhvZDMoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwog
fQogCkBAIC0xMDU3LDYgKzExMTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
TWV0aG9kNCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZS5jcHAKaW5kZXggMzYyOGNkNjYyN2NjOGVmZjc1MzRiOTY0NmY4YmVm
NWE5MjkxNDhkZi4uNzA3YzYxOGMyZDMyNTQxOTkwYTYwMTFhMTJiNGVjZWI0NmIyODYyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCkBA
IC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNo
ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihK
U0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmU6OnJlYWRvbmx5Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZG9ubHko
KSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4
IDFjMTFiYzZiZmI5NmJmYmJkN2I5MDdhOWNiY2M1ODA1Mjk2YjI4ZDUuLjJiYTBhOGNjZDZhNzgw
MTU5NTQxYzE1MThjN2ViNGI4YjcyNzU0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Nyw2
ICsxOTksOCBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3ImIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yOjp0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QudGVzdEF0dHJpYnV0ZUN1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtMjA4
LDYgKzIxMiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVz
dEF0dHJpYnV0ZUN1c3RvbShKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvcjo6dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRo
aXNPYmplY3QudGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQog
CkBAIC0yMTksNiArMjI1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oSlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6VGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0
b20obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjM0LDYgKzI0Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnRlc3RDdXN0b21G
dW5jdGlvbiIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RDdXN0b21GdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhbGxGcmFtZSkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGViZTJjNjJmOTk0
ZTFhYjQ1ZDZmNjEzODQ3MTQ4NDIzMTU5M2FhMzQuLjA1OTAyODdkYjQzYTc3NGMzZDBkNjgwMTI2
Mjc3ZTBiMzczZjQ2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpA
QCAtMzU4LDYgKzM2MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CkBAIC0zODMsNiArMzg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG8KICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5j
cHAKaW5kZXggNTkxNWExNTMwZjI2ZWYxY2YxNTliOWM3YjU0OGE0ZjNjMzI1ZjA0Yy4uMGRkZTg5
M2ZmN2I5MjBhZjI1Y2ZlZWQ3OGQ0ZTRlNmU1YmZiNmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CkBAIC0yNjUsNiArMjY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3QKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6
bmFtZWREZWxldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggZDVm
NDc4ZWZlNTYwMGRhNTQ0NjY4NTM3YTA1YzJjZGJiNzZkNDhiZi4uNzgwMTNmOTVhNmFjMWVlZjRh
MWVmZjcwNjVlNTQzMTQyN2Q5YzdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdl
dHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjQxLDYgKzI0
Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0dGVyTmFtZSIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGVjNjcwMDY5NjA0ZDhlMTRlOGI4
MmYxYjUwZjFhNDIyYjQ2NjU5MTIuLjY3M2M0YTA4ZjI4MWI0MDVhMmFjZmMzZGRiZGU0YmMwOGY3
YTFlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ci5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJD
YWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTMxMCw2ICszMTIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSW5kZXhlZEdldHRlci5jcHAKaW5kZXggMGJlMzQwNWEyNDE4N2ZkMzUzZTZlMDdhNmIwYjhi
YTlmMDFkMmY2Ni4uNGE3NjBlNDZmNTJmYzIxNmU3MzhlOWUwNTNhMWUwOGM5NTNmOTJhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNw
cApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzM1LDYgKzMzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJv
dG90eXBlRnVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRT
ZXR0ZXJXaXRoSW5kZXhlZEdldHRlcjo6bmFtZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTM2MCw2ICszNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlw
ZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAppbmRleCBhZTRlZTk2ODM1NGUyYzAy
YTRlOTEwNWE5MDVkNWIyYzI3OTlhMTRlLi45OTQ5NGI1NDRmYzRiY2E2MzllMjYxZmE0NWZmMDc4
YjJkNWIwMzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50
RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBA
IC0zNTgsNiArMzYwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5k
U2V0dGVyOjpuYW1lZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtMzgzLDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRl
ckFuZFNldHRlcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURM
VW5zaWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtNDAxLDYgKzQwNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFu
ZFNldHRlcjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5z
aWduZWRMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NDE0LDYgKzQyMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
YW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNl
dHRlcjo6anNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlw
ZUZ1bmN0aW9uSW5kZXhlZFNldHRlciIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1p
bjxzaXplX3Q+KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50ID09IDEpIHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25J
bmRleGVkU2V0dGVyMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRU
aGlzKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcy5jcHAKaW5kZXggMjZjNjIyNWExMjA4MjcyYzQ1MmIzNmQwYjE3
MDgyMzA3Yzc2OTVhZi4uNzEzMDMxOTAxYzA4ZWUwMjFmNTBkMDBjZTlhYzY1YjQ0M2U5MzY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXMuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zMzgsNiArMzQwLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp1bmZvcmdlYWJsZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC0zNTMsNiArMzU3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5zdGEKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllczo6dW5mb3JnZWFibGVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudW5m
b3JnZWFibGVPcGVyYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucy5jcHAKaW5kZXggMjc0MjNhYWM1ZTYxMzIyNGM0NzY1MWVhYTM0MmZmYjJm
N2YwNDg4NC4uNjYyZjk3NGY4M2IxODEyNjZjNGQwYTVkYzgwYmY4ZDU1MmRiNDIxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAgLTMx
LDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVk
ZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTMxOSw2ICszMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0z
MzQsNiArMzM4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3YKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnM6OnVuZm9yZ2VhYmxlT3BlcmF0aW9uIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
ICAgICBpbXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggYTNiODc5
MzFlMTJmYWViNzNhYjVmMTQ0MjVmNDY1ZDE1MjhiMTI2Yi4uNTRjNTM2ZWZjMTc4OTBkMjI5MGU0
NDc2YTQ4NzNiMjIxZDYzYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCkBAIC0yODksNiArMjkwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE5vZGVOYW1lR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6bmFtZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLm5hbWUoKSkpKTsKIH0KQEAgLTMwMiw2ICszMDUsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpzZXROYW1l
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzIy
LDYgKzMyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2Rl
UHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6dGVzdFdvcmtlclByb21pc2UiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIGltcGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zMzks
NiArMzQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3UKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgIGltcGwuY2FsY3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpA
QCAtMzU2LDYgKzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9kCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0
U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMzcyLDYgKzM4Myw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVy
ZUdldFNlY3JlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6
dGVzdEZlYXR1cmVHZXRTZWNyZXRCb29sZWFuIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xl
YW4oKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMTY0MzNkOTlmMTJhMTBkMTExZmE4YTUwYzYxZWM4
ODRlMjZjNzI5MS4uNTQzNTFlYmM3MTZkMDhlNTIwN2RkYjAxN2IyMGZkZmNmZDA0MmM1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgog
I2luY2x1ZGUgIkpTV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTI2NjYsNiArMjY2Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnJlYWRPbmx5TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlMb25nQXR0cigp
KSkpOwogfQpAQCAtMjY3OSw2ICsyNjgyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVhZE9ubHlTdHJpbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0yNjky
LDYgKzI2OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0
T2JqQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0
aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRPbmx5VGVzdE9i
akF0dHIoKSkpKTsKIH0KQEAgLTI3MDUsNiArMjcxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5
TG9uZ0F0dHIiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljUmVh
ZE9ubHlMb25nQXR0cigpKSkpOwogfQogCkBAIC0yNzE3LDYgKzI3MjYsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdGF0
aWNTdHJpbmdBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6
c3RhdGljU3RyaW5nQXR0cigpKSkpOwogfQogCkBAIC0yNzI5LDYgKzI3NDAsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRTdGF0aWNTdHJpbmdBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC0yNzQ1LDYgKzI3NTgsOCBA
QCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpUZXN0U3ViT2Jq
Iik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0yNzU3LDYgKzI3NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JUZXN0U3RhdGljUmVhZG9ubHlPYmpHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0U3RhdGljUmVhZG9ubHlPYmoiKTsKICAgICBh
dXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250
ZXh0KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yNzc0LDYgKzI3OTEsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjplbnVtQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRp
b248VGVzdE9iajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmVudW1BdHRyKCkpKSk7CiB9CkBAIC0yNzg3LDYgKzI4MDYsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbnVt
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG9wdGlvbmFsTmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yODA4LDYgKzI4MjksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtMjgyMSw2ICsyODQ0LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Qnl0ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMjgzOSw2ICsyODY0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak9jdGV0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5vY3RldEF0dHIoKSkpKTsKIH0KQEAgLTI4NTIsNiArMjg3OSw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9j
dGV0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
Mjg3MCw2ICsyODk5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9y
dEF0dHIoKSkpKTsKIH0KQEAgLTI4ODMsNiArMjkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFNob3J0QXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjkwMSw2ICsy
OTM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6Y2xhbXBlZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMQ2xhbXBBZGFwdG9yPElETFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTE0LDYgKzI5NDksOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRDbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRh
cHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5MzIsNiArMjk2OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmVuZm9yY2VSYW5nZVNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RW5mb3JjZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTQ1LDYgKzI5
ODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRW5mb3JjZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5
NjMsNiArMzAwNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTc2LDYgKzMwMTksOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRVbnNpZ25lZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25l
ZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTk0LDYgKzMwMzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25n
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5sb25nQXR0cigpKSkpOwogfQpAQCAtMzAwNyw2ICszMDU0
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtMzAyNSw2ICszMDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bG9uZ0xvbmdBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5sb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMwMzgsNiArMzA4OSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldExvbmdMb25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtMzA1Niw2ICszMTA5LDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0
dHIoKSkpKTsKIH0KQEAgLTMwNjksNiArMzEyNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xv
bmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTMwODcsNiArMzE0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ0F0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgaW1wbC5zdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0zMTAwLDYgKzMxNTksOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpzZXRTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzExOCw2ICszMTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWwKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTMxMzEsNiArMzE5NCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldFVzdnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMTQ5LDYgKzMyMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0T2JqQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC50ZXN0T2JqQXR0cigpKSkpOwogfQpAQCAtMzE2Miw2ICszMjI5LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
VGVzdE9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE9iakF0
dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTMxODAsNiArMzI0OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3ROdWxsYWJsZU9iakF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0dHIoKSkpKTsKIH0KQEAgLTMxOTMsNiAr
MzI2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTMyMTEsNiArMzI4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmxlbmllbnRUZXN0T2JqQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5sZW5pZW50
VGVzdE9iakF0dHIoKSkpKTsKIH0KQEAgLTMyMjQsNiArMzI5OSw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldExlbmll
bnRUZXN0T2JqQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJsZW5pZW50
VGVzdE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyNDIsNiArMzMxOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuZm9yZ2VhYmxl
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKSkpOwogfQpAQCAt
MzI1NSw2ICszMzM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmciKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9y
PElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSkpKTsKIH0KQEAgLTMyNjgsNiArMzM0
OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ1NldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTMyODYsNiArMzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihK
U0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExU
cmVhdE51bGxBc0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KCkpKSk7CiB9CkBAIC0zMjk5LDYgKzMzODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNHbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0Vt
cHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzE3LDYgKzM0
MDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5
dGVTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKSkpOwogfQpAQCAtMzMzMCw2ICszNDE5
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZ1NldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0Qnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzQ4LDYgKzM0MzksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdMb25n
UmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBA
IC0zMzYxLDYgKzM0NTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
TG9uZ1JlY29yZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMzM3OSw2ICszNDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExv
bmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhy
b3dTY29wZSwgaW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzM5Miw2
ICszNDg5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdS
ZWNvcmRBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMUmVjb3JkPElETFVTVlN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM0MTAsNiArMzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3Zz
dHJpbmdMb25nUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Nj
b3BlLCBpbXBsLnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDIzLDYgKzM1
MjQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29y
ZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTM0NDEsNiArMzU0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdP
YmpSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0
T2JqPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnN0cmluZ09ialJlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTM0NTQsNiAr
MzU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMUmVjb3JkPElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzQ3Miw2ICszNTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nTnVsbGFibGVPYmpSZWNv
cmRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5n
LCBJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTnVs
bGFibGVPYmpSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDg1LDYgKzM1OTQsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRTdHJpbmdOdWxsYWJsZU9ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM1MDMsNiArMzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ1ZvaWRDYWxsYmFj
a1JlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01T
dHJpbmcsIElETENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3Ry
aW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzUxNiw2ICszNjI5LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0
dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0U3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNr
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTM0
LDYgKzM2NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpkaWN0aW9uYXJ5QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZGljdGlv
bmFyeUF0dHIoKSkpKTsKIH0KQEAgLTM1NDcsNiArMzY2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldERpY3Rpb25h
cnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM1NjUsNiArMzY4NCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxl
RGljdGlvbmFyeUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElE
TERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZURpY3Rp
b25hcnlBdHRyKCkpKSk7CiB9CkBAIC0zNTc4LDYgKzM2OTksOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXROdWxsYWJs
ZURpY3Rpb25hcnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTk2LDYgKzM3
MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5p
b25BdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKCkpKSk7CiB9CkBAIC0zNjA5LDYg
KzM3MzQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUlu
VW5pb25BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zNjI3LDYgKzM3NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBl
SW5TZXF1ZW5jZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElE
TENsYW1wQWRhcHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNl
QXR0cigpKSkpOwogfQpAQCAtMzY0MCw2ICszNzY5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVj
dCYKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QW5ub3RhdGVkVHlw
ZUluU2VxdWVuY2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2NTgsNiArMzc4OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TEVudW1lcmF0aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpKSk7CiB9CkBAIC0zNjcxLDYg
KzM4MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25F
bnVtQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1
ZSA9IHBhcnNlRW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM2OTIsNiArMzgyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNZWRp
YURldmljZXNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1lZGlhRGV2aWNlcyIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlcz4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1lZGlhRGV2
aWNlcygpKSkpOwogfQpAQCAtMzcwNSw2ICszODQyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6eG1sT2JqQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC54
bWxPYmpBdHRyKCkpKSk7CiB9CkBAIC0zNzE4LDYgKzM4NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqWE1MT2JqQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRYTUxPYmpB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTM3MzYsNiArMzg3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVh
dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmlzQ3JlYXRlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LmlzQ3JlYXRlKCkpKSk7CiB9CkBAIC0zNzQ5LDYgKzM4OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ3JlYXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDcmVhdGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzc2Nyw2
ICszOTEyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSkpKTsKIH0KQEAgLTM3ODAsNiArMzkyNyw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGZhbHNlKTsKQEAgLTM3OTgsNiArMzk0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdh
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpKSk7
CiB9CkBAIC0zODExLDYgKzM5NjIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODI5
LDYgKzM5ODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50
ZWdyYWxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpnZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRy
KSkpKTsKIH0KQEAgLTM4NDIsNiArMzk5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEludGVncmFsQXR0cmlidXRl
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYwLDYgKzQwMTcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpnZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbnNpZ25lZExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHN0ZDo6
bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSkpKTsKIH0KQEAgLTM4NzMsNiArNDAzMiw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0clNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODkxLDYgKzQwNTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExC
b29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29s
ZWFuYXR0ckF0dHIpKSkpOwogfQpAQCAtMzkwNCw2ICs0MDY3LDggQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Qm9vbGVh
bkF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTIyLDYg
KzQwODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpnZXRVUkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpKTsKIH0KQEAgLTM5MzUs
NiArNDEwMiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxB
dHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTMsNiArNDEyMiw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmdldFVSTEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIpKSkpOwogfQpAQCAtMzk2Niw2ICs0MTM3LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzk4NCw2ICs0MTU3LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRTdHJpbmdBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0
ckF0dHIpKSkpOwogfQpAQCAtMzk5Nyw2ICs0MTcyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJp
bmdBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQwMTUsNiArNDE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEludGVncmFsQXR0cmlidXRlOldlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50SW50ZWdyYWxBdHRyQXR0cikpKSk7CiB9CkBAIC00MDI4LDYgKzQyMDcsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRl
Z3JhbEF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTQwNDYsNiArNDIyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKSkpOwogfQpAQCAt
NDA1OSw2ICs0MjQyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbUJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRCb29sZWFuQXR0cmlidXRlOldlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExC
b29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00MDc3LDYgKzQyNjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRV
UkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA5MCw2ICs0Mjc3LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQxMDksNiArNDI5OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC00MTI1LDYgKzQzMTYsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9i
amVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDE0Niw2ICs0MzM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY0dldHRlcigK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZVN0YXRpYyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6
OmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMoKSkpKTsKIH0KIApAQCAtNDE2MSw2ICs0
MzU2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY1NldHRlcigKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBbJl0gewpAQCAtNDE4MCw2ICs0Mzc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dHlwZWRBcnJheUF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHlwZWRB
cnJheUF0dHIoKSkpKTsKIH0KQEAgLTQxOTMsNiArNDM5Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFR5cGVkQXJy
YXlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZs
b2F0MzJBcnJheSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTQyMTAsNiArNDQxMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0
dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbUF0dHIiKTsKICAgICByZXR1cm4gdGhp
c09iamVjdC5jdXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC00MjIxLDYg
KzQ0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSgogc3RhdGljIGlubGluZSBib29sIHNl
dEpTVGVzdE9iakN1c3RvbUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Q3VzdG9tQXR0ciIpOwogICAgIHRo
aXNPYmplY3Quc2V0Q3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC00MjMzLDYgKzQ0MzgsOCBAQCBib29sIHNldEpTVGVzdE9iakN1
c3RvbUF0dHIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAg
ICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQiKTsK
ICAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBl
dmVudE5hbWVzKCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0K
IApAQCAtNDI0NCw2ICs0NDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHUKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCku
Zm9vRXZlbnQiKTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29F
dmVudCwgdmFsdWUpOwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1
ZSk7CiAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOwpAQCAtNDI1OSw2ICs0NDY4LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpPbndlYmtpdGZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRy
aWJ1dGUodGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgd29ybGRG
b3JET01PYmplY3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjcwLDYgKzQ0ODEsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Vi
a2l0Zm9vU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RP
YmomIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHNldEV2
ZW50SGFuZGxlckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlz
T2JqZWN0LndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoJnRoaXNPYmplY3QsIHZhbHVlKTsKICAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZSh2YWx1ZSk7CkBAIC00Mjg2LDYgKzQ0OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoKmpzQ2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC00
Mjk5LDYgKzQ1MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNT
dGF0ZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRXaXRoRXhlY1N0YXRlQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzMTcsNiArNDUzNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNDMzMCw2
ICs0NTQ5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFu
ZFNldHRlckNhbGxXaXRoQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDM0OCw2
ICs0NTY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MzY0LDYgKzQ1
ODcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtNDM4NSw2ICs0NjEwLDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmli
dXRlR2UKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvKiBjb250ZXh0
ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00NDAxLDYgKzQ2MjgsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3Rh
dGVBdHRyaWJ1dGVTZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4
ZWNTdGF0ZUF0dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQyMiw2ICs0NjUxLDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRl
V2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CiAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xv
YmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSgh
Y29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDQzOCw2ICs0NjY5
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJU
ZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDQ2MCw2ICs0NjkzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5jb25kaXRpb25hbEF0dHIxKCkpKSk7CiB9CkBAIC00NDc2LDYgKzQ3MTEsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRDb25kaXRpb25hbEF0dHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQ0OTcsNiArNDczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxBdHRyMigpKSkpOwogfQpAQCAtNDUxMyw2ICs0
NzUyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMiIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NTM0LDYgKzQ3NzUsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRp
b25hbEF0dHIzIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSkpKTsKIH0KQEAg
LTQ1NTAsNiArNDc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIzU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjMiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDU3MCw2ICs0ODE1LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVj
dEE6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDU4NCw2ICs0ODMxLDggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNCIpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI0IiksIHN0cmxlbigiY29uZGl0
aW9uYWxBdHRyNCIpKSwgdmFsdWUpOwogfQpAQCAtNDU5OSw2ICs0ODQ4LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjb25kaXRpb25hbEF0dHI1Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDYxMyw2ICs0ODY0LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNSIpOwogICAgIC8v
IFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0
LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxB
dHRyNSIpKSwgdmFsdWUpOwogfQpAQCAtNDYyOCw2ICs0ODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpjb25kaXRpb25hbEF0dHI2Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtNDY0Miw2ICs0ODk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNiIpOwogICAgIC8vIFNoYWRv
d2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIp
KSwgdmFsdWUpOwogfQpAQCAtNDY1Nyw2ICs0OTE0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y2FjaGVkQXR0cmlidXRl
MSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0
dHJpYnV0ZTEuZ2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CkBAIC00Njc1LDYgKzQ5MzQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
YWNoZWRBdHRyaWJ1dGUyIik7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2Jq
ZWN0Lm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVl
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTQ2OTQsNiArNDk1
NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNhY2hlZEF0dHJpYnV0ZTMiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRW
YWx1ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUzLmdldCgpKQogICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpA
QCAtNDcxNCw2ICs0OTc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0
dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YW55QXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NzI3LDYgKzQ5OTIsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBbnlB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
NzQ1LDYgKzUwMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvYmplY3RBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5vYmplY3RBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3NTgsNiArNTAyNyw4IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNl
dE9iamVjdEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPYmplY3Q+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTQ3NzYsNiArNTA0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnRlbnREb2N1bWVudCIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPERvY3VtZW50Pj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdT
ZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUobGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5j
b250ZW50RG9jdW1lbnQoKSkpKSk7CiB9CkBAIC00Nzg5LDYgKzUwNjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptdXRh
YmxlUG9pbnQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxTVkdQb2lu
dD4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLm11dGFibGVQb2ludCgpKSkpOwogfQpAQCAtNDgwMiw2ICs1MDc3LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludFNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0TXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxTVkdQ
b2ludD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIs
ICJtdXRhYmxlUG9pbnQiLCAiU1ZHUG9pbnQiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00ODIwLDYgKzUwOTcsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpibHVlYmVy
cnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuYmx1ZWJlcnJ5KCkpKSk7CiB9CkBAIC00ODMzLDYgKzUxMTIs
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpzZXRCbHVlYmVycnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZmFsc2UpOwpAQCAtNDg1MSw2ICs1MTMyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2IK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZGVzY3JpcHRpb24iKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZGVzY3JpcHRpb24oKSkpKTsKIH0KQEAgLTQ4NjQsNiArNTE0Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmlkIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmlkKCkpKSk7CiB9CkBAIC00ODc3LDYgKzUxNjIsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRJZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC00ODk1LDYgKzUxODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFz
aEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpoYXNoIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
aGFzaCgpKSkpOwogfQpAQCAtNDkwOCw2ICs1MTk3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTQ5MjAsNiArNTIxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVw
bGFjZWFibGVBdHRyaWJ1dGUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0
eS4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRy
aWJ1dGUiKSwgc3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQpAQCAt
NDkzMyw2ICs1MjI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
RG91YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1
dGUoKSkpKTsKIH0KQEAgLTQ5NDYsNiArNTI0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMTG9uZz4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVMb25nQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC00OTU5LDYgKzUyNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZUJvb2xlYW5BdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQm9vbGVhbkF0
dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk3Miw2ICs1MjcxLDggQEAgc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERP
TVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVT
dHJpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5ODUsNiArNTI4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5u
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk5OCw2ICs1MzAxLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwMTYsNiArNTMy
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRh
YmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgp
KSkpOwogfQpAQCAtNTAyOSw2ICs1MzM2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0TnVsbGFibGVTdHJpbmdTZXR0
YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MDQ3LDYgKzUzNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVVT
VlN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUwNjAs
NiArNTM3MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtNTA3OCw2ICs1MzkxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlQnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJ5
dGVTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxl
Qnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDkxLDYgKzU0MDYsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXROdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExCeXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NTEwOSw2ICs1NDI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
YXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MTIyLDYgKzU0NDEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoSlNHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphdHRyaWJ1dGVX
aXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVy
YXRpb248VGVzdE9iajo6T3B0aW9uYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpKSk7CiB9CkBAIC01MTM1LDYg
KzU0NTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJl
c2VydmVkRW51bVR5cGVTZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0
aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC01MTU2LDYgKzU0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmVhZE9ubHlWb2lkUHJvbWlz
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExWb2lk
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTUxNjksNiArNTQ5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVh
ZE9ubHlQcm9taXNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFByb21pc2U8SURMSW50ZXJmYWNlPFRlc3ROb2Rl
Pj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJv
d1Njb3BlLCBpbXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUx
ODIsNiArNTUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJk
c0F0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJk
c0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTE5NSw2ICs1NTI0LDggQEAgc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUiKTsKICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBz
dHJsZW4oInB1dEZvcndhcmRzQXR0cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRU
byA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjE4LDYgKzU1NDksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9i
amVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTIzMSw2ICs1NTY0LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInB1dEZv
cndhcmRzTnVsbGFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJwdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC01MjU0LDYgKzU1ODksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdpZmllckF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC01MjY3LDYgKzU2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUyODUsNiAr
NTYyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVh
ZFdyaXRlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTI5OSw2ICs1NjQwLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAi
VGVzdE9iamVjdCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsg
fSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzIw
LDYgKzU2NjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
bmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dAogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuY29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkp
KSk7CiB9CkBAIC01MzM3LDYgKzU2ODIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dAogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRpb25hbEFuZENvbmRp
dGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3Qi
LCAiY29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01
MzU5LDYgKzU3MDYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAt
NTM3Miw2ICs1NzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVD
b25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUzOTAsNiArNTc0MSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZVVuZm9yZ2VhYmxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1
bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZSgpKSkpOwogfQpAQCAtNTQw
Myw2ICs1NzU2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGVVbmZvcmdlYWJsZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1l
Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlIiwgIk5vZGUiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDIxLDYg
KzU3NzYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlv
bmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVu
Zm9yZ2VhYmxlUHJpdmF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNl
PE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVu
Zm9yZ2VhYmxlUHJpdmF0ZSgpKSkpOwogfQpAQCAtNTQzNCw2ICs1NzkxLDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmli
dXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0NTIsNiArNTgxMSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVByb21pc2VHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExEb3VibGU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5y
dW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2UoKSkpKTsKIH0KQEAg
LTU0NjUsNiArNTgyNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSdW50aW1l
Q29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2VTZXR0CiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRl
QXR0cmlidXRlUHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExQcm9taXNlPElETERvdWJsZT4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0ODMsNiArNTg0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlR2V0dGVy
KEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxs
eUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTQ5Niw2ICs1ODYxLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5k
b3dBdHRyaWJ1dGVTZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NTE0LDYgKzU4ODEsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtl
ckF0dHJpYnV0ZUdldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTU1
MjcsNiArNTg5Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTU0
NSw2ICs1OTE2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
bHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtl
ckF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93
QW5kV29ya2VyQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01NTU4LDYgKzU5MzEsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdv
cmtlckF0dHJpYnV0ZVNldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1NzksNiArNTk1NCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQ
YXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwpAQCAtNTU5Nyw2ICs1OTc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNTYxNiw2ICs1
OTk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09
IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CkBAIC01NjQ0LDYgKzYwMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1
bnRpbWVPcAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvblN0YXRpYyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTU2NjcsNiArNjA1
MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjplbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0
dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTY4
OSw2ICs2MDc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEIKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OndvcmxkU3BlY2lmaWNNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU3MTEsNiArNjA5OCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNh
bGN1bGF0ZVNlY3JldFJlc3VsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY2Fs
Y3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtNTcyOCw2ICs2MTE3LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0U2VjcmV0Qm9vbGVhbkJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmdldFNlY3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkp
KTsKIH0KQEAgLTU3NDQsNiArNjEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0RmVhdHVyZUdldFNl
Y3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExCb29sZWFuPihpbXBsLnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAt
NTc2MSw2ICs2MTU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwog
ICAgIGltcGwudm9pZE1ldGhvZCgpOwpAQCAtNTc3OCw2ICs2MTczLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhv
ZFdpdGhBcmdzQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnZvaWRNZXRob2RXaXRoQXJncyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNTgwNiw2ICs2MjAzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmJ5dGVNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCeXRlPihpbXBsLmJ5dGVNZXRo
b2QoKSkpKTsKIH0KQEAgLTU4MjEsNiArNjIyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0Jv
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlTWV0aG9k
V2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU4NDcs
NiArNjI0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvY3RldE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpKSk7
CiB9CkBAIC01ODYyLDYgKzYyNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRNZXRob2RXaXRoQXJn
cyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTg4OCw2ICs2Mjkz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTG9uZ01ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmxvbmdNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExMb25nPihpbXBsLmxvbmdNZXRob2QoKSkpKTsKIH0KQEAgLTU5
MDMsNiArNjMxMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25nTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5MjksNiArNjMzOCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9i
ak1ldGhvZEJvZHkoSlNDOjpKCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvYmpNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kKCkpKSk7CiB9CkBAIC01OTQ0LDYg
KzYzNTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5NzAsNiArNjM4Myw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFi
bGVNZXRob2RCb2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojp1bmZvcmdlYWJsZU1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETExvbmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpKTsKIH0KQEAgLTU5ODUs
NiArNjQwMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjAwNyw2
ICs2NDI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwMjksNiArNjQ0
OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nTWV0aG9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ01ldGhvZCIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLm51bGxhYmxlU3RyaW5nTWV0aG9kKCkpKSk7CiB9CkBA
IC02MDQ0LDYgKzY0NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRo
b2QiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMTnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIFRl
c3RPYmo6Om51bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKCkpKSk7CiB9CiAKQEAgLTYwNTgsNiAr
NjQ4MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwNzgsNiArNjUwMyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhFbnVtQXJnQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjEwMCw2ICs2NTI3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhT
dGFuZGFsb25lRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNjEyMiw2ICs2NTUxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW4KICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEVudW1B
cmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gZW51bUFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25h
bDxDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlw
ZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlw
ZT4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBl
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUs
IDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIs
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KSk7CkBA
IC02MTQyLDYgKzY1NzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFy
Z0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmlu
ZWQoKSA/IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJh
dGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CkBAIC02MTYyLDYgKzY1OTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RUaGF0UmVxdWlyZXNBbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjE4NSw2ICs2NjIwLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFVTVlN0cmluZ0EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6Om1ldGhvZFdpdGhVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKQEAgLTYyMDcsNiArNjY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVT
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRo
TnVsbGFibGVVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTYyMjksNiArNjY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoVVNWU3RyaW5n
QXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjI1MSw2ICs2NjkyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhC
eXRlU3RyaW5nQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02
MjczLDYgKzY3MTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeQogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmlu
Z0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjI5NSw2ICs2
NzQwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
NjMxNyw2ICs2NzY0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZSIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMzOSw2ICs2Nzg4LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aFJlY29yZEJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6Om1ldGhvZFdpdGhSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTYzNjEsNiArNjgxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25CCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKQEAgLTYzNzgs
NiArNjgzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9u
ZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25S
ZXR1cm5pbmdMb25nKCkpKSk7CiB9CkBAIC02MzkzLDYgKzY4NDgsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
RXhjZXB0aW9uUgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
bWV0aG9kV2l0aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5t
ZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKSk7CiB9CkBAIC02NDA4LDYgKzY4
NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25DdXN0b21NZXRob2RCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9k
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtNjQyMiw2ICs2
ODgxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzIik7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3Vz
dG9tTWV0aG9kV2l0aEFyZ3MoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwog
fQogCkBAIC02NDM2LDYgKzY4OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQm9keShKUwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHJpdmF0ZU1ldGhvZCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjQ1Niw2ICs2OTE5LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uUHVibGljQW5kUHJpdmF0ZU1ldGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnB1YmxpY0FuZFByaXZhdGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NzYsNiArNjk0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVu
ZXJCb2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphZGRF
dmVudExpc3RlbmVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02
NTA1LDYgKzY5NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjUzNCw2ICs3MDAzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aEV4ZWNTdGF0ZVZvaWRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OndpdGhFeGVjU3RhdGVWb2lkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLndpdGhF
eGVjU3RhdGVWb2lkKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC02NTUxLDYgKzcwMjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqQm9keQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aEV4ZWNTdGF0ZU9i
aiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFj
ZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC53aXRoRXhlY1N0YXRlT2JqKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC02NTY2LDYgKzcwMzksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
RXhlY1N0YXRlVm9pZEV4YwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6d2l0aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53aXRo
RXhlY1N0YXRlVm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNh
bEdsb2JhbE9iamVjdCkpKTsKQEAgLTY1ODMsNiArNzA1OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVP
YmpFeGNlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRo
RXhlY1N0YXRlT2JqRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVP
YmpFeGNlcHRpb24oKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmpl
Y3QpKSkpKTsKIH0KQEAgLTY1OTgsNiArNzA3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGlj
YWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElL
RUxZKCFjb250ZXh0KSkKQEAgLTY2MTgsNiArNzA5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRp
b25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2MzgsNiArNzExOSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldp
dGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3Qp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkK
QEAgLTY2NTYsNiArNzEzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZEV4ZWNTdGF0ZVdpdGhTcGFjZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02Njc0LDYgKzcxNTksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9j
dW1lbnRBcmd1bWVudAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6d2l0aERvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlm
IChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02Njk2LDYgKzcxODMsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVy
RG9jdW1lbnRBcgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
d2l0aENhbGxlckRvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9N
V2luZG93KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
KmNhbGxGcmFtZSkuZG9jdW1lbnQoKTsKICAgICBpZiAoIWluY3VtYmVudERvY3VtZW50KQpAQCAt
NjcxNiw2ICs3MjA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3UKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CiAgICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoaW5jdW1iZW50
RE9NV2luZG93KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgKmNhbGxGcmFtZSkpOwpAQCAtNjczMyw2ICs3MjI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBvcHQgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8
Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNjc1Myw2ICs3MjQ2LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvcHQg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjc3Myw2ICs3
MjY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFs
QXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02Nzk4LDYgKzcy
OTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9u
YWxBcmdzIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02ODI2LDYg
KzczMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9
IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
Njg0Niw2ICs3MzQ3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmlu
ZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBj
b252ZXJ0PElETFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTY4NjYsNiArNzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9u
YWxBdG9tU3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBu
dWxsQXRvbSgpIDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg4Niw2ICs3Mzkx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1
ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gImZvbyJfcyA6IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNjkwNiw2ICs3NDEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bEF0b21TdHJpbmdBbmREZWZhdWx0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTY5MjYsNiArNzQzNSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0g
YXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02
OTQ2LDYgKzc0NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNV
bmRlZmluZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTY2LDYgKzc0NzksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxBdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1bWVudDAu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmlu
Z0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKTsKQEAgLTY5ODYsNiArNzUwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDA2LDYgKzc1MjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxVUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBz
dHIgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGNv
bnZlcnQ8SURMVVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNzAyNiw2ICs3NTQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bEF0b21TdHJpbmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURM
RE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAg
LTcwNDYsNiArNzU2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJ
c05hTiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAg
ICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNjYsNiArNzU4OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbEZsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZl
cnQ8SURMVW5yZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CkBAIC03MDg2LDYgKzc2MTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMbwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9w
dGlvbmFsTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRp
b25hbDxDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmdM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxMDYs
NiArNzYzMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVy
byIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAg
YXV0byBudW1iZXIgPSBjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzEyNiw2ICs3NjU1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsVW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxNDYsNiArNzY3Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51
bWJlciA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcxNjYsNiArNzY5OSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbFNlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpt
ZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlz
VW5kZWZpbmVkKCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVy
blR5cGV7IH0gOiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTg2LDYgKzc3MjEsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxTZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5ID0gYXJn
dW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExE
T01TdHJpbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyMDYs
NiArNzc0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElE
TEJvb2xlYW4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+
OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNzIyNiw2ICs3NzY1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MjQ2LDYgKzc3
ODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0
PElETEFueT4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcy
NjYsNiArNzgwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxPYmplY3QiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8g
YSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8
SURMT2JqZWN0Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExPYmplY3Q+
OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETE9iamVjdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFy
Z3VtZW50MC52YWx1ZSgpKSk7CkBAIC03Mjg2LDYgKzc4MzEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxOdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0
aG9kV2l0aE9wdGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0
aW9uYWxOdWxsYWJsZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczMDYsNiArNzg1Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE51CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gb2JqID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbCIsICJU
ZXN0T2JqIik7IH0pOwpAQCAtNzMyNiw2ICs3ODc1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
WFAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdp
dGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMWFBhdGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZl
ciIpOyB9KTsKQEAgLTczNDYsNiArNzg5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0
aW9uYWxSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50
KDApOwogICAgIGF1dG8gcmVjb3JkID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/
IFdURjo6bnVsbG9wdCA6IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmlu
ZywgSURMTG9uZz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtNzM2Niw2ICs3OTE5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUHIKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFByb21p
c2UiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gcHJvbWlzZSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxscHRy
IDogY29udmVydDxJRExQcm9taXNlPElETFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCkpOwpAQCAtNzM4Niw2ICs3OTQxLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxi
YWNrQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtNzQwOCw2ICs3OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWMKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25DYWxsYmFja0Fy
Z0FuZENhbGxiYWNrQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC03NDMzLDYgKzc5OTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
OwogICAgIGF1dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50
ZXJmYWNlPEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmciKTsgfSk7CkBAIC03NDUzLDYgKzgwMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tGdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTc0NzUsNiArODAzOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFjCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC03NTAwLDYgKzgwNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJh
Y2tGdQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9k
V2l0aENhbGxiYWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8
SURMTnVsbGFibGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVj
dCIsICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7IH0pOwpAQCAt
NzUyMCw2ICs4MDg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnIik7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMQ2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqanNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dE11c3RCZU9iamVjdEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJh
Y2siLCAiVGVzdE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFy
ZyIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwpAQCAtNzUzOSw2ICs4MTA4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdp
dGhDYWxsYmFja0FyZyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc1NjEsNiArODEzMiw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRp
dGlvbmFsTWV0aG9kMUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbE1ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmNvbmRp
dGlvbmFsTWV0aG9kMSgpKSkpOwogfQpAQCAtNzU3OSw2ICs4MTUyLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9u
YWxNZXRob2QyQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmNvbmRpdGlvbmFsTWV0aG9kMiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1l
dGhvZDIoKTsKQEAgLTc1OTksNiArODE3NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbE1l
dGhvZDMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRo
cm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2QzKCk7CkBAIC03
NjE4LDYgKzgxOTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJn
IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwpAQCAt
NzYzNiw2ICs4MjE1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2QKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1
dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFy
ZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAg
LTc2NTQsNiArODIzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBh
dXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
YXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzY2OSw2ICs4MjUyLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92
ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc2ODQsNiArODI2OSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q1Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGNhbGxiYWNrID0g
Y29udmVydDxJRExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
b3ZlcmxvYWRlZE1ldGhvZCIpOyB9KTsKQEAgLTc2OTksNiArODI4Niw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q2Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92
ZXJsb2FkZWRNZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKQEAgLTc3MTQsNiArODMwMyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5QXJnID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3MjksNiArODMyMCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2Q4Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRo
b2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc3NDQsNiArODMzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2Q5Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpv
dmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNl
PFdpbmRvd1Byb3h5Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIDAsICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldp
bmRvd1Byb3h5Iik7IH0pOwpAQCAtNzc1OSw2ICs4MzU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEwQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJs
b2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElE
TERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBA
IC03Nzc0LDYgKzgzNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCbwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byBhcnJheUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3ODksNiArODM4OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNzgwNCw2ICs4NDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm8KICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYmxv
YkFyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPEJsb2I+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTc4MTgsNiArODQyMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2RPdmVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QiKTsK
ICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7CiAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kMTNCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVk
VGhpcykpKTsKQEAgLTc4NzAsNiArODQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
Nzg4OCw2ICs4NDk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RX
aXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc5MDYsNiArODUxNSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjpt
aW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3ND
b3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtNzkzNyw2ICs4NTQ4LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om92ZXJsb2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBv
YmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURM
SW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CkBAIC03OTUyLDYgKzg1NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzk2Nyw2
ICs4NTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAg
IGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc5OTIsNiArODYwOSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxU
ZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CkBAIC04MDA3LDYgKzg2MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kV2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3Zl
cmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFsdWUg
PSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3Ry
aW5nLCBJRExMb25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
QEAgLTgwMjIsNiArODY0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CiAgICAgc2l6
ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpOwogICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rp
bmd1aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgwNDks
NiArODY3Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1
aXNoaW5nVW5pb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODA2Nyw2ICs4NjkyLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAg
ICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0
T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CkBAIC04MDg1LDYgKzg3MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9k
V2l0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5n
VW5pb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7CiAgICAg
ICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpOwpAQCAtODEwNyw2ICs4NzM2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51
bGxhYmxlVW5pb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxMjIsNiAr
ODc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBh
dXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1l
bnQwLnZhbHVlKCkpOwpAQCAtODEzNyw2ICs4NzcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFi
bGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOwogICAgIHNpemVf
dCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5n
dWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MTY0LDYg
Kzg3OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpl
Y3RPck5vZGUgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZl
cnQ8SURMVW5pb248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxNzksNiArODgxNiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
V2l0aE9wdGlvbmFsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZFdpdGhPcHRpb25hbFVuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJ
RExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODE5
NCw2ICs4ODMzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWwKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1p
bjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0Nv
dW50ID09IDApIHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMpKSk7CkBAIC04MjIyLDYgKzg4
NjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVy
ZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAwLCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25E
aXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwpAQCAtODI0MCw2ICs4ODgz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQ
YXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJm
YWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAwLCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9u
RGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CkBAIC04MjU4LDYgKzg5
MDMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdp
dGhOdWxsYWJsZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiAgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwog
ICAgIGlmIChhcmdzQ291bnQgPT0gMikgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5n
QXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTgyODEsNiArODkyOCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
ckZ1bmN0aW9uQ2xhc3NNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpjbGFzc01ldGhvZCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgp
OwogICAgIFRlc3RPYmo6OmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTgyOTcsNiArODk0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoT3B0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjbGFz
c01ldGhvZFdpdGhPcHRpb25hbCIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJnID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJu
VHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVy
dDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAt
ODMxNCw2ICs4OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KEoKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kMiIpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xh
c3NNZXRob2QyKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAt
ODMyOSw2ICs4OTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTgzNDYsNiArOTAwMSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpvdmVybG9hZGVkTWV0aG9kMSIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdHlwZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CkBAIC04MzY0LDYgKzkwMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxTwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9
IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlm
IChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgzOTEsNiArOTA1MCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aENsYW1wCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtODQxNiw2ICs5MDc3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xh
bXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0
aG9kV2l0aENsYW1wT25PcHRpb25hbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMQ2xhbXBB
ZGFwdG9yPElETExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkp
OwpAQCAtODQzNiw2ICs5MDk5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9y
Y2VSYW5nZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODQ2MSw2
ICs5MTI2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0
aW9uYWwiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURM
TG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04NDgx
LDYgKzkxNDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNl
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NTAzLDYgKzkxNzIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODUyMyw2ICs5MTk0LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlz
dEZ1bmN0aW8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmRv
bVN0cmluZ0xpc3RGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtODU0Myw2ICs5MjE2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmEKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhPcHRpb25h
bFVuaW9uUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIG9wdGlvbmFsVW5pb24gPSBhcmd1bWVudDAudmFsdWUoKS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURM
U2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9u
YWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8SURMVW5yZXN0
cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmlu
ZywgSURMU2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtODU2Myw2ICs5MjM4LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aEFuZFdpdGhvdXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODU4OCw2ICs5MjY1LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVu
dEJ5SWRCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OmdldEVsZW1lbnRCeUlkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC04NjA4LDYgKzkyODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHkoSgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Z2V0U1ZHRG9jdW1lbnQiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1l
bnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSkpOwogfQpAQCAtODYyMyw2ICs5
MzA0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29udmVydDFCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQxIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC04NjQ1LDYgKzkzMjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpK
UwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29udmVydDIi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg2NjcsNiArOTM1Miw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkNvbnZlcnQzQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpjb252ZXJ0MyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwpAQCAtODY4OSw2ICs5Mzc2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6SlMKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQ0Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NzExLDYgKzk0MDAsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NdXRhYmxlUG9pbnRGdW5jdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBK
U1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1
bmN0aW9uKCkpKSk7CiB9CkBAIC04NzI2LDYgKzk0MTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VCb2R5KEpTQzo6
SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YmFuYW5h
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Nj
b3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmJhbmFuYSgpOwpAQCAtODc0Myw2ICs5NDM2LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnZhcmlhZGljU3RyaW5nTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0KSk7CkBAIC04NzY3LDYgKzk0NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1l
dGhvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dmFyaWFk
aWNEb3VibGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTg3OTEsNiArOTQ4OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp2YXJpYWRpY05vZGVNZXRob2QiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg4MTUsNiArOTUxNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blZhcmlhZGljVW5pb25NZXRob2RCCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjp2YXJpYWRpY1VuaW9uTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0KSk7CkBAIC04ODM5LDYgKzk1NDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpTQzo6SlNHbG9i
YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04ODY0LDYgKzk1NjcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6dGVzdFByb21pc2VGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwpAQCAtODg4MSw2ICs5NTg2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODkwMyw2ICs5NjEwLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2Uo
KTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNl
KSkpOwpAQCAtODkyMCw2ICs5NjI5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rp
b25XaXRoT3B0aW9uYWxJbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTg5NDAsNiArOTY1
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
YXV0byBhID0gY29udmVydDxJRExGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKQEAgLTg5NTUsNiArOTY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlz
ZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byByZXF1ZXN0ID0gY29udmVydDxJRExJbnRl
cmZhY2U8RmV0Y2hSZXF1ZXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwpAQCAtODk3MCw2ICs5Njg1LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90
PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAx
KSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwpAQCAtODk5Myw2ICs5NzEwLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJv
bWlzZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RT
dGF0aWNQcm9taXNlRnVuY3Rpb24iKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBU
ZXN0T2JqOjp0ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05MDA5LDYgKzk3Mjgs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JGdW5jdGlvblRlc3RTdGF0aWNQcm9taXNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24i
KTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OnRlc3RTdGF0aWNQcm9taXNl
RnVuY3Rpb25XaXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTAyNSw2ICs5NzQ2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dEN1c3RvbVByb21pc2VGdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnRlc3RDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUHJv
bWlzZUZ1bmN0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBXVEZNb3ZlKHBy
b21pc2UpKSkpKTsKIH0KIApAQCAtOTAzOSw2ICs5NzYyLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljQ3Vz
dG9tUHIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RT
dGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnRlc3RTdGF0aWNDdXN0b21Qcm9t
aXNlRnVuY3Rpb24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFdURk1vdmUocHJv
bWlzZSkpKSkpOwogfQogCkBAIC05MDUzLDYgKzk3NzgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJu
c093bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdEN1
c3RvbVJldHVybnNPd25Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUmV0dXJu
c093blByb21pc2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7
CiB9CiAKQEAgLTkwNjcsNiArOTc5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmV0dXJuc093blBy
b21pc2VBbmRQcm9taXNlUHJveHlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJldHVybnNPd25Qcm9taXNl
QW5kUHJvbWlzZVByb3h5RnVuY3Rpb24oKSkpKTsKIH0KQEAgLTkwODMsNiArOTgxMiw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNvbmRpdGlvbmFsT3ZlcmxvYWQxCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjb25kaXRpb25hbE92ZXJsb2FkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpA
QCAtOTEwMSw2ICs5ODMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwog
ICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTkxMjAsNiArOTg1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3Zlcmxv
YWRPCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBzaXplX3QgYXJn
c0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7
CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hp
bmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtOTE0Nyw2ICs5ODgy
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8g
c3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CkBAIC05MTYzLDYgKzk5MDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92
ZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2luZ2xlQ29u
ZGl0aW9uYWxPdmVybG9hZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTE4MCw2ICs5OTE5LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZCIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAg
ICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC05MjAzLDYgKzk5NDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0YWNoU2hhZG93
Um9vdCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtOTIyNSw2ICs5
OTY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJh
bWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNDcsNiAr
OTk5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpidWZmZXJTb3VyY2VQYXJhbWV0ZXIiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNjksNiArMTAwMTYsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdh
Y3lDYWxsZXJOYW1lZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6bGVnYWN5Q2FsbGVyTmFtZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKQEAgLTkyOTEsNiArMTAwNDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdFJldHVyblZhbHVl
T3B0aW1pemF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05
MzE2LDYgKzEwMDY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlv
bldpdGhFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkzNDEsNiArMTAwOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dp
bmRvd0Z1bmN0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dGdW5jdGlvbigpOwpAQCAtOTM1OCw2ICsxMDExMyw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
bHlFeHBvc2VkCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
b25kaXRpb25hbGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwuY29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKCk7CkBAIC05Mzc1LDYgKzEw
MTMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxseUV4cG9zZWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3Jr
ZXJGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRv
V2luZG93QW5kV29ya2VyRnVuY3Rpb24oKTsKQEAgLTkzOTIsNiArMTAxNTEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0
cmluZ0JvZHkoSlNDOjpKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c3RyaW5naWZpZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0
cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmNwcAppbmRleCA0YjRiYTczODNmYjkwNWYyZTM3OTkzYWI5OTMwYTFmMDUxMGU2
M2YyLi45ZWVhYjg3NGJlNjQ3MDg3NzY2MTQ3NzdiZDcxMjY0ODQ0YTBhNWFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9u
Q29uZGl0aW9uYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRp
b24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNl
TG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
QEAgLTIwNyw2ICsyMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbgogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpub25Db25k
aXRpb25hbE9wZXJhdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5ub25Db25kaXRpb25hbE9w
ZXJhdGlvbigpOwpAQCAtMjI3LDYgKzIzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uQ29uCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWw6OmNvbmRpdGlvbmFsT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5kZXgg
M2QwNzkzMjBmNDk0NjVhOTY5YTY4ZGY0ZGQ1NTFjOGFjNDIzNzI3YS4uZjdkMGFhOWU3OGM5ODNk
NTIzYTI0MmNjZWU1YmFmNjE4ZjI0NDIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zLmNwcApAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9u
UHJvdG90eXBlLmg+CkBAIC0yNDQsNiArMjQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPdmVycmlkZUJ1aWx0aW5z
OjpuYW1lZEl0ZW0iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKaW5kZXggMzI0NDNmNTI2YmU0
M2IyNDUzOThkNDAwNzI1OGI2MjZjNzhmNmM0Mi4uODgxMzZjOGVjMzU0YWM4YTgwYjE3MTBlOWE5
YmM1NThhZmU4NWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CkBAIC0yODMsNiArMjg1LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudDo6cHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlz
ZTxJRExBbnk+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSwgdGhyb3dTY29wZSwgaW1wbC5wcm9taXNlKCkpKSk7CiB9CkBAIC0yOTYsNiArMzAwLDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbkdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudDo6cmVhc29uIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhc29uKCkp
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKaW5kZXggOGM1OTE3YTM2MWJmNGNi
YWRiNzBlZjgzNGNjMzRmNjEwYjcxNmY0Zi4uZWU3ZGYyNDQyZGY0ODYyNzg5NjIwOWY4ZTNiNGFh
OTViODhkZGJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcApAQCAtMzksNiArMzks
OCBAQAogI2luY2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlh
bGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDMsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0U2VyaWFsaXphdGlvbjo6Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5maXJzdFN0cmluZ0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtMjU0LDYgKzI1OCw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
ZXJpYWxpemF0aW9uOjpzZXRGaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3Miw2ICsyNzgsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0
ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFs
aXphdGlvbjo6c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25n
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0yODUsNiArMjkzLDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNl
dFNlY29uZExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzAzLDYgKzMxMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemF0aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjp0aGlyZFVuc2VyaWFs
aXphYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8
VGVzdEV4Y2VwdGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkp
KTsKIH0KQEAgLTMxNiw2ICszMjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXphdGlvblRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0VGhpcmRVbnNlcmlh
bGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2Vw
dGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0
cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6
YXRpb24iLCAidGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0
LDYgKzM0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWRE
b3VibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTM0Nyw2ICszNjMsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJp
YnV0ZVNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlv
bjo6c2V0Rm91cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY1LDYgKzM4Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
ZmlmdGhMb25nQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNzgsNiArMzk4LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6
YXRpb246OnNldEZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0zOTYsNiArNDE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxP
YmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNpeHRo
VHlwZWRlZkF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRG91YmxlPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtNDA5LDYgKzQzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RTZXJpYWxpemF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRTaXh0aFR5
cGVkZWZBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC00MjcsNiArNDUzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXQKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldmVudGhEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJm
YWNlPFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVj
dGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NDAsNiArNDY4LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGVTZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNl
cmlhbGl6YXRpb246OnNldFNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9u
IiwgInNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQ1OCw2ICs0ODgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWlnaHRoSW5k
aXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNl
PFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aElu
ZGlyZWN0bHlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3MSw2ICs1MDMsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVT
ZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXph
dGlvbjo6c2V0RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJlaWdodGhJ
bmRpcmVjdGx5QXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5j
ZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQ4OSw2ICs1MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
bk5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6bmludGhPcHRpb25hbERpcmVjdGx5U2Vy
aWFsaXphYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJs
ZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01
MDIsNiArNTM4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25O
aW50aE9wdGlvbmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNl
cmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGly
ZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWwiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC01MjAsNiArNTU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRp
b25UZW50aEZyb3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MzMsNiAr
NTczLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTU1MSw2ICs1OTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkVsZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWxldmVudGhTZXF1ZW5jZUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3Ry
aW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRo
cm93U2NvcGUsIGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTY0
LDYgKzYwOCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxl
dmVudGhTZXF1ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTU4Miw2ICs2MjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2Vy
aWFsaXphdGlvblR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcgogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6dHdlbGZ0aEludGVyZmFj
ZVNlcXVlbmNlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5j
ZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01OTUsNiArNjQz
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50
ZXJmYWNlU2VxdWVuY2VBdHRyaWJ1dGVTZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdC5jcHAKaW5kZXggY2EwZWVmMTM1NWUyNDdhMDA4NzY3MjJkODcw
ZjNlMGU2OTE3Mjc4OC4uZjE0ZWViMmI3NDEyMzZjYjFkMGVjODg2OGFjYzVlN2QxOTk5ZDUwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCkBAIC0zMCw2ICsz
MCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXpl
ci5oPgpAQCAtMTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6aW5oZXJpdExv
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpKTsK
IH0KQEAgLTIwMyw2ICsyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsbwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNldEluaGVyaXRM
b25nQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAppbmRl
eCAzMmFmYzM2YmM3MzhmNzlkMzAyYTY3YzJjOTcxZmY4YWEyYzVhZDc2Li4zODNjNDNhODNkY2Q4
MzA5ODBjODEyMWE0YzBjMjI5NjZlMjExNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6YXRpb25Jbmhlcml0RmluYWwuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAtMTkzLDYgKzE5
NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZp
bmFsRmluYWxMb25nQXR0cmlidXRlRm9vR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpmaW5hbExvbmdBdHRyaWJ1dGVGb28i
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKSk7CiB9CkBAIC0yMDYs
NiArMjEwLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNldEZpbmFsTG9uZ0F0dHJp
YnV0ZUZvbyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0y
MjQsNiArMjMwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0RmluYWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmFsTG9uZ0F0dHJp
YnV0ZUJhciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpKTsKIH0K
QEAgLTIzNyw2ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2V0RmluYWxM
b25nQXR0cmlidXRlQmFyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAKaW5kZXggYzE1NTY3ZTI0NjMxMjkzNDNkMTkwYjVhYTQ1NDE1NmViODQ2MDEzNC4u
NGJlZTJjZGFhZjQ4MmZiNWY4MmE5YWFmZTk1MzMyODVhOGYwYzEyOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTM3
LDYgKzM3LDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0y
MTcsNiArMjE5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFsdWUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZSgpKSkpOwogfQpAQCAtMjMwLDYgKzIzNCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VWYWx1ZVNldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldFZhbHVlIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0yNDgsNiArMjU0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIo
SlMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6cmVhZG9ubHlWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJl
YWRvbmx5VmFsdWUoKSkpKTsKIH0KQEAgLTI2MSw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0
ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjYWNoZWRWYWx1ZSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZh
bHVlID0gdGhpc09iamVjdC5tX2NhY2hlZFZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2Fj
aGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjc5
LDYgKzI4OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldENhY2hlZFZh
bHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTcsNiArMzA5LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRz
R2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6cG9ydHMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0
cygpKSkpOwogfQpAQCAtMzEwLDYgKzMyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0CiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U6OmNhY2hlZFJlYWRvbmx5VmFsdWUiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IHRoaXNPYmplY3QubV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1
cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpA
QCAtMzMwLDYgKzM0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpmdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzUy
LDYgKzM3MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5j
dGlvblJldHVybmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9u
UmV0dXJuaW5nKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAxNTEzZmQ4
ZmFkNmViMjNiYzVhZmRiZmU5MjVmNjFjZmM4NDNlODQ3Li43Y2QwMGEyNWY5YTJiNGY1MWIzZmRl
NGNjNTEyN2ZkYmJkMDEzMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTI5LDYg
KzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAi
SlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KQEAgLTE5MCw2ICsxOTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyOjp0b1N0
cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0
cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGltcGwudG9TdHJpbmcoKSkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCmlu
ZGV4IGQwMTdkZmI0OTY3MWU3ZDdmMGIwYjU5MzMwYmU4NzYwNjMxNTg0NWEuLjU0Y2ZiZjc5NjNj
OTY3MjM1YmQ5NWNhNzZjM2RhZTA2MDVkZGQzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcApAQCAtMjksNiArMjksOCBAQAog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJh
dGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5o
PgpAQCAtMTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRp
b246OnRvU3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCmlu
ZGV4IDNmNjI4NzYzOWY0MjhiODMwY2JmNDNlMzE2NjA2ZmU4OTZlZjE2NzcuLjUyZmNiNWYxMmQ2
NzExNzEwNGExZmQwYzVhYjk3Yjk5MWYyNmRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRl
ICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIK
ICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5
Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZp
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIw
Nyw2ICsyMTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZp
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJp
bmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJp
bmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRB
cy5jcHAKaW5kZXggYjg2ZjEyZjkxNzUzOWMyZDUzOWQ1MDljOWFhODQ4NDJmOWZhMjZhMy4uMDg2
NTI5N2U4OWQ5NzRhNjFlYWJlOGNiNjhiMDljYTkyNDFlMDA0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKQEAg
LTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJv
dG90eQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVy
T3BlcmF0aW9uSW1wbGVtZW50ZWRBczo6YWx0ZXJuYXRlSWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSkpOwogfQpAQCAtMjA3LDYgKzIx
MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXNQcm90b3R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjphbHRlcm5h
dGVJZGVudGlmaWVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlm
aWVyKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCmluZGV4IDY2NmUzNTY3ZWQ0OTg2Mzc2YmM3ZGZhZTRk
NGQyZGFjYTliMDBiNzIuLjE5ZThlNmU3MWFjYmM1ODM4MjBhY2I5YjMzMmRiODc5YzU2ZDRlNTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNE
T01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkyLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uTmFtZWRUb1N0cmluZ1Byb3RvdHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnRvU3RyaW5nIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVh
ZE9ubHlBdHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCmluZGV4IGM1MDM3ZWYz
NTFiOTU2MWZiMGMwN2YwYjM1YWJmMGRlMTAxMDc3MGMuLmU1NTM0NjE1OGUxNDgzY2FkMzZmZDVk
NjYxMmZjNjE3ZThiODhiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJSZWFkT25seUF0dHJpYnV0ZS5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNs
dWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVy
LmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Niw2ICsx
OTgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0
dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMSw2ICsyMTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZVByb3RvdHlwZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZpZXIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRX
cml0ZUF0dHJpYnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCmluZGV4IDkwMDI5YmNl
NjM4NjJlN2NmM2I4NzhmMzM5NjBiM2Q2MGYzZmY5YTQuLmNjZDFjMmViMjBlZDNkMjExYWU4Zjlj
NWExNjEyNjI1ZTg2Y2U0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lm
aWVyUmVhZFdyaXRlQXR0cmlidXRlLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTk3LDYg
KzE5OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMCw2ICsyMTQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1
dGVJZGVudGlmaWVyU2V0dGVyKEpTR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnNldElkZW50aWZpZXIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMzAsNiArMjM2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVh
ZFdyaXRlQXR0cmlidXRlUHJvdG90eXBlRnUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKaW5kZXggMWQ2ODlkMjllYTAyOWI2YzZlNDcxN2JhMjFlYzZjOTgyMDUzNmI3NS4uZTMx
NTI0ZjEzYjZlZTgxNTBmMGFkZmZjZjY1MjAyZjQ1NjRmNDQzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCkBAIC00NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2Uu
aCIKICNpbmNsdWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9i
ai5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCkBAIC0zMDYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjp1bnNpZ25lZExvbmdM
b25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0
cigpKSkpOwogfQpAQCAtMzE5LDYgKzMyMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0VW5zaWduZWRMb25n
TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzM3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzZXJpYWxpemVkU2NyaXB0VmFs
dWUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkp
KTsKIH0KQEAgLTM1MCw2ICszNTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNTZXJpYWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2VyaWFsaXplZFNjcmlwdFZh
bHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjcsNiArMzc3LDggQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0Nv
bnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OlRlc3RTdWJP
YmoiKTsKICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
QEAgLTM3OSw2ICszOTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNB
dHRyaWJ1dGVXaXRoQ2xhbXBHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcCIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFt
cCgpKSkpOwogfQpAQCAtMzkyLDYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0QXR0cmlidXRlV2l0
aENsYW1wIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdM
b25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDEwLDYgKzQyNiw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZkdldHRlcihK
U0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6YXR0
cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExD
bGFtcEFkYXB0b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuYXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVmKCkpKSk7CiB9CkBAIC00MjMsNiArNDQxLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1w
SW5UeXBlZGVmU2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFR5cGVkZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDEs
NiArNDYxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291
cmNlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpidWZmZXJTb3VyY2VBdHRyIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2Nv
cGUsIGltcGwuYnVmZmVyU291cmNlQXR0cigpKSkpOwogfQpAQCAtNDU0LDYgKzQ3Niw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RU
eXBlZGVmczo6c2V0QnVmZmVyU291cmNlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJ
RExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NDcyLDYgKzQ5Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0RvbVRp
bWVTdGFtcEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6ZG9tVGltZVN0YW1wQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5kb21UaW1lU3RhbXBBdHRyKCkpKSk7CiB9CkBAIC00ODUsNiArNTEx
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpzZXREb21UaW1lU3RhbXBBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwNSw2ICs1MzMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbkZ1bmNCb2R5KEpTQzo6SgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpmdW5jIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHggPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpID8gQ29udmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNv
bnZlcnQ8SURMU2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVu
dDAudmFsdWUoKSk7CkBAIC01MjUsNiArNTU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KEoK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2hh
ZG93Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NTksNiArNTkx
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoU2VxdWUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RUeXBlZGVmczo6bWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NzksNiArNjEzLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25O
dWxsYWJsZVNlcXVlbmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RU
eXBlZGVmczo6bnVsbGFibGVTZXF1ZW5jZUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjAxLDYgKzYzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnNlcXVlbmNl
T2ZOdWxsYWJsZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTYyMyw2ICs2NjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZOdWxs
YWJsZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NSw2
ICs2ODUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNQcm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY2Nyw2ICs3MDksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvblVuaW9uQXJnQm9keShKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFR5cGVkZWZzOjp1bmlvbkFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtNjg5LDYgKzczMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmZ1bmNXaXRo
Q2xhbXAiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTcxNCw2ICs3
NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXBJbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpmdW5jV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03MzYsNiArNzg0LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25Qb2ludEZ1bmN0aW9uQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RUeXBlZGVmczo6cG9pbnRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9pbnRGdW5jdGlvbigpKSkpOwog
fQpAQCAtNzUxLDYgKzgwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTc3MSw2ICs4
MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzkxLDYgKzg0NSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0
aW9uQ2FsbFdpdGhTZXF1ZW5jCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0VHlwZWRlZnM6OmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04MTEsNiArODY3LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoRXhjZXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RUeXBlZGVmczo6bWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhv
ZFdpdGhFeGNlcHRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQxYzlmZWM2MWUyOGJh
YzM4N2NjYzdiOWIzM2Y1ZmQwZDhmMzQxZTIuLmUzMDkyYjdlOWY1MjZlODIxNjA4ZjkzOTdmMmU1
ZDYzYmZkMjlkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02MzMsNyArNjMzLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCgpIGNvbnN0OwotICAgIE9wdGlvbmFs
PEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCgpIGNvbnN0OworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBm
cmFtZUlEKCkgY29uc3Q7CisjZWxzZQorICAgICAgICBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+
IGZyYW1lSUQoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgLy8gdG8gZ2V0IHZpc3VhbGx5IG9yZGVy
ZWQgaGVicmV3IGFuZCBhcmFiaWMgcGFnZXMgcmlnaHQKICAgICB2b2lkIHNldFZpc3VhbGx5T3Jk
ZXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjJkNWFkODJlNjg5YzgzZjBlODNkMzdiYjdhM2IxOTI0NjI4YzRkMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5jcHAKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkV4ZWN1dGlvblN0YWNrLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5n
IEV4ZWN1dGlvblN0YWNrOjp0b0pTT05TdHJpbmcodWludDY0X3QgZnJhbWVJRCkKK3sKKyAgICBp
ZiAoZG9jdW1lbnRJZFVSTE1hcC5maW5kKGZyYW1lSUQpID09IGRvY3VtZW50SWRVUkxNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgYXV0byBkb2N1bWVudFVSTCA9IGRv
Y3VtZW50SWRVUkxNYXAuZ2V0KGZyYW1lSUQpOworCisgICAgYXV0byBvYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJUb3BMZXZlbERvbWFpbiIs
IHJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiVG9w
TGV2ZWxVUkwiLCBkb2N1bWVudFVSTC5zdHJpbmcoKSk7CisgICAgb2JqZWN0LT5zZXRJbnRlZ2Vy
KCJGcmFtZUlEIiwgZnJhbWVJRCk7CisgICAgYXV0byBzY3JpcHRFeGVjdXRpb24gPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgCisgICAgaWYgKGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3Vt
ZW50cy5maW5kKGZyYW1lSUQpID09IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5lbmQo
KSkgeworICAgICAgICBvYmplY3QtPnNldEFycmF5KCJTY3JpcHRFeGVjdXRpb24iLCBXVEZNb3Zl
KHNjcmlwdEV4ZWN1dGlvbikpOworICAgICAgICByZXR1cm4gb2JqZWN0LT50b0pTT05TdHJpbmco
KTsKKyAgICB9CisgICAgCisgICAgYXV0byBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudCA9
IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5nZXQoZnJhbWVJRCk7CisgICAgCisgICAg
Zm9yIChhdXRvIHNjcmlwdFdpdGhBUElzS2V5IDogYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1l
bnQua2V5cygpKSB7CisgICAgICAgIGF1dG8gc2NyaXB0V2l0aEFQSXMgPSBhcGlzQ2FsbGVkQnlT
Y3JpcHRzSW5Eb2N1bWVudC5nZXQoc2NyaXB0V2l0aEFQSXNLZXkpOworICAgICAgICBhdXRvIGFj
Y2Vzc2VkQVBJcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgZm9yIChhdXRvIGNv
bnN0JiBBUElOYW1lIDogc2NyaXB0V2l0aEFQSXMpIHsKKyAgICAgICAgICAgIGF1dG8gdGVtcCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICB0ZW1wLT5zZXRJbnRlZ2VyKEFQ
SU5hbWUua2V5LCBBUElOYW1lLnZhbHVlKTsKKyAgICAgICAgICAgIGFjY2Vzc2VkQVBJcy0+cHVz
aE9iamVjdChXVEZNb3ZlKHRlbXApKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFwaUV4ZWN1
dGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0
SW50ZWdlcigiU2NyaXB0SUQiLCBzY3JpcHRXaXRoQVBJc0tleSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgPT0gZG9jdW1l
bnRJZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKQorICAgICAgICAgICAgYXBpRXhlY3V0aW9uLT5z
ZXRTdHJpbmcoIlNjcmlwdFVSTCIsICJVbmF2YWlsYWJsZSIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcyA9IGRvY3VtZW50SWRBbmRT
Y3JpcHRJZFVSTE1hcC5nZXQoZnJhbWVJRCk7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcy5maW5kKHNjcmlwdFdpdGhBUElzS2V5KSA9PSBkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLmVuZCgpKQorICAgICAgICAgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5n
KCJTY3JpcHRVUkwiLCAiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygiU2NyaXB0VVJMIiwgZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcy5nZXQoc2NyaXB0V2l0aEFQSXNLZXkpKTsKKyAgICAgICAgfQorICAgICAg
ICBhcGlFeGVjdXRpb24tPnNldEFycmF5KCJBY2Nlc3NlZEFQSXMiLCBXVEZNb3ZlKGFjY2Vzc2Vk
QVBJcykpOworICAgICAgICBzY3JpcHRFeGVjdXRpb24tPnB1c2hPYmplY3QoV1RGTW92ZShhcGlF
eGVjdXRpb24pKTsKKyAgICB9CisgICAgCisgICAgb2JqZWN0LT5zZXRBcnJheSgiU2NyaXB0RXhl
Y3V0aW9uIiwgV1RGTW92ZShzY3JpcHRFeGVjdXRpb24pKTsKKyAgICByZXR1cm4gb2JqZWN0LT50
b0pTT05TdHJpbmcoKTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRp
b25TdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYTcwMTZlOWU5MjRmNjZhZjIzMDNlYzUyMzlmZGU1MWE2
MzJkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9u
U3RhY2suaApAQCAtMCwwICsxLDcxIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisq
IGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IEV4ZWN1dGlvblN0YWNrIHsKKyAgICBleHBsaWNpdCBFeGVjdXRpb25TdGFjayhjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorICAgICAgICA6IHJlZ2lzdHJhYmxlRG9tYWluIHsg
ZG9tYWluIH0KKyAgICB7CisgICAgfQorCisgICAgRXhlY3V0aW9uU3RhY2soKSA9IGRlZmF1bHQ7
CisgICAgRXhlY3V0aW9uU3RhY2soY29uc3QgRXhlY3V0aW9uU3RhY2smKSA9IGRlbGV0ZTsKKyAg
ICBFeGVjdXRpb25TdGFjayYgb3BlcmF0b3I9KGNvbnN0IEV4ZWN1dGlvblN0YWNrJikgPSBkZWxl
dGU7CisgICAgRXhlY3V0aW9uU3RhY2soRXhlY3V0aW9uU3RhY2smJikgPSBkZWZhdWx0OworICAg
IEV4ZWN1dGlvblN0YWNrJiBvcGVyYXRvcj0oRXhlY3V0aW9uU3RhY2smJikgPSBkZWZhdWx0Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvSlNPTlN0cmluZyh1aW50NjRfdCAvKiBGcmFt
ZUlEICovKTsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOworCisg
ICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIEZyYW1lSUQg
YW5kIERvY3VtZW50IFVSTC4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBVUkw+IGRvY3VtZW50SWRV
UkxNYXA7CisgICAgCisgICAgLy8gVGhpcyBIYXNoTWFwIG1haW50YWlucyBhIHN0YWNrIG9mIGV4
ZWN1dGluZyBzY3JpcHRzIGluIGVhY2ggZG9jdW1lbnQuCisgICAgLy8gQ3VycmVudGx5LCBpdCBv
bmx5IGNhcHR1cmVzIGNsYXNzaWMgc2NyaXB0cy4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBWZWN0
b3I8dWludDY0X3Q+PiBleGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHM7CisgICAgCisgICAgLy8g
VGhpcyBIYXNoTWFwIG1haW50YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIEZyYW1lSUQsIFNjcmlw
dElELCBhbmQgU2NyaXB0IFVSTHMuCisgICAgSGFzaE1hcDx1aW50NjRfdCwgSGFzaE1hcDx1aW50
NjRfdCwgU3RyaW5nPj4gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwOworICAgIAorICAgIC8v
IFRoaXMgSGFzaE1hcCBtYWludGFpbnMgdGhlIEFQSXMgY2FsbGVkIGJ5IGEgc2NyaXB0IGluIGEg
ZG9jdW1lbnQuCisgICAgLy8gSGFzaE1hcDxGcmFtZUlELCBIYXNoTWFwPFNjcmlwdElELCBIYXNo
Q291bnRlZFNldDxDb3VudE9mQVBJTmFtZXM+Pj4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNo
TWFwPHVpbnQ2NF90LCBIYXNoQ291bnRlZFNldDxTdHJpbmc+Pj4gYXBpc0NhbGxlZEJ5U2NyaXB0
c0luRG9jdW1lbnRzOworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5oCmluZGV4IDY3ZmJmZmMyZDIwYWIyZmQ4YmE1NmE4ZGZhNGQ0
YWU3OGE5NWViMjAuLjM4MWU4ODMwMDlhN2NkMDg2MmQ2ZjUwOTY4YWU3ZTNmZGQxYTQyMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KIApAQCAtNTcsNiArNTgsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBs
b2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OlNjcmVlbkFQSSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxvZ1N1YnJlc291cmNl
TG9hZGluZ0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIC8qIGZpcnN0UGFydHlE
b21haW4gKi8sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiAvKiB0aGlyZFBhcnR5RG9tYWluICov
LCBib29sIC8qIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uICovKSB7IH0KIAorICAgIHZpcnR1
YWwgdm9pZCBwdXNoQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiwgY29uc3QgdWludDY0X3Qg
Lyogc2NyaXB0SUQgKi8sIGNvbnN0IFN0cmluZyYgLyogc2NyaXB0VVJMICovKSB7IH0KKyAgICB2
aXJ0dWFsIHVpbnQ2NF90IHBvcEFjdGl2ZVNjcmlwdChjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIHVpbnQ2NF90IHBlZWtBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1l
bnQmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTdHJpbmcgcGVla1NjcmlwdEV4ZWN1dGlv
blN0YWNrKGNvbnN0IERvY3VtZW50JikgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgbG9nQWNjZXNzZWRBUElzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIC8q
IGFwaU5hbWUgKi8pIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHBlZWtBY2Nlc3NlZEFQSXMoY29u
c3QgRG9jdW1lbnQmKSB7IHJldHVybiB7IH07IH0KKwogICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRp
c3RpY3NGb3JVUkwoY29uc3QgVVJMJikgeyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNlbnRyYWxTdGF0aXN0aWNzU3RvcmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJTdGF0ZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKaW5kZXgg
ZTIzYzc5MTcyYTU4OWI3ZTY4N2U3MGE4NjBiNDg1ZWJlZTRmYzRkYy4uZTQxM2NkOGNhY2YyZmQ2
ZWNhNzY0OWYzODk1NDA4OWUwZWQyMmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuY3BwCkBAIC05OCw2ICs5OCwxNyBAQCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBXZWJS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaQogICAg
IH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1Mp
CitFeGVjdXRpb25TdGFjayYgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZUV4ZWN1dGlv
blN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
bikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNFcGhlbWVyYWwoKSk7CisKKyAgICByZXR1cm4g
bV9leGVjdXRpb25TdGFja01hcC5lbnN1cmUoZG9tYWluLCBbJmRvbWFpbl0geworICAgICAgICBy
ZXR1cm4gRXhlY3V0aW9uU3RhY2soZG9tYWluKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9
CisjZW5kaWYKKwogdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2NoZWR1bGVOb3RpZmlj
YXRpb25JZk5lZWRlZCgpCiB7CiAgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1w
dHkoKSkgewpAQCAtMjYxLDYgKzI3MiwxOTUgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb24KICNl
bmRpZgogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2NyaXB0
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0
IFN0cmluZyYgc2NyaXB0VVJMKQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorCisgICAgYXV0byBmcmFt
ZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisgICAgYXV0byYgZXhlY3V0
aW9uU3RhY2sgPSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lz
dHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfSk7CisgICAgCisgICAgLy8gUmVnaXN0ZXIg
c2NyaXB0IGlkIHdpdGggc2NyaXB0IHVybCBmb3IgZWFjaCBmcmFtZS4KKyAgICBpZiAoZXhlY3V0
aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgIT0gZXhl
Y3V0aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKSB7CisgICAgICAg
IGF1dG8gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcyA9IGV4ZWN1dGlvblN0YWNrLmRvY3VtZW50
SWRBbmRTY3JpcHRJZFVSTE1hcC5maW5kKGZyYW1lSUQpOworICAgICAgICAvLyBXZSB1c2UgSGFz
aE1hcC5hZGQgaGVyZSBiZWNhdXNlIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgc2NyaXB0IFVSTCBp
cyBub25lIChpbiBjYXNlIG9mIG1pY3JvdGFza3MpLgorICAgICAgICAvLyBIYXNoTWFwLmFkZCB3
aWxsIGVuc3VyZSB0aGF0IHRoZSBleGlzaXRuZyBzY3JpcHQgVVJMIGRvZXMgbm90IGdldCBvdmVy
d3JpdHRlbi4KKyAgICAgICAgZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcy0+dmFsdWUuYWRkKHNj
cmlwdElELCBzY3JpcHRVUkwpOworICAgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHM7CisgICAgICAg
IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMuc2V0KHNjcmlwdElELCBzY3JpcHRVUkwpOworICAg
ICAgICBleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuc2V0KGZyYW1l
SUQsIFdURk1vdmUoZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcykpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJh
bWVJRCkgIT0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmVuZCgp
KSB7CisgICAgICAgIGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3IgPSBleGVjdXRp
b25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKTsKKyAgICAg
ICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzY3JpcHRJRCk7
CisKKyAgICB9IGVsc2UgeworICAgICAgICAKKyAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiBleGVj
dXRpbmdTY3JpcHRzU3RhY2s7CisgICAgICAgIGV4ZWN1dGluZ1NjcmlwdHNTdGFjay5hcHBlbmQo
c2NyaXB0SUQpOworICAgICAgICBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1
bWVudHMuc2V0KGZyYW1lSUQsIFdURk1vdmUoZXhlY3V0aW5nU2NyaXB0c1N0YWNrKSk7CisgICAg
ICAgIAorICAgICAgICBleGVjdXRpb25TdGFjay5kb2N1bWVudElkVVJMTWFwLnNldChmcmFtZUlE
LCBkb2N1bWVudC51cmwoKSk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1l
bnQpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHRJRCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlw
dFVSTCk7CisjZW5kaWYKK30KKwordWludDY0X3QgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBv
cEFjdGl2ZVNjcmlwdChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKGlzRXBo
ZW1lcmFsKCkpCisgICAgICAgIHJldHVybiAwOworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBhdXRvIGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkg
fTsKKworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JS
ZWdpc3RyYWJsZURvbWFpbihSZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH0pOwor
ICAgIGlmIChleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChm
cmFtZUlEKSAhPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZW5k
KCkpIHsKKyAgICAgICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1
dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworCisg
ICAgICAgIGlmICghZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHko
KSkgeworCisgICAgICAgICAgICBhdXRvIHRlbXAgPSBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVy
YXRvci0+dmFsdWUubGFzdCgpOworCisgICAgICAgICAgICBpZiAoZXhlY3V0aW5nU2NyaXB0c1N0
YWNrSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBleGVjdXRpb25T
dGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMucmVtb3ZlKGZyYW1lSUQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9y
LT52YWx1ZS5yZW1vdmVMYXN0KCk7CisKKyAgICAgICAgICAgIHJldHVybiB0ZW1wOworICAgICAg
ICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworI2VuZGlmCisg
ICAgcmV0dXJuIDA7Cit9CisKK3VpbnQ2NF90IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhl
bWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNU
SUNTKQorICAgIGF1dG8gZnJhbWVJRCB7IGRvY3VtZW50LmZyYW1lSUQoKS0+dG9VSW50NjQoKSB9
OworCisgICAgYXV0byYgZXhlY3V0aW9uU3RhY2sgPSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJl
Z2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfSk7Cisg
ICAgaWYgKGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZy
YW1lSUQpICE9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQo
KSkgeworICAgICAgICBhdXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0
aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAg
ICAgIGlmICghZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUu
bGFzdCgpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRp
ZgorICAgIHJldHVybiAwOworfQorCitTdHJpbmcgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBl
ZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAg
aWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyNpZiBFTkFCTEUoV0VC
X0FQSV9TVEFUSVNUSUNTKQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWlu
IHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4
ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4ocmVnaXN0cmFibGVEb21haW4pOworCisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiUmVn
aXN0cmFibGUgZG9tYWluOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChyZWdpc3RyYWJsZURvbWFp
bi5zdHJpbmcoKSk7CisKKyAgICBmb3IgKGF1dG8ga2V5IDogZXhlY3V0aW9uU3RhY2suZXhlY3V0
aW5nU2NyaXB0c0luRG9jdW1lbnRzLmtleXMoKSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIkZyYW1lIElEOiAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIoa2V5KSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgIik7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiU2NyaXB0IFN0YWNrOiBbIik7CisgICAgICAgIGF1dG8g
ZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3IgPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdT
Y3JpcHRzSW5Eb2N1bWVudHMuZmluZChrZXkpOworCisgICAgICAgIGZvciAoYXV0byBjb25zdCYg
ZXhlY3V0aW5nU2NyaXB0IDogZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlKSB7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihleGVjdXRpbmdTY3Jp
cHQpKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICwiKTsKKyAgICAgICAg
fQorICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIl0iKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIlxuIik7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgcmV0dXJuIHsgfTsKKyNlbmRpZgor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBhcGlOYW1l
KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm47CisgICAgCisjaWYg
RU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBhdXRvKiBjb250ZXh0ID0gSlNDOjpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIAorICAgIGlmICghVU5MSUtFTFkoIWNvbnRleHQpKSB7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1l
bnQ+KCpjb250ZXh0KTsKKyAgICAgICAgYXV0byBhY3RpdmVTY3JpcHRJRCA9IHBlZWtBY3RpdmVT
Y3JpcHQoZG9jdW1lbnQpOworCisgICAgICAgIGlmICghYWN0aXZlU2NyaXB0SUQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgp
LT50b1VJbnQ2NCgpIH07CisgICAgICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVFeGVjdXRp
b25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQu
dXJsKCkgfSk7CisKKyAgICAgICAgaWYgKHN0YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2NyaXB0c0lu
RG9jdW1lbnRzLmZpbmQoZnJhbWVJRCkgIT0gc3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRz
SW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9jdW1lbnRXaXRoU2NyaXB0
c0l0ZXJhdG9yID0gc3RhdGlzdGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZmlu
ZChmcmFtZUlEKTsKKworICAgICAgICAgICAgaWYgKGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRv
ci0+dmFsdWUuZmluZChhY3RpdmVTY3JpcHRJRCkgIT0gZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJh
dG9yLT52YWx1ZS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NyaXB0c1dpdGhBUElz
SXRlcmF0b3IgPSBkb2N1bWVudFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVlLmZpbmQoYWN0aXZl
U2NyaXB0SUQpOworICAgICAgICAgICAgICAgIHNjcmlwdHNXaXRoQVBJc0l0ZXJhdG9yLT52YWx1
ZS5hZGQoYXBpTmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEhh
c2hDb3VudGVkU2V0PFN0cmluZz4gYXBpczsKKyAgICAgICAgICAgICAgICBhcGlzLmFkZChhcGlO
YW1lKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVl
LnNldChhY3RpdmVTY3JpcHRJRCwgV1RGTW92ZShhcGlzKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNoQ291bnRlZFNl
dDxTdHJpbmc+PiBhcGlzRXhlY3V0aW5nSW5TY3JpcHQ7CisgICAgICAgICAgICBIYXNoQ291bnRl
ZFNldDxTdHJpbmc+IGFwaXM7CisgICAgICAgICAgICBhcGlzLmFkZChhcGlOYW1lKTsKKworICAg
ICAgICAgICAgYXBpc0V4ZWN1dGluZ0luU2NyaXB0LnNldChhY3RpdmVTY3JpcHRJRCwgV1RGTW92
ZShhcGlzKSk7CisgICAgICAgICAgICBzdGF0aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRv
Y3VtZW50cy5zZXQoZnJhbWVJRCwgYXBpc0V4ZWN1dGluZ0luU2NyaXB0KTsKKyAgICAgICAgfQor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTShhcGlOYW1lKTsKKyNlbmRpZgorfQorCitTdHJpbmcgV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQor
eworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorI2lm
IEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3Vy
ZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBk
b2N1bWVudC51cmwoKSB9KTsKKyAgICBTdHJpbmcgQVBJSlNPTlN0cmluZyA9IHN0YXRpc3RpY3Mu
dG9KU09OU3RyaW5nKGRvY3VtZW50LmZyYW1lSUQoKS0+dG9VSW50NjQoKSk7CisgICAgcmV0dXJu
IEFQSUpTT05TdHJpbmc7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAg
cmV0dXJuIHsgfTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9u
c2UsIEZldGNoRGVzdGluYXRpb25Jc1NjcmlwdExpa2UgaXNTY3JpcHRMaWtlKQogewogICAgIGlm
IChpc0VwaGVtZXJhbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCAx
ODZmYWExM2Y2ODQyNGQwMjNmZmU3NGJhOTU3NDgwM2YyM2Q3YzgzLi45ZTNjM2IwMmQ1NGUxMTcz
YTZhNGI1ZTU1NmNiMTNhMjZjNjY4YTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisj
aW5jbHVkZSA8V2ViQ29yZS9FeGVjdXRpb25TdGFjay5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwpAQCAtNTIsNiArNTYsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgbG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIGZpbmFsOwogICAg
IHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRp
b24pOwogCisgICAgdm9pZCBwdXNoQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50
JiwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKSBmaW5h
bDsKKyAgICB1aW50NjRfdCBwb3BBY3RpdmVTY3JpcHQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQm
KSBmaW5hbDsKKyAgICB1aW50NjRfdCBwZWVrQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRv
Y3VtZW50JikgZmluYWw7CisgICAgU3RyaW5nIHBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25z
dCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOworCisgICAgdm9pZCBsb2dBY2Nlc3NlZEFQSXMo
SlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgYXBpTmFtZSkgZmluYWw7CisgICAg
U3RyaW5nIHBlZWtBY2Nlc3NlZEFQSXMoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5hbDsK
KwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZExv
Z1VzZXJJbnRlcmFjdGlvbihib29sKTsKICNlbmRpZgpAQCAtNzgsNiArOTAsMTEgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKICAgICBIYXNoTWFw
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXVEY6OldhbGxUaW1lPiBtX2xhc3RSZXBvcnRl
ZFVzZXJJbnRlcmFjdGlvbk1hcDsKIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisg
ICAgV2ViQ29yZTo6RXhlY3V0aW9uU3RhY2smIGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0
cmFibGVEb21haW4oY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBIYXNo
TWFwPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpFeGVjdXRpb25TdGFjaz4g
bV9leGVjdXRpb25TdGFja01hcDsKKyNlbmRpZgorCiAgICAgV2ViQ29yZTo6VGltZXIgbV9ub3Rp
ZmljYXRpb25UaW1lcjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+
IG1fZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406222</attachid>
            <date>2020-08-07 16:00:23 -0700</date>
            <delta_ts>2020-08-07 16:03:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200807180022.patch</filename>
            <type>text/plain</type>
            <size>577247</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi45YjU3ODg2M2EzOWQwMWFh
NDVjYjAxMmMxYWEwOGMyNDIxOWE4NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKyAgICAgICAgVGhlIGNvZGUgaXMgYmVoaW5k
IHRoZSBXRUJfQVBJX1NUQVRJU1RJQ1MgKGJ1aWxkIGFuZCBydW50aW1lIGZsYWcpIGFuZCB3aWxs
IGJlIG9mZiBieSBkZWZhdWx0LiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5t
bToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAg
ICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisK
IDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4xNgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEuLmFkNjM0MjUx
OTg1ODcwOTYwOTdiYWY4NTgyMGQ2ZjY4YTI5ZjRjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OSBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhlY3V0aW5n
IHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdlYiBBUElzLiAK
KyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNjcmlwdHMsIHRo
YXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2VzIHRvIHRoZSBy
ZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFkZGVkIGxhdGVy
LiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJC
b2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZp
bml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24pOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnB1c2hBY3Rp
dmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFj
dGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cGVl
a0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIG1vcmUgQW5p
bWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMyNmI3YTcyZWYz
YTkzMTVjMTlkNTcuLmM2ZDVjNGY5NTEyZDBjZDVhMWQ1ZDMyMzUwNmE0OWExNWU0NzA2ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDcgIFVtYXIgSXFiYWwgIDx1aXFiYWxA
YXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQgdGhlaXIgbGlu
a2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2NyaXB0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtTY3Jp
cHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBhbGwgcmVm
ZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0ZjA5MDIzYjg3
YWVhMjdiMDQyMzYzOWUuLjU2M2I2NmM5OGI2M2VkNDkzMmFlMDU0OTMxNDgzYzMyNzc1YzEzMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3Qu
bW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQpA
QCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9i
YWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8g
ZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51
bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09y
UHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5j
dGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQKKyNlbmRpZgogfTsKIAogdm9pZCBK
U0FQSUdsb2JhbE9iamVjdDo6cmVwb3J0VW5jYXVnaHRFeGNlcHRpb25BdEV2ZW50TG9vcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDRl
N2NkYzFmN2MzMjc1NTEwZGU0OWZlNzlhZWEwYmIzYmNkMThhN2MuLmQyMWUxZTc2M2E0MDNmNGM0
NGNmZGMzNzNjZGUwMzJhODZjMDcwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTUzLDkgKzE1MywyMyBAQCBKU1ZhbHVl
IGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEVDTUFNb2RlIGVjbWFNbwogICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVjdEV2YWxDb2Rl
Q2FjaGUoKS5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsZXJDb2RlQmxvY2ssIHByb2dyYW1Tb3VyY2Us
IGNhbGxlckNhbGxTaXRlSW5kZXgsIGV2YWwpOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5y
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KGds
b2JhbE9iamVjdCwgZXZhbC0+c291cmNlKCkucHJvdmlkZXJJRCgpLCBldmFsLT5zb3VyY2VVUkwo
KSk7CisjZW5kaWYKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJhbWUtPnRoaXNW
YWx1ZSgpOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtLmludGVycHJldGVyOwor
CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgYXV0byB0ZW1wID0gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQ
cm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRlbXA7CisjZWxzZQogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pKTsKKyNlbmRpZgogfQogCiB1bnNp
Z25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKQEAgLTg5Niw2ICs5MTAsMjMg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KG5l
d0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgdGhpc1ZhbHVlLCBhcmdzQ291bnQs
IGFyZ3MuZGF0YSgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQpIHsKKyAgICAgICAgaWYgKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLT5zb3VyY2VD
b2RlKCkpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydChnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLT5zb3VyY2VD
b2RlKCktPnByb3ZpZGVySUQoKSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiktPnNvdXJj
ZUNvZGUoKS0+cHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOworICAgICAgICAgICAgLy8gV2UgY2Fu
IGNhbGwgdGVtcEZ1bmN0aW9uLT5zb3VyY2VDb2RlKCktPnByb3ZpZGVyKCktPnNvdXJjZSgpLnV0
ZjgoKS5kYXRhKCkgdG8gZ2V0IHRoZSBzY3JpcHQgc291cmNlLgorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3Vy
Y2UoKS5wcm92aWRlcigpKQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5j
bGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSwgIlVuYXZhaWxhYmxlIik7CisgICAgICAgICAgICAv
LyBUaGlzIGVsc2UgY29uZGl0aW9uIGNhdGVycyBtaWNyb3Rhc2tzLiBXZSB0cnkgdG8gbGluayBj
b2RlIGV4ZWN1dGVkIGluIG1pY3JvdGFza3MgdG8gdGhlaXIgcGFyZW50IHNjcmlwdCBsaWtlIGFu
eSBvdGhlciBjYWxsYmFjay4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIG1pY3JvdGFza3Mgc2Vl
bSB0byBoYXZlIHRoZWlyIG93biBpZGVudGlmZXIgd2hlbiBhY2Nlc3NlZCB3aXRoIChjYWxsRGF0
YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmVpdGhlckNvZGVCbG9jaygpLT5zb3VyY2UoKS5wcm92
aWRlcklEKCkpLgorICAgICAgICAgICAgLy8gV2UgY2FsbCBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpIHRvIGdldCB0aGUgcGFyZW50IElE
ICh0aGUgc2NyaXB0IHRoYXQgY3JlYXRlZCB0aGUgbWljcm90YXNrKSBvZiBhIG1pY3JvdGFzay4K
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgLy8g
RXhlY3V0ZSB0aGUgY29kZToKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkwNCw5ICs5MzUsMjEg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICByZXN1bHQgPSBqaXRDb2RlLT5leGVj
dXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQg
PSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bi5yYXdQb2ludGVyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9t
aXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIEpTVmFsdWUoKSk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9u
RW5kKGdsb2JhbE9iamVjdCk7CisjZW5kaWYKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1
bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUzMjFlMmJkMjU4ODVhYzYxMmMxZWVi
Yzg1ZDMyNDRmYTVkNmE3MzcuLjJlNjU4Mjg5NDhiMTE2MTljODMwNjBmYTZjOWU4YWUyMGUzMzA4
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02NzgsNiArNjc4LDEwIEBAIGNvbnN0IEdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA9IHsKICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxscHRyLCAvLyBj
b21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGluYXRlU3RyZWFtaW5nCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2
YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0
ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25F
bmQKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZkNjA1M2JlYWRjNTVm
NzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0ZjliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0z
OTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xvYmFsT2Jq
ZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIsIC8vIGRlZmF1
bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRy
LCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1Mp
CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIC8qIFNvdXJjZSBm
b3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEzMjNmODg2MDQ0YTBi
NjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVmMjgyZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMjQw
LDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgewogCiAgICAgdHlw
ZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2JqZWN0KiwgSlNQ
cm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0cmVhbWluZ1B0
ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1Mp
CisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50
NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIpKGNvbnN0
IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0
IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmlu
ZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIuLjQwMmM2YTIyYzAx
NTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTQ5
NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBpZiAoIWV2YWwpCiAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVn
aXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9i
YWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+c291cmNlVVJMKCkp
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNlbHNlCiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDZl
MzUxOWEwZDc0ZmRjYzBhMGYwMWNkYTk4NDZmZmVmMjk4OGZiYi4uNGM2MmFiZjlhZTExYmM0YTE1
NDk4MGRmZjI5YjUzOWYzZTdiMjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC03MTIsNiArNzEy
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGxvYWRlci9E
b2N1bWVudFdyaXRlci5oCiAgICAgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCiAgICAgbG9hZGVyL0Vt
cHR5RnJhbWVMb2FkZXJDbGllbnQuaAorICAgIGxvYWRlci9FeGVjdXRpb25TdGFjay5oCiAgICAg
bG9hZGVyL0ZldGNoT3B0aW9ucy5oCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5oCiAgICAgbG9hZGVy
L0Zvcm1TdWJtaXNzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTA1ZWM3OWU3NjdiY2EwNDZiNWVh
OWI5YzU4NTE1ZDkyNDI0MmEyYy4uYjYzODE1NWZlZWVlN2JhNTA3ZGFiNmU3OGU5YmM0MTIxYmI5
NDgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNiArMTQ2Nyw3IEBAIGxvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCiBsb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwCiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorbG9hZGVyL0V4ZWN1
dGlvblN0YWNrLmNwcAogbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAKIGxvYWRlci9GZXRj
aElkaW9tcy5jcHAKIGxvYWRlci9Gb3JtU3RhdGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDhlZDQxYjEwMTNiZjUzNzM2
NDE4MzdjNzA0ZTE3ZjE0MDExNWQ5MC4uZDNjODVhMjc4ZDBiZjgwNWQ5NzlkNGZmYTFmYmVlNzI4
NGZhYWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTE2Nyw2ICs1MTY3LDcgQEAKIAkJRjVDMDQxREIwRkZDQTdDRTAwODM5
RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxp
c3RFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMDQxRTIw
RkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9OwogCQlGNUUw
QzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RTBD
NjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlw
ZS5oICovOyB9OworCQlGNjQwODMzODI0QzI3Qjg5MDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NDA4MzM3
MjRDMjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY5MTZDNDhFMERCNTEwRjgwMDc2Q0Q4MyAv
KiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUY5RjBFRDdBMERCNTBDQTIwMEQx
NkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIwMEQxNkRCOSAvKiBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRkE2NTRBNkMxMTA4QUJFRDAw
MjYxNUUwIC8qIE1hdGhNTFRva2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkExMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRv
a2VuRWxlbWVudC5oICovOyB9OwpAQCAtMTYxMDYsNiArMTYxMDcsOCBAQAogCQlGNUMwNDFFMjBG
RkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFMaXN0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNUUwQzY1OTE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJP
bmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1QTE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1dGlv
blN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1
dGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY3NUEwNTlBRjE3MEQ4RkFBNUI4Q0FCRSAvKiBNYXRoTUxTZWxl
Y3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhN
TFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGODIxNjI5
OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCUY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjY0NTgsNiArMjY0NjEsOCBAQAogCQkJCUY1MkFENUUzMTUzNDI0NUYwMDU5
RkJFNiAvKiBFbXB0eUNsaWVudHMuY3BwICovLAogCQkJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1
QyAvKiBFbXB0eUNsaWVudHMuaCAqLywKIAkJCQk0MTRERURFNTFGOUZFOTE1MDA0N0M0MEQgLyog
RW1wdHlGcmFtZUxvYWRlckNsaWVudC5oICovLAorCQkJCUY2NDA4MzM2MjRDMjdCN0UwMDg5MzI2
RSAvKiBFeGVjdXRpb25TdGFjay5jcHAgKi8sCisJCQkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZF
IC8qIEV4ZWN1dGlvblN0YWNrLmggKi8sCiAJCQkJQ0VCQjhDMzIyMDc4NkRDQjAwMDM5NTQ3IC8q
IEZldGNoSWRpb21zLmNwcCAqLywKIAkJCQlDRUJCOEMzMTIwNzg2RENCMDAwMzk1NDcgLyogRmV0
Y2hJZGlvbXMuaCAqLywKIAkJCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyogRmV0Y2hPcHRp
b25zLmggKi8sCkBAIC0zMDkyMSw2ICszMDkyNiw3IEBACiAJCQkJNTFGNjQ1NjIxRjQ1Mzk4RjAw
QjU0REVEIC8qIEV4Y2VwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjkzODZCMjM1
RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdl
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBF
eHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4
RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGY5M2UzZmQzMWM2NWU0YjJlNTIy
NzQ1Nzk4NzNhYWExZGM0ZjcxNmMuLjY2NWZjYmE4ZjM4NjBmMDkzYjkyZDJjZTNlY2MzMmJlMzQ2
OTcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcApAQCAtNjEsNiArNjEsOSBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZE9ic2VydmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKQEAgLTg4LDYgKzkxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
IEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsKICAgICBudWxs
cHRyLAogICAgIG51bGxwdHIsCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNT
KQorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0LAorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4
ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jh
c2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPERPTVdpbmRvdz4mJiB3aW5k
b3csIEpTV2luZG93UHJveHkqIHByb3h5KQpAQCAtNDg3LDQgKzQ5NCwyNiBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNT
KQorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9iamVjdCwgY29u
c3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQoreworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3JpcHQoKnRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpLCBzY3JpcHRJRCwgc2NyaXB0VVJMKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9t
aXNlRXhlY3V0aW9uRW5kKGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOworICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCp0aGlzT2JqZWN0
LT53cmFwcGVkKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAppbmRl
eCBlYzZkZGMxNzAyMTA4ZTk5Y2Y5OWRjMzYzMzVlMjVlMDA2NDVkODVhLi5hYWRiOTk2NmE2ODgx
ZjJlNmY1MDc5Yjc3YmM2MzkyNTVhNGVjMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtODUsNiArODUsMTEgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQgZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KERPTVdpbmRv
dyopOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzdGF0aWMgYm9vbCBy
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25FbmQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwg
UmVmUHRyPERPTVdpbmRvdz4mJiwgSlNXaW5kb3dQcm94eSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTV2luZG93UHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGRjZTczODIwYmJi
ZmQ5Yjk1YzU4NzlkMTNlZjY1ZWFiOThhOTA0MTguLjdmYjJiNzZkYWI2ZDljOWU4OTE4MjlkMDEy
YzUwMDg1NTlhMjhjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApAQCAtNTEsNiArNTEsMTAgQEAgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUgSlNSZW1vdGVET01XaW5kb3dCYXNlOjpzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlID0KICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxscHRy
LCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1p
bmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIsIC8vIHJlZ2lz
dGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQKKyAgICBu
dWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OkpTUmVtb3RlRE9N
V2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8UmVtb3RlRE9N
V2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKaW5kZXgg
YzQ0ZjJmYjNhMGIwNWRhYWIxYThhOWUyZjg5YjUyZDg1MWViNDM2OC4uOWViMGFmY2NkMzA5Nzdh
ZjljOThlMzk3NmUzMzI0ZTE2MDUyY2QzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtNjksNiArNjksMTAg
QEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUKICAgICAmZGVmYXVsdExhbmd1YWdlLAogICAgIG51
bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0
cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8g
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAor
ICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAppbmRleCBi
MTRiODE1NDJkYjg4OWVjNmQyNTliYzViNzBlZjJhNTA5OWM5NmQxLi5kODJjOGIzMWE2MWNhOGQx
MmUzMTZmMzNmN2QwODlkN2ExZmNmMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTYxLDYgKzYxLDEw
IEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsCiAgICAgJmRlZmF1bHRMYW5ndWFnZSwKICAgICBu
dWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVT
dHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIsIC8v
IHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQK
KyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OkpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0NjJiOTg0YjM0ZGYy
N2MyNDI5ZjdmMjExNmRhNzIyNTEzZTRkOTdhLi5lY2IxODY4OWE4N2ViN2Y0MmI3YmMyYjg3ZGVh
NjRhY2MzYzE3ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW5KYXZh
U2NyaXB0UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTEzOSw2ICsxNDAsOSBA
QCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9m
cmFtZSk7CiAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgVVJMKj4gc291cmNlVVJMU2NvcGUobV9zb3Vy
Y2VVUkwsICZzb3VyY2VVUkwpOworICAgIAorICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wdXNoQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRv
Y3VtZW50KCksIGpzU291cmNlQ29kZS5wcm92aWRlcklEKCksIHNvdXJjZVVSTC5zdHJpbmcoKSk7
CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2Zy
YW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCksIHNvdXJjZUNv
ZGUuc3RhcnRDb2x1bW4oKSk7CiAKQEAgLTE1NCw5ICsxNTgsMTUgQEAgVmFsdWVPckV4Y2VwdGlv
biBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYgc291cmMKICAgICAgICAgb3B0aW9uYWxEZXRhaWxzID0gV1RGTW92ZShkZXRhaWxzKTsKICAg
ICB9CiAKLSAgICBpZiAob3B0aW9uYWxEZXRhaWxzKQorICAgIGlmIChvcHRpb25hbERldGFpbHMp
IHsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgqb3B0aW9uYWxEZXRhaWxzKTsKKyAgICB9CiAKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
cG9wQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIAogICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNTVkZGM3YTc1NWI4ODU1NDhmMDExMDc4ODgzNmI0
MGYxN2VlNWY5Li43M2U5MWFhZTQ2MzU5NzZhMjJiOGU1MTUwZWIwMzUyYjlhYTRjZjc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtNTAxNSw2ICs1MDE1LDQyIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckJvZHlE
ZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAgICAgCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1l
bnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBK
U0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0
b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBh
cGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7Cisg
ICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFw
aUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNO
YW1lID0gIk5vbmUiOworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAg
aWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNO
YW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0g
ZWxzaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAg
ICAgICAgICRhcGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0
cmlidXRlKTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JU
eXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0
cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgQHRlbXAgPSAo
KTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJhdG9yLT5H
ZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAk
YXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7CisgICAgICAg
ICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsIFwiJHthcGlDbGFzc05hbWV9Ojoke2FwaUZ1bmNOYW1lfSR7YXBpQXJndW1l
bnRzfVwiKTtcbiIpOworICAgIH0KKwogICAgIGlmICgkaGFzQ3VzdG9tR2V0dGVyKSB7CiAgICAg
ICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmly
c3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0
dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4g
dGhpc09iamVjdC4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KGxleGljYWxHbG9iYWxPYmplY3Qp
O1xuIik7CkBAIC01MTQ5LDYgKzUxODUsNDUgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlU2V0dGVy
Qm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNr
SWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAibGV4aWNhbEdsb2JhbE9iamVjdCIp
OwogCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNN
ZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RN
RmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50
ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxk
SW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAg
ICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVu
dCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRz
aG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NO
YW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAgICAgICBteSAk
YXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmli
dXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3Vj
Zmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnR5
cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9
IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgfSBl
bHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUp
KSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAg
ICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBsYWNlYWJsZX0p
IHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAg
IH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfSkg
eworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAgICAgICAgICAoJGFwaUZ1
bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvbihcJWltcGxJ
bmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAg
ICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAgICRhcGlBcmd1bWVudHMg
PSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNz
TmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7CisgICAgfQorCiAg
ICAgaWYgKCRuZWVkU2VjdXJpdHlDaGVjaykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNET01CaW5kaW5nU2VjdXJpdHkuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC01MzY2LDYgKzU0NDEsMzQg
QEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9u
LCAiKmxleGljYWxHbG9iYWxPYmplY3QiKSB1bmxlc3MgJGdlbmVyYXRpbmdPdmVybG9hZERpc3Bh
dGNoZXI7CiAKKyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTTW9ja1BhZ2VPdmVy
bGF5IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJ
bmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9y
eSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxz
U2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1
bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlm
ICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7
CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJ
bnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IFxuIik7CisgICAgICAgIG15ICRhcGlDbGFzc05hbWUgPSBzdWJzdHIoJGNsYXNzTmFtZSwgMik7
CisgICAgICAgIG15ICRhcGlGdW5jTmFtZSA9ICJOb25lIjsKKworICAgICAgICBpZiAoJGdlbmVy
YXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRm
dW5jdGlvbk5hbWU7CisgICAgICAgIH0gZWxzaWYgKEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9u
KSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25O
YW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0
aW9uSW1wbGVtZW50YXRpb25OYW1lOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNzTmFtZX06OiR7
YXBpRnVuY05hbWV9XCIpO1xuIik7CisgICAgfQorCiAgICAgIyBGb3Igb3ZlcmxvYWRzLCB3ZSBn
ZW5lcmF0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgaW4gdGhlIG92ZXJsb2FkIGRpc3BhdGNoZXIsIGlu
c3RlYWQgb2YgdGhlIGJvZHkgb2YgZWFjaCBvdmVybG9hZCwgYXMgcGVyIHNwZWNpZmljYXRpb246
CiAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tY3JlYXRlLW9wZXJh
dGlvbi1mdW5jdGlvbgogICAgIGlmICghJGlzT3ZlcmxvYWRlZCB8fCAkZ2VuZXJhdGluZ092ZXJs
b2FkRGlzcGF0Y2hlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAppbmRleCAzY2M3MzgwN2QyMjFiZGIzZjU1ODRiNzgy
N2FkOWMwMWJjOGI2MGJmLi4yMTMyMzA4MDIxYTVhNWZmZTRkZDM5NjQzM2UzOTZmYThhM2M4NmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNN
YXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNNYXBMaWtlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5o
IgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNpemUiKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjMwLDYgKzIzNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJv
ZHkoSlNDOjpKU0dsb2JhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBM
aWtlOjpnZXQiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC0yNDksNiArMjU1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6
OkpTR2xvYmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6Omhh
cyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKQEAgLTI2OCw2ICsyNzYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keShKU0M6OkpT
RwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6ZW50cmllcyIp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4Miw2ICsyOTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25L
ZXlzQm9keShKU0M6OkpTR2xvYgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
TWFwTGlrZTo6a2V5cyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI5Niw2ICsz
MDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiTWFwTGlrZTo6dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvTWFw
TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwog
fQogCkBAIC0zMTAsNiArMzI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OmZvckVhY2giKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CkBAIC0zMjksNiArMzQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uU2V0Qm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNldCIpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTM1
MSw2ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsbwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6Y2xlYXIiKTsKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICBmb3J3YXJkQ2xlYXJUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICpjYXN0ZWRUaGlzKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMzY3LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBMaWtlOjpkZWxldGUiKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNSZWFkT25seU1hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcAppbmRleCA0NDZiYTM5MDdmNzlmOWM5OTg1
NDJjODg5MTc1MmRmOTI3YWFmZDBlLi43MTRjNGEwODBjODllYWMxMGEyZTgwMDU4MzhiZDgyYjMz
ZjBkYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNSZWFkT25seU1hcExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNp
bmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxMCw2ICsyMTIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXplR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJSZWFkT25seU1hcExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3
YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0K
IApAQCAtMjI0LDYgKzIyOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OmdldCIpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTI0Myw2ICsyNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOgogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjpoYXMiKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CkBAIC0yNjIsNiArMjcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSgKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5TWFwTGlrZTo6ZW50cmllcyIpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI3Niw2ICsyODYsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5j
dGlvbktleXNCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVh
ZE9ubHlNYXBMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjkw
LDYgKzMwMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keShKCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnZhbHVlcyIpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndh
cmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzKSkpKTsKIH0KIApAQCAtMzA0LDYgKzMxOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJv
ZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6
OmZvckVhY2giKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcAppbmRleCBlYzQ0
NGY1NmRmNTlmMmVmOWFiODI1YTY3MmM3MTY1NTk1MGQ3ZjQwLi44ODIyYWFmNTk1NjdlZmJhZmRj
YWZmOTBjYzE0Mzg3ODQyMDhmNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHAKQEAgLTMy
LDYgKzMyLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
U2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4K
QEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seVNldExp
a2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvU2V0TGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0KSkpKTsKIH0KIApAQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShK
U0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6
OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0MSw2ICsyNDcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNC
b2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlTZXRMaWtl
OjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExpa2UoKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjU1LDYgKzI2
Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlr
ZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OmtleXMiKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1Rv
U2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkp
OwogfQogCkBAIC0yNjksNiArMjc5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEoKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6dmFsdWVzIik7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yODMsNiArMjk1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJl
YWRPbmx5U2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NldExpa2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKaW5kZXggYWE2ZjA4
ODIzYWZkMTlkN2YyYzQzZTY4OTU2MjhkMDU0ODBiNGQxMC4uOTBlYjQ4OTkxMjc0ZDRjOTYxYzkx
NjhhYTdlZjVjODdmOTkxMzRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NU2V0TGlrZS5oIgogI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxNCw2ICsyMTYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNTZXRMaWtlU2l6ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJT
ZXRMaWtlOjpzaXplIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2FyZFNpemVUb1Nl
dExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7CiB9CiAKQEAgLTIyOCw2
ICsyMzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiU2V0TGlrZTo6aGFzIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQ3LDYgKzI1Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVG
dW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0K
IApAQCAtMjYxLDYgKzI2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1NldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQzo6SlNHbG9iCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEtleXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRU
aGlzKSkpKTsKIH0KIApAQCAtMjc1LDYgKzI4NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkoSlNDOjpKU0ds
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjp2YWx1ZXMiKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMQW55Pihmb3J3YXJkVmFsdWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4OSw2ICszMDEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25Gb3JF
YWNoQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0
TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTMwOCw2ICszMjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGRCb2R5
KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0TGlr
ZTo6YWRkIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzI3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keShKU0M6
OkpTR2xvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjpjbGVh
ciIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGZvcndhcmRDbGVhclRvU2V0TGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNDMsNiArMzYxLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0
aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlNldExpa2U6OmRlbGV0ZSIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKaW5kZXggNmRmYzQyZmZkY2Y0ODQ0MzMxYWU5NWRiOTc0MTc5M2NjOWNkNzY2My4u
N2I2NzBiMTU5MmZhMDE4MGM2MmU2ZGJhN2JjZDU3NTBlZmIzNjA0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNO
b2RlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjIyLDYgKzIyNCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxlCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNob3VsZEFsbG93QWNjZXNzKTsKICAgICBpZiAoIXNo
b3VsZEFsbG93QWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6OmV4
Y2l0aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5leGNpdGluZ0F0dHIoKSkpKTsKIH0KQEAgLTIz
Nyw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdGdW5jdGlvbiIp
OwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwogICAgIEVYQ0VQVElPTl9BU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRB
bGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2VzcykKQEAgLTI2Myw2ICsyNjks
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzcwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6cG9zdE1lc3NhZ2UiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI4Niw2ICsyOTQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjaygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6Om92ZXJsb2FkZWRN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTMwMSw2ICszMTEsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEFjdGl2ZURPTU9iamVjdDo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBwYXJhbTEg
PSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJwYXJhbTEiLCAiVGVzdEFjdGl2ZURPTU9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CkBAIC0zMTksNiArMzMxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RBY3RpdmVET01PYmplY3Q6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3Ip
OwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpIHx8ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0Fj
Y2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCmluZGV4IDQ2NzMzYTdkNWU3M2FhOGM3OGQy
YWM5ZjQxZjc2MDZjNjg5ODlhMzEuLjI4YTlhM2JlN2FiZWM4MDU3NTM2ODE4OTdiOTJiMjgzMjNm
NTc0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcApAQCAtMzUsNiArMzUsOCBAQAogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
ICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgpAQCAtMjE5LDYgKzIyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcihKU0dsb2JhbE9iCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6YXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKCkp
KSk7CiB9CkBAIC0yMzMsNiArMjM3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKEpTR2xvYmFsT2IKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rp
b25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNTEsNiArMjU3LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
c0dldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25z
OjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKSkpOwogfQpAQCAtMjY1LDYgKzI3Myw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNTZXR0ZXIoSlNHCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVh
Y3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2Vy
ZWFjdGlvbnNBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMjgzLDYgKzI5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5naWZpZXJBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CkBA
IC0yOTYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxlbigic3RyaW5naWZp
ZXJBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTMxOSw2ICszMzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRHZXR0
ZXIoSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlvbnM6OmF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCgpKSkpOwogfQpAQCAtMzMzLDYgKzM0OSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZFNldHRlcihKCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNTEsNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEcKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjphdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhj
ZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0
ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIpKSkpOwogfQpAQCAtMzY1LDYgKzM4NSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJl
YWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC0zODMsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRHZXR0ZXIoSlNHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmll
ckF0dHJpYnV0ZU5vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJm
YWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5naWZpZXJBdHRy
aWJ1dGVOb3ROZWVkZWQoKSkpKTsKIH0KQEAgLTM5Niw2ICs0MjAsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZFNl
dHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlvbnM6
OnN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiAgICAgYXV0byBpZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5n
aWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZU5v
dE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDIyLDYgKzQ0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENF
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrKCpsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnMiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7CkBAIC00NDAsNiAr
NDY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rp
b25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0UKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29w
ZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rp
b25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwubWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKaW5kZXggZGUxOTRkNDU1MzUzZGNjZDg5NmE4ODM1
Mjc3NjQwNDc3M2EwYzFiZS4uNmIwNDVhNTliZTcwYTYxZThhNjYzNmQ1NjdlMjMwMjliNGMyZTYz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcApAQCAt
MzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5j
dGlvblByb3RvdHlwZS5oPgpAQCAtMjAxLDYgKzIwMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpKSk7CiB9CkBAIC0yMTUs
NiArMjE5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJWYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3Rv
bUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6
OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMjMzLDYgKzIzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zR2V0dGVyKEpTCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZVdpdGhv
dXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZVdpdGhvdXRSZWFjdGlvbnMo
KSkpKTsKIH0KQEAgLTI0Nyw2ICsyNTUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91dFJlYWN0aW9uc1NldHRlcihKUwogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29w
ZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyOjpzZXRWYWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNjcsNiArMjc3LDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJQcm90b3R5cGVGdW5jdGlvblQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGltcGwudmFsdWUoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAppbmRleCA0MGMzNDM3
MzAyMzQ3MzdhOTc2YTc2ODUxYzE4NGU2Njg2M2Q1NTMwLi5hZGRmYzJlYTNhYzE5OTA2MjNmZjA5
YWQ3ZmM1MGFkOWI4Yjc5Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCkBAIC0zOCw2ICsz
OCw4IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIz
OSw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RB
dHRyaWJ1dGVJbnRlcmZhY2VHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZUludGVyZmFjZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1w
bC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFj
ZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiX3MpOwpAQCAtMjU0LDYg
KzI1OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZUludGVyZmFjZVNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlSW50ZXJmYWNlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3NCw2ICsyODAsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVj
aWZpZWRHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVNwZWNpZmllZCIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2lu
Z0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJBdHRyaWJ1dGUo
aW1wbCwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwpAQCAtMjg5LDYgKzI5Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVNwZWNpZmll
ZFNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RD
YWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlU3BlY2lmaWVkIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwOSw2ICszMTksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudEdldHRl
cihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNl
cjo6dGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkp
KQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVz
dEF0dHJpYnV0ZVdpdGhWYXJpYW50Il9zKTsKQEAgLTMyNCw2ICszMzYsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudFNldHRl
cihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNl
cjo6c2V0VGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9u
PElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0zNDQsNiArMzU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJU
ZXN0UmVhZG9ubHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RSZWFkb25seUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC50ZXN0UmVhZG9ubHlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTM1OSw2
ICszNzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25JbnRlcmZhY2UiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2Fs
bFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbkludGVyZmFjZSJfcyk7CkBAIC0z
NzgsNiArMzk2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjp0ZXN0T3BlcmF0aW9uU3BlY2lmaWVk
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVz
dENhbGxUcmFjZXJPcGVyYXRpb24oaW1wbCwgInRlc3RPcGVyYXRpb25TcGVjaWZpZWQiX3MpOwpA
QCAtMzk3LDYgKzQxNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhB
cmd1bWVudHMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQyNyw2
ICs0NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVB
cmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNDUxLDYg
KzQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJh
Y2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJn
dW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQ3NSw2ICs1
MDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNl
clByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJp
YW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQ5
OSw2ICs1MjcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2Fs
bFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoT3B0aW9u
YWxWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGF1dG8gdmFyaWFudE9wdGlvbmFsQXJnID0gYXJndW1lbnQwLnZhbHVl
KCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExCb29sZWFu
LCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJp
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTUyMSw2
ICs1NTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZh
cmlhbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgYXV0byB2YXJpYW50RGVmYXVsdEFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlz
VW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExVbmlvbjxJRExCb29sZWFu
LCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKaW5kZXggNTk3Zjc2ZjRlMzgyMmZmYjk1OGI2OWI2
OGM3MTllZjIxNTJjMTk3Mi4uNTlkZWVkZmQ2OTQ2MmZjOTg3MTdlNDQ0NTI1M2E1ZTIzOGM4YmQy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERPTUpJVC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERPTUpJVC5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0ZyYW1lVHJhY2Vycy5oPgpAQCAtNjQyLDYgKzY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmFueUF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5hbnlBdHRyKCkpKSk7CiB9CkBAIC02NTUsNiArNjU5LDggQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERP
TUpJVDo6Ym9vbGVhbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYm9vbGVhbkF0dHIoKSkpKTsK
IH0KQEAgLTY2OCw2ICs2NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Qnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5ieXRlQXR0cigpKSkpOwogfQpAQCAtNjgxLDYgKzY4OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Om9jdGV0QXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMT2N0ZXQ+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwub2N0ZXRBdHRyKCkpKSk7CiB9CkBAIC02OTQsNiArNzA0LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTaG9y
dD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIoKSkpKTsK
IH0KQEAgLTcwNyw2ICs3MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
VW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0QXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKSkpOwogfQpAQCAtNzIwLDYg
KzczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RET01KSVQ6OmxvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyKCkp
KSk7CiB9CkBAIC03MzMsNiArNzQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERP
TUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25nQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTc0Niw2
ICs3NjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0RE9NSklUOjpsb25nTG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxv
bmdMb25nQXR0cigpKSkpOwogfQpAQCAtNzU5LDYgKzc3OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OnVuc2lnbmVk
TG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNpZ25lZExvbmdM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0xv
bmdBdHRyKCkpKSk7CiB9CkBAIC03NzIsNiArNzk0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6ZmxvYXRBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExGbG9hdD4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5mbG9hdEF0dHIoKSkpKTsKIH0KQEAgLTc4NSw2ICs4MDksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVucmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLnVucmVzdHJpY3RlZEZsb2F0QXR0cigpKSkpOwogfQpAQCAtNzk4LDYgKzgyNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmRvdWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5kb3VibGVBdHRyKCkpKSk7CiB9
CkBAIC04MTEsNiArODM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5yZXN0cmljdGVkRG91YmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZERvdWJsZUF0dHIoKSkpKTsK
IH0KQEAgLTgyNCw2ICs4NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
RG9tU3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdBdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZG9tU3RyaW5nQXR0cigpKSkpOwogfQpAQCAtODM3LDYgKzg2OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmJ5dGVTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCeXRl
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJpbmdB
dHRyKCkpKSk7CiB9CkBAIC04NTAsNiArODg0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dXN2U3RyaW5nQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVzdlN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTg2Myw2ICs4
OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0RE9NSklUOjpub2RlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
SW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlQXR0cigpKSkpOwogfQpAQCAtODc2LDYgKzkx
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmJvb2xlYW5OdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTg4OSw2ICs5Mjks
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RE9NSklUOjpieXRlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExOdWxsYWJsZTxJRExCeXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5ieXRlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05MDIsNiArOTQ0LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJ
VDo6b2N0ZXROdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETE9jdGV0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vY3Rl
dE51bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTE1LDYgKzk1OSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OnNob3J0
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExT
aG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2hvcnROdWxsYWJs
ZUF0dHIoKSkpKTsKIH0KQEAgLTkyOCw2ICs5NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExV
bnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NDEsNiArOTg5LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJ
VDo6bG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFi
bGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ051
bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTU0LDYgKzEwMDQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25l
ZExvbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxl
PElETFVuc2lnbmVkTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dW5zaWduZWRMb25nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NjcsNiArMTAxOSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmxvbmdMb25nTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExOdWxsYWJsZTxJRExMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwubG9uZ0xvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk4MCw2ICsxMDM0LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJs
ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dERPTUpJVDo6dW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25nTG9uZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cigpKSkp
OwogfQpAQCAtOTkzLDYgKzEwNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpmbG9hdE51bGxhYmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBA
IC0xMDA2LDYgKzEwNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5yZXN0cmljdGVk
RmxvYXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3Rl
ZEZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDE5LDYgKzEwNzksOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklU
Ojpkb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG91
YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDMyLDYgKzEwOTQsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1
bnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwudW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9
CkBAIC0xMDQ1LDYgKzExMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
RG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdOdWxsYWJsZUF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTnVsbGFibGVBdHRyKCkp
KSk7CiB9CkBAIC0xMDU4LDYgKzExMjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbAogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlU3RyaW5nTnVsbGFibGVB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCeXRlU3RyaW5n
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3RyaW5nTnVsbGFi
bGVBdHRyKCkpKSk7CiB9CkBAIC0xMDcxLDYgKzExMzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1c3ZTdHJpbmdO
dWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVT
VlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2U3RyaW5n
TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDg0LDYgKzExNTQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpub2Rl
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0x
MDk5LDYgKzExNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVCb2R5KAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0QXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMTM1LDYgKzEyMDksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25J
dGVtQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dERPTUpJVDo6aXRlbSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
MTE3Niw2ICsxMjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQm9keSgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Omhhc0F0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0
cmlidXRlKCkpKSk7CiB9CkBAIC0xMjA1LDYgKzEyODMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJ
ZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0
RWxlbWVudEJ5SWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTEy
NDEsNiArMTMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpnZXRFbGVtZW50c0J5TmFtZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNl
dHRpbmcuY3BwCmluZGV4IDUwMWI5ODhmYTJjNTIxZTZiYTcyMDUwNjNjMzRiN2FkOGUyNjQ4N2Mu
LmVlYjc5NzQyMzY3OTYwNmEwOWVkZDE1YzUxNzkyNzkxZTFkYWQ1YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAi
SlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgpAQCAtMjM5LDYgKzI0MSw4IEBAIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OlRlc3RTdWJPYmpFbmFibGVk
QnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0yNTAsNiArMjU0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRp
bmc6OlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTI2NCw2ICsyNzAsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5hYmxlZEJ5U2V0
dGluZzo6ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVu
YWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI4MCw2ICsyODgsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdB
dHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6c2V0RW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwMyw2ICszMTMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1By
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OmVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuY3BwCmluZGV4IDNkZWIwMGM0ZDUzMGYyNTI5ZmU1MmVlOTRlYTNmZGJhYzBhOGFk
NGEuLjc4M2ZlYTc5YjBjMTQwMWUzZDI4OTFkMzlmN2NkOWU1MDQ4MmY4NmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9y
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTE4OCw2ICsxOTAsOCBAQCBib29sIHNldEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5OSw2ICsyMDMsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RW5hYmxlZEZvckNvbnRleHQ6OlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSwgc3Ry
bGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBjM2MwOGFkMDY0Y2YzZjIzZDU5MGUxYjg5
YWY3OWIzOGRjMzFmMGFiLi5kYTk2ZGE4YjQyMmVhMTFiMDZiZWJhYTRkYzA2MzljYjE5OTM1ODAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+CkBAIC0yODcsNiArMjg5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIxIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuYXR0cjEoKSkpKTsKIH0KQEAgLTMwMCw2ICszMDQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6YXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMigpKSkpOwogfQpA
QCAtMzE0LDYgKzMyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMyIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmF0dHIzKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBk
NGQwZTZlYjA5Y2ZmNGFmNjk4ZTE3OTM4ZDdlNWM5N2E1MDY5OWRhLi4wMmQ3YjhlYmIyMDdkNjBh
ZjlmNTUzYjk2YWU0NDE3NGJmYWI0MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAg
LTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KQEAg
LTI1NSw2ICsyNTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50VGFyZ2V0OjppdGVtIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmluZGV4IGUwN2I0
ZWE1N2Q1ZDhjOGI3NDM2ZDRkYzA3MDNmZTE5ZmJhYzdkYzcuLjUwOGUzMjMzNTZhOGZiODhmYjgx
MDliNjdjYzFiMDI4MDUwMmMwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXhjZXB0aW9uOjpuYW1lIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwubmFtZSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCmluZGV4IDU2NGY2ZmRjZmQ2NWJhODBlMGE0MGNhNGIyMWQ4ZGE1NTBm
NDFkMWQuLjA3ZDg5YTc1MzMxYzkyM2QxM2JiYzkzMmY2ODFlOGEyNTZiNWI0YjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgpAQCAtMTk1LDYgKzE5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjphU2VjcmV0QXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYVNlY3JldEF0dHJpYnV0ZSgpKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCA2YzBlNTQ2MDFhNDY1OTYxY2RjMDY4Mjkx
NGU3NmZlYmNkYzE1MmRhLi44OTY1OWE0NDQyNDA1YTg2NDcxYTNhYWE2ZThmMTdhY2MwYjc0MDM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1
ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTVGVzdFR5cGVk
ZWZzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTgyMSw2ICs4MjIsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpyZWd1bGFyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVn
dWxhckF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtODM0LDYgKzgzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OnNldFJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC04NTIsNiArODU3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWwK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6cHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTg2NSw2ICs4NzIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcihKU0ds
b2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpzZXRQ
dWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtODg0LDYgKzg5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVH
ZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnB1Ymxp
Y0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1
YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtOTAwLDYgKzkx
MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTkyMSw2ICs5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKSkpOwog
fQpAQCAtOTM3LDYgKzk1Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldEVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC05NTYsNiArOTczLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RDRVJlYWN0aW9ucyIpOwogICAgIHJldHVybiBKU1Rlc3RDRVJlYWN0aW9uczo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC05NjcsNiArOTg2LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q0VSZWFjdGlvbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25z
IiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CkBAIC05NzksNiArMTAw
MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIik7CiAgICAgcmV0dXJuIEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtOTkwLDYgKzEw
MTMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSwg
c3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTAw
Miw2ICsxMDI3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q2FsbFRyYWNlciIpOwogICAgIHJldHVybiBKU1Rlc3RDYWxsVHJhY2VyOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTEwMTMsNiArMTA0MCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFj
ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0Q2FsbFRy
YWNlciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIpLCBzdHJsZW4o
IlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMDI2LDYgKzEwNTUsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENhbGxiYWNr
SW50ZXJmYWNlIik7CiAgICAgcmV0dXJuIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwNDAsNiArMTA3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxi
YWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxs
YmFja0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIpKSwgdmFsdWUp
OwogfQpAQCAtMTA1NCw2ICsxMDg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWMKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMDY1LDYgKzExMDAsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKUwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVl
KTsKIH0KQEAgLTEwNzcsNiArMTExNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdERPTUpJVCIpOwogICAgIHJldHVybiBKU1Rlc3RET01KSVQ6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTA4OCw2ICsxMTI3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2wKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklU
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdERPTUpJVCIp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigiVGVzdERPTUpJ
VCIpKSwgdmFsdWUpOwogfQpAQCAtMTEwMCw2ICsxMTQxLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWlu
U2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIpOwogICAgIHJl
dHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
MTExLDYgKzExNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9t
YWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9t
YWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KQEAgLTExMjMsNiArMTE2OCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFibGVkQnlTZXR0
aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTEzNCw2ICsxMTgxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFi
bGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFibGVkQnlTZXR0
aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTEx
NDYsNiArMTE5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTE1Nyw2ICsxMjA4LDgg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVzdEVuYWJsZWRG
b3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CkBAIC0xMTY5LDYgKzEyMjIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIpOwogICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTExODAsNiArMTIzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CkBAIC0xMTky
LDYgKzEyNDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyMDMsNiArMTI2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEV2
ZW50VGFyZ2V0Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRhcmdldCIpLCBz
dHJsZW4oIlRlc3RFdmVudFRhcmdldCIpKSwgdmFsdWUpOwogfQpAQCAtMTIxNSw2ICsxMjc2LDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9u
Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQog
CkBAIC0xMjI2LDYgKzEyODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9uIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0RXhjZXB0aW9uIikp
LCB2YWx1ZSk7CiB9CkBAIC0xMjM4LDYgKzEzMDMsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOwog
ICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTEyNDksNiArMTMxNiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2YWx1ZSk7CiB9
CkBAIC0xMjYxLDYgKzEzMzAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICByZXR1cm4gSlNUZXN0R2xvYmFsT2Jq
ZWN0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyNzIsNiArMTM0Myw4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEds
b2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVlKTsKIH0KQEAg
LTEyODQsNiArMTM1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9i
amVjdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMTI5NSw2ICsxMzcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTEzMDcsNiArMTM4NCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MTMxOCw2ICsxMzk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEoKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTMzMCw2ICsxNDExLDggQEAg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJuIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
MzQxLDYgKzE0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMzU0LDYgKzE0MzksOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iagogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICByZXR1cm4g
SlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEzNjgsNiArMTQ1
NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdEludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KQEAg
LTEzODIsNiArMTQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAg
ICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTM5Myw2ICsxNDg0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlNHbG8K
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CiB9CkBAIC0xNDA1LDYgKzE0OTgsOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAg
ICAgcmV0dXJuIEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE0
MTYsNiArMTUxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVy
YWJsZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwgdmFsdWUpOwog
fQpAQCAtMTQyOCw2ICsxNTI1LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRl
cmFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE8KIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIHJldHVy
biBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0xNDM5LDYgKzE1MzgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iagogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KQEAg
LTE0NTEsNiArMTU1Miw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxlCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3RNYXBMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdE1hcExpa2U6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTQ2Miw2ICsxNTY1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RNYXBMaWtlIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVzdE1hcExpa2Ui
KSksIHZhbHVlKTsKIH0KQEAgLTE0NzQsNiArMTU3OSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTQ4
NSw2ICsxNTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG8KIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTQ5Nyw2ICsx
NjA2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNTA4LDYgKzE2MTksOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTE1
MjAsNiArMTYzMyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTUzMSw2ICsxNjQ2LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNTQzLDYgKzE2NjAsOCBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE1NTQsNiArMTY3Myw4IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7
CiB9CkBAIC0xNTY2LDYgKzE2ODcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpBdWRpbyIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWQ6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTU3Nyw2ICsxNzAwLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0Nv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OkF1ZGlvIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0cmxlbigiQXVkaW8iKSksIHZhbHVlKTsKIH0K
QEAgLTE1ODksNiArMTcxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0xNjAwLDYgKzE3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjEyLDYgKzE3NDEsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE2MjMsNiAr
MTc1NCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTYzNSw2ICsxNzY4LDggQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNjQ2LDYgKzE3ODEsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsK
IH0KQEAgLTE2NTgsNiArMTc5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTY2OSw2ICsxODA4LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Q29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
IiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7
CiB9CkBAIC0xNjgxLDYgKzE4MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRo
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOwogICAgIHJldHVy
biBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE2OTIsNiArMTgzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1
Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIp
LCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9CkBAIC0xNzA0
LDYgKzE4NDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgcmV0dXJuIEpT
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE3MTUsNiArMTg2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIpKSwgdmFs
dWUpOwogfQpAQCAtMTcyNyw2ICsxODc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzM4LDYgKzE4ODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTc1MCw2ICsxOTAzLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzYxLDYgKzE5
MTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIi
KSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAg
LTE3NzMsNiArMTkzMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7
CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTc4NCw2ICsxOTQzLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigi
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTE3OTYs
NiArMTk1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IApAQCAtMTgwNyw2ICsxOTcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4MTksNiArMTk4NCw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTgzMCw2ICsxOTk3
LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTE4NDIsNiArMjAxMSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTg1Myw2ICsyMDI0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHIKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTE4NjUsNiArMjAzOCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rv
cihKCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewog
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTg3Niw2ICsy
MDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcigKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aE92
ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE4ODgsNiArMjA2NSw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvcihKU0dsb2JhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsKICAgICByZXR1
cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTg5OSw2ICsyMDc4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3Ry
dWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
IikpLCB2YWx1ZSk7CiB9CkBAIC0xOTExLDYgKzIwOTIsOCBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9y
KEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
QEAgLTE5MjIsNiArMjEwNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJs
ZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE5MzUsNiArMjEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwiKTsKICAgICByZXR1cm4gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTk0OSw2ICsyMTM2LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsIiksIHN0cmxlbigiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
IikpLCB2YWx1ZSk7CiB9CkBAIC0xOTYzLDYgKzIxNTIsOCBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyIpOwogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5NzQsNiArMjE2NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNH
bG9iYWxPCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTg2LDYgKzIxNzksOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgcmV0dXJuIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTk5Nyw2ICsyMTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3QKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIiksIHN0
cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSksIHZhbHVlKTsK
IH0KQEAgLTIwMDksNiArMjIwNiw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0dsCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVz
dE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjAyMCw2ICsy
MjE5LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE92ZXJy
aWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTIwMzIsNiArMjIzMyw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFBsdWdpbkludGVyZmFj
ZSIpOwogICAgIHJldHVybiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMjA0Myw2ICsyMjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UGx1Z2luSW50
ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwg
c3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CkBAIC0yMDU1LDYgKzIy
NjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RSZWFkT25seU1hcExpa2UiKTsKICAgICByZXR1cm4gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwNjYsNiArMjI3Myw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFJlYWRPbmx5TWFwTGlrZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVh
ZE9ubHlNYXBMaWtlIiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOwog
fQpAQCAtMjA3OCw2ICsyMjg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVh
ZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRMaWtlQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlTZXRMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdFJl
YWRPbmx5U2V0TGlrZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMDg5LDYgKzIzMDAs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRMaWtl
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RSZWFkT25seVNldExpa2UiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdFJlYWRPbmx5U2V0TGlrZSIpLCBzdHJsZW4oIlRlc3RSZWFkT25seVNldExp
a2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxMDEsNiArMjMxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCIpOwogICAgIHJldHVybiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjExMiw2ICsyMzI3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yKEpTR2xv
YmFsT2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCIpKSwgdmFsdWUpOwogfQpAQCAtMjEyNCw2ICsyMzQxLDggQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24iKTsKICAgICBy
ZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0y
MTM1LDYgKzIzNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24iKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwgc3RybGVuKCJUZXN0U2VyaWFs
aXphdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjE0Nyw2ICsyMzY4LDggQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIHJldHVybiBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0yMTU4LDYgKzIzODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcgogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxNzAsNiAr
MjM5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjE4MSw2ICsyNDA4
LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IiksIHN0cmxlbigi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1ZSk7CiB9CkBAIC0yMTkzLDYgKzI0MjIs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIHJldHVybiBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIy
MDQsNiArMjQzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikp
LCB2YWx1ZSk7CiB9CkBAIC0yMjE3LDYgKzI0NTAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Ywogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIyMzEsNiArMjQ2Niw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
ICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNDUsNiArMjQ4Miw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
KEpTR2xvYmFsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
dExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVz
dFNldExpa2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjI1Niw2ICsyNDk1LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXRMaWtl
IiksIHN0cmxlbigiVGVzdFNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNjgsNiArMjUwOSw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5n
aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMjI3OSw2ICsyNTIyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGkKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXIi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigiVGVz
dFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjkxLDYgKzI1MzYsOCBAQCBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIz
MDIsNiArMjU0OSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjMxNCw2ICsyNTYzLDggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25z
dHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzI1LDYgKzI1NzYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24iKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwgdmFsdWUpOwog
fQpAQCAtMjMzNyw2ICsyNTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzQ4LDYgKzI2MDMsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzQ29uc3RydWN0bwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CiB9CkBAIC0yMzYwLDYgKzI2MTcsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVk
QXNDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAgICByZXR1cm4g
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTIzNzEsNiArMjYzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBz
dHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsK
IH0KQEAgLTIzODMsNiArMjY0NCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTR2xvCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjM5NCw2ICsyNjU3LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25z
dHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0KQEAg
LTI0MDYsNiArMjY3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjQxNyw2ICsyNjg0LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3Ry
dWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1ZSk7CiB9CkBA
IC0yNDI5LDYgKzI2OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFR5cGVkZWZzIik7CiAgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTI0NDAsNiArMjcxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZz
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFR5cGVkZWZz
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJsZW4oIlRlc3RU
eXBlZGVmcyIpKSwgdmFsdWUpOwogfQpAQCAtMjQ1NSw2ICsyNzI4LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25S
ZWd1bGFyT3BlcmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OnJlZ3VsYXJPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTI0NzgsNiArMjc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVuCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
MjQ5Niw2ICsyNzczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtMjUxNSw2ICsyNzk0LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6
bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdz
Q291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI1NDMsNiArMjgyNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvckZ1
bmN0aW9uRW5hYmxlZEF0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwpAQCAtMjU2Niw2ICsyODQ5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRJblNw
ZWNpZmljV29ybGQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI1
ODgsNiArMjg3Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtMjYxMCw2ICsyODk3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYzMyw2ICsyOTIyLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0UHJpdmF0ZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OnRlc3RQcml2YXRlRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwudGVzdFByaXZhdGVGdW5jdGlvbigpOwpAQCAtMjY1Miw2ICsyOTQzLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rp
b25DYWxjdWxhdGVTZWMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OmNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1w
bC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0yNjY5LDYgKzI5
NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2Vj
cmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMjY4NSw2ICsyOTgwLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0
RmVhdHVyZUcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1cmVHZXRTZWNy
ZXRCb29sZWFuKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDNmNTAzYWI4ZDVhMzJkZGUyZGQ1ZWU3ZDg5NWY3NzZk
MzY5NWZkN2QuLjUwNDk3ODdlMWExYjU0YTA1YjVmZmVkYzNlNmM1OGQ3NDVjZTI5NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBA
IC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1
bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yODIsNiArMjg0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZUZ1bmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNzEzMzlhMWFiODg1NTk0
M2ZkYmExYzcwNDlhODBhN2IwYmYxNzAyYS4uODM0NDNhNzNlYzIxOThkYWQ5ODg2ZmM4ZGIwYzFh
NTNjZjE2OGMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTM4LDYgKzM4LDggQEAKICNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNp
bmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTUxMCw2ICs1MTIsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9u
bHlBdHRyR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpp
bXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSkpKTsKIH0KIApA
QCAtNTI1LDYgKzUyOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyIik7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0
YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNTQwLDYgKzU0Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyU2V0dGVy
KEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldElt
cGxlbWVudHNTdGF0aWNBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC01NjAsNiArNTY4LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjEiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1l
bnRzU3RyMSgpKSkpOwogfQpAQCAtNTc2LDYgKzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVu
dHNTdHIyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSkpKTsKIH0KQEAg
LTU5Miw2ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RyMiIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTYxMiw2ICs2MjYsOCBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjMiKTsKICAgICByZXR1cm4gdGhp
c09iamVjdC5pbXBsZW1lbnRzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtNjI2
LDYgKzY0Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFj
ZTo6SW1wbGVtZW50c1N0cjMiKTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVudHNTdHIzKGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY0Miw2
ICs2NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c05vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTm9kZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKSkp
OwogfQpAQCAtNjU4LDYgKzY3OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNOb2RlIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC02
NzksNiArNzAxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2UKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRy
Iik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6
OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKSkpOwogfQogCkBAIC02OTQsNiArNzE4
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljQXR0ciIpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNzA5LDYgKzczNSw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJT
ZXR0ZXIoSlNHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNl
dFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKQEAgLTcyOSw2ICs3NTcs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNv
cmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpKSk7CiB9CkBAIC03
NDUsNiArNzc1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMiIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKSkp
OwogfQpAQCAtNzYxLDYgKzc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldFN1cHBsZW1lbnRhbFN0cjIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC03ODEs
NiArODE1LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMyIpOwog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnN1cHBsZW1lbnRhbFN0cjMobGV4aWNhbEdsb2JhbE9iamVj
dCk7CiB9CiAKQEAgLTc5NSw2ICs4MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEludGVyZmFjZTo6U3VwcGxlbWVudGFsU3RyMyIpOwogICAgIHRoaXNPYmplY3Qu
c2V0U3VwcGxlbWVudGFsU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC04MTEsNiArODQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
Tm9kZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSkpKTsKIH0K
QEAgLTgyNyw2ICs4NjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRTdXBwbGVtZW50YWxOb2RlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUiLCAiTm9kZSIp
OyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTg0
OCw2ICs4OTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUmVmbGVj
dEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIpKSkpOwogfQpAQCAtODY0LDYgKzkwOCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRl
cmZhY2U6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTg4Nyw2ICs5MzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6
aW1wbGVtZW50c01ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuaW1wbGVtZW50c01ldGhv
ZDEoKTsKQEAgLTkwNyw2ICs5NTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01l
dGhvZDIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkzNiw2ICs5
ODYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDMiKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5p
bXBsZW1lbnRzTWV0aG9kMygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7CiB9
CiAKQEAgLTk1Myw2ICsxMDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNNZXRo
b2Q0Iik7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c01ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtOTcyLDYgKzEwMjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5KAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6dGFrZU5vZGVzIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGltcGxS
ZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8Tm9kZT4+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZN
b3ZlKGltcGxSZXN1bHQubm9kZXMpKSkpOwpAQCAtOTkxLDYgKzEwNDcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdElu
dGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMShpbXBsKTsKQEAgLTEwMTEsNiAr
MTA2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2QyIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMDQwLDYgKzExMDAsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMyIpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRh
bE1ldGhvZDMoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC0x
MDU3LDYgKzExMTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kNCIp
OwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5jcHAKaW5kZXggMzYyOGNkNjYyN2NjOGVmZjc1MzRiOTY0NmY4YmVmNWE5MjkxNDhk
Zi4uNzA3YzYxOGMyZDMyNTQxOTkwYTYwMTFhMTJiNGVjZWI0NmIyODYyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihKU0dsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU6OnJlYWRvbmx5Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZG9ubHkoKSkpKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IDFjMTFiYzZi
ZmI5NmJmYmJkN2I5MDdhOWNiY2M1ODA1Mjk2YjI4ZDUuLjJiYTBhOGNjZDZhNzgwMTU5NTQxYzE1
MThjN2ViNGI4YjcyNzU0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Nyw2ICsxOTksOCBA
QCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjp0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0
dHJpYnV0ZUN1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtMjA4LDYgKzIxMiw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0
ZUN1c3RvbShKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC0yMTks
NiArMjI1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlUldDdXN0b20oSlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbVNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6VGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tIik7CiAgICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0b20obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjM0LDYgKzI0
Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnRlc3RDdXN0b21GdW5jdGlvbiIp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNh
c3RlZFRoaXMtPnRlc3RDdXN0b21GdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGViZTJjNjJmOTk0ZTFhYjQ1ZDZm
NjEzODQ3MTQ4NDIzMTU5M2FhMzQuLjA1OTAyODdkYjQzYTc3NGMzZDBkNjgwMTI2Mjc3ZTBiMzcz
ZjQ2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzU4LDYg
KzM2MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5h
bWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0zODMs
NiArMzg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG8KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXgg
NTkxNWExNTMwZjI2ZWYxY2YxNTliOWM3YjU0OGE0ZjNjMzI1ZjA0Yy4uMGRkZTg5M2ZmN2I5MjBh
ZjI1Y2ZlZWQ3OGQ0ZTRlNmU1YmZiNmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yNjUs
NiArMjY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3QKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6bmFtZWREZWxl
dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggZDVmNDc4ZWZlNTYw
MGRhNTQ0NjY4NTM3YTA1YzJjZGJiNzZkNDhiZi4uNzgwMTNmOTVhNmFjMWVlZjRhMWVmZjcwNjVl
NTQzMTQyN2Q5YzdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjQxLDYgKzI0Myw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0dGVyTmFtZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGVjNjcwMDY5NjA0ZDhlMTRlOGI4MmYxYjUwZjFh
NDIyYjQ2NjU5MTIuLjY3M2M0YTA4ZjI4MWI0MDVhMmFjZmMzZGRiZGU0YmMwOGY3YTFlZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAg
LTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTMxMCw2ICszMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAKaW5kZXggMGJlMzQwNWEyNDE4N2ZkMzUzZTZlMDdhNmIwYjhiYTlmMDFkMmY2
Ni4uNGE3NjBlNDZmNTJmYzIxNmU3MzhlOWUwNTNhMWUwOGM5NTNmOTJhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcApAQCAtMzEs
NiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMzM1LDYgKzMzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVu
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6bmFtZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTM2MCw2ICszNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAppbmRleCBhZTRlZTk2ODM1NGUyYzAyYTRlOTEwNWE5
MDVkNWIyYzI3OTlhMTRlLi45OTQ5NGI1NDRmYzRiY2E2MzllMjYxZmE0NWZmMDc4YjJkNWIwMzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zNTgsNiAr
MzYwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpu
YW1lZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzgz
LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNDAxLDYg
KzQwNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6
aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNDE0LDYgKzQy
Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9u
SW5kZXhlZFNldHRlciIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEp
IHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0
dGVyMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcy5jcHAKaW5kZXggMjZjNjIyNWExMjA4MjcyYzQ1MmIzNmQwYjE3MDgyMzA3Yzc2
OTVhZi4uNzEzMDMxOTAxYzA4ZWUwMjFmNTBkMDBjZTlhYzY1YjQ0M2U5MzY4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXMuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zMzgsNiArMzQwLDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
VW5mb3JnZWFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNTMs
NiArMzU3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5zdGEKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6
dW5mb3JnZWFibGVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudW5mb3JnZWFibGVP
cGVyYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucy5jcHAKaW5kZXggMjc0MjNhYWM1ZTYxMzIyNGM0NzY1MWVhYTM0MmZmYjJmN2YwNDg4NC4u
NjYyZjk3NGY4M2IxODEyNjZjNGQwYTVkYzgwYmY4ZDU1MmRiNDIxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAgLTMxLDYgKzMxLDgg
QEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5
cGUuaD4KQEAgLTMxOSw2ICszMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zMzQsNiArMzM4
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3YKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnM6OnVuZm9yZ2VhYmxlT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBs
LnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggYTNiODc5MzFlMTJmYWVi
NzNhYjVmMTQ0MjVmNDY1ZDE1MjhiMTI2Yi4uNTRjNTM2ZWZjMTc4OTBkMjI5MGU0NDc2YTQ4NzNi
MjIxZDYzYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCkBAIC0yODksNiArMjkwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVO
YW1lR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6bmFtZSIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
Lm5hbWUoKSkpKTsKIH0KQEAgLTMwMiw2ICszMDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpzZXROYW1lIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzIyLDYgKzMyNyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0Tm9kZTo6dGVzdFdvcmtlclByb21pc2UiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zMzksNiArMzQ2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3UKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3ROb2RlOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAg
IGltcGwuY2FsY3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtMzU2LDYg
KzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2VjcmV0Qm9v
bGVhbigpKSkpOwogfQpAQCAtMzcyLDYgKzM4Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3Jl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6dGVzdEZlYXR1
cmVHZXRTZWNyZXRCb29sZWFuIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKSkpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKaW5kZXggMTY0MzNkOTlmMTJhMTBkMTExZmE4YTUwYzYxZWM4ODRlMjZjNzI5
MS4uNTQzNTFlYmM3MTZkMDhlNTIwN2RkYjAxN2IyMGZkZmNmZDA0MmM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
QEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkpTV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTI2NjYsNiArMjY2Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJlYWRP
bmx5TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlMb25nQXR0cigpKSkpOwogfQpA
QCAtMjY3OSw2ICsyNjgyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRP
bmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0yNjkyLDYgKzI2OTcs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSkp
KTsKIH0KQEAgLTI3MDUsNiArMjcxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIi
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljUmVhZE9ubHlMb25n
QXR0cigpKSkpOwogfQogCkBAIC0yNzE3LDYgKzI3MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdGF0aWNTdHJpbmdB
dHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljU3Ry
aW5nQXR0cigpKSkpOwogfQogCkBAIC0yNzI5LDYgKzI3NDAsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdGF0aWNT
dHJpbmdBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC0yNzQ1LDYgKzI3NTgsOCBAQCBib29sIHNl
dEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpUZXN0U3ViT2JqIik7CiAgICAg
cmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yNzU3LDYg
KzI3NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0
U3RhdGljUmVhZG9ubHlPYmpHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjp0ZXN0U3RhdGljUmVhZG9ubHlPYmoiKTsKICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yNzc0LDYgKzI3OTEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpl
bnVtQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9i
ajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVudW1B
dHRyKCkpKSk7CiB9CkBAIC0yNzg3LDYgKzI4MDYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
YwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbnVtQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFs
TmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0yODA4LDYgKzI4MjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtMjgyMSw2ICsyODQ0LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
Qnl0ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
MjgzOSw2ICsyODY0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vY3Rl
dEF0dHIoKSkpKTsKIH0KQEAgLTI4NTIsNiArMjg3OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9jdGV0QXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjg3MCw2ICsy
ODk5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExT
aG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIoKSkp
KTsKIH0KQEAgLTI4ODMsNiArMjkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFNob3J0QXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjkwMSw2ICsyOTM0LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6Y2xhbXBlZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xh
bXBBZGFwdG9yPElETFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5jbGFtcGVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTE0LDYgKzI5NDksOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRDbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExT
aG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5MzIsNiArMjk2OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuZm9y
Y2VSYW5nZVNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW5mb3JjZVJh
bmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTQ1LDYgKzI5ODQsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRW5mb3Jj
ZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5NjMsNiArMzAw
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LnVuc2lnbmVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTc2LDYgKzMwMTksOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRVbnNpZ25lZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0yOTk0LDYgKzMwMzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25nQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5sb25nQXR0cigpKSkpOwogfQpAQCAtMzAwNyw2ICszMDU0LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMzAyNSw2ICszMDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxv
bmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5sb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMwMzgsNiArMzA4OSw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldExvbmdMb25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzA1Niw2ICszMTA5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSkpKTsK
IH0KQEAgLTMwNjksNiArMzEyNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTMwODcsNiArMzE0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5zdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0zMTAwLDYgKzMxNTksOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJp
bmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzExOCw2ICszMTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0
cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnVzdnN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTMxMzEsNiArMzE5NCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldFVzdnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zMTQ5LDYgKzMyMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0T2JqQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0
T2JqQXR0cigpKSkpOwogfQpAQCAtMzE2Miw2ICszMjI5LDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0VGVzdE9iakF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTMxODAsNiArMzI0OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
TnVsbGFibGVPYmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0dHIoKSkpKTsKIH0KQEAgLTMxOTMsNiArMzI2NCw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnNldFRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyMTEs
NiArMzI4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmxlbmllbnRUZXN0T2JqQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5sZW5pZW50VGVzdE9iakF0
dHIoKSkpKTsKIH0KQEAgLTMyMjQsNiArMzI5OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldExlbmllbnRUZXN0T2Jq
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJsZW5pZW50VGVzdE9iakF0
dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTMyNDIsNiArMzMxOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuZm9yZ2VhYmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKSkpOwogfQpAQCAtMzI1NSw2ICsz
MzM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0
cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSkpKTsKIH0KQEAgLTMyNjgsNiArMzM0OSw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ1NldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTMyODYsNiArMzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihKU0dsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExUcmVhdE51bGxB
c0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpKSk7CiB9
CkBAIC0zMjk5LDYgKzMzODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNHbAogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRv
cjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzE3LDYgKzM0MDQsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nR2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKSkpOwogfQpAQCAtMzMzMCw2ICszNDE5LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ1NldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0Qnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zMzQ4LDYgKzM0MzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdMb25nUmVjb3JkQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
TG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zMzYxLDYg
KzM0NTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29y
ZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
MzM3OSw2ICszNDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzM5Miw2ICszNDg5LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
UmVjb3JkPElETFVTVlN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0MTAs
NiArMzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25n
UmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDIzLDYgKzM1MjQsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNv
cmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0NDEsNiAr
MzU0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2JqPj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnN0cmluZ09ialJlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTM0NTQsNiArMzU1OSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnNldFN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzQ3Miw2ICszNTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTnVsbGFibGVPYmpS
ZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDg1LDYgKzM1OTQsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdO
dWxsYWJsZU9ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTM1MDMsNiArMzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElE
TENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nVm9pZENh
bGxiYWNrUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzUxNiw2ICszNjI5LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
U3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8
SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTM0LDYgKzM2NDks
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpkaWN0aW9uYXJ5QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZGljdGlvbmFyeUF0dHIo
KSkpKTsKIH0KQEAgLTM1NDcsNiArMzY2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldERpY3Rpb25hcnlBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM1NjUsNiArMzY4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlRGljdGlvbmFy
eUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZURpY3Rpb25hcnlBdHRy
KCkpKSk7CiB9CkBAIC0zNTc4LDYgKzM2OTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXROdWxsYWJsZURpY3Rpb25h
cnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTk2LDYgKzM3MTksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjphbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKCkpKSk7CiB9CkBAIC0zNjA5LDYgKzM3MzQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNjI3LDYgKzM3NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0Jgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cigpKSkp
OwogfQpAQCAtMzY0MCw2ICszNzY5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QW5ub3RhdGVkVHlwZUluU2VxdWVu
Y2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2NTgsNiArMzc4OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmltcGxl
bWVudGF0aW9uRW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEVudW1lcmF0
aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpKSk7CiB9CkBAIC0zNjcxLDYgKzM4MDQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBhcnNl
RW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2OTIs
NiArMzgyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNZWRpYURldmljZXNH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om1lZGlhRGV2aWNlcyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlcz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1lZGlhRGV2aWNlcygpKSkp
OwogfQpAQCAtMzcwNSw2ICszODQyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alhNTE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmoKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6eG1sT2JqQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC54bWxPYmpBdHRy
KCkpKSk7CiB9CkBAIC0zNzE4LDYgKzM4NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqWE1MT2JqQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRYTUxPYmpBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM3MzYs
NiArMzg3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmlzQ3JlYXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmlzQ3JlYXRl
KCkpKSk7CiB9CkBAIC0zNzQ5LDYgKzM4OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ3JlYXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDcmVhdGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzc2Nyw2ICszOTEyLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0
cmluZ2F0dHJBdHRyKSkpKTsKIH0KQEAgLTM3ODAsNiArMzkyNyw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRz
dHJpbmdhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTM3OTgsNiArMzk0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpKSk7CiB9CkBAIC0z
ODExLDYgKzM5NjIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
VVNWU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODI5LDYgKzM5ODIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpnZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSkpKTsKIH0K
QEAgLTM4NDIsNiArMzk5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYwLDYgKzQwMTcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRV
bnNpZ25lZEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5z
aWduZWRpbnRlZ3JhbGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNp
Z25lZExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHN0ZDo6bWF4KDAsIGlt
cGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIpKSkpKTsKIH0KQEAgLTM4NzMsNiArNDAzMiw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0clNl
dHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODkxLDYgKzQwNTIsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpoYXNBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
Ym9vbGVhbmF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCb29sZWFuPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0
dHIpKSkpOwogfQpAQCAtMzkwNCw2ICs0MDY3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Qm9vbGVhbkF0dHJpYnV0
ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTIyLDYgKzQwODcsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpnZXRVUkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxh
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpKTsKIH0KQEAgLTM5MzUsNiArNDEwMiw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTMsNiArNDEyMiw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldFVSTEF0
dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdXN2dXJsYXR0ckF0dHIpKSkpOwogfQpAQCAtMzk2Niw2ICs0MTM3LDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMzk4NCw2ICs0MTU3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdB
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKSkp
OwogfQpAQCAtMzk5Nyw2ICs0MTcyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQw
MTUsNiArNDE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdy
YWxBdHRyQXR0cikpKSk7CiB9CkBAIC00MDI4LDYgKzQyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRJbnRlZ3Jh
bEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQwNDYs
NiArNDIyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA1OSw2ICs0
MjQyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRCb29sZWFuQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC00MDc3LDYgKzQyNjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRVUkxBdHRyaWJ1
dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA5MCw2ICs0Mjc3LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRVUkxBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQxMDksNiArNDI5OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC00MTI1LDYgKzQzMTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDE0Niw2ICs0MzM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY0dldHRlcigKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0
YXRpYyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMoKSkpKTsKIH0KIApAQCAtNDE2MSw2ICs0MzU2LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZVN0YXRpY1NldHRlcigKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewpAQCAtNDE4MCw2ICs0Mzc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5
cGVkQXJyYXlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dHlwZWRBcnJheUF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHlwZWRBcnJheUF0dHIo
KSkpKTsKIH0KQEAgLTQxOTMsNiArNDM5Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpUeXBlZEFycmF5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFR5cGVkQXJyYXlBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJh
eSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQyMTAsNiArNDQxMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbUF0dHIiKTsKICAgICByZXR1cm4gdGhpc09iamVjdC5j
dXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC00MjIxLDYgKzQ0MjQsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akN1c3RvbUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Q3VzdG9tQXR0ciIpOwogICAgIHRoaXNPYmplY3Qu
c2V0Q3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MjMzLDYgKzQ0MzgsOCBAQCBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQiKTsKICAgICByZXR1
cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVz
KCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0KIApAQCAtNDI0
NCw2ICs0NDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHUKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQi
KTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c09iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgdmFs
dWUpOwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOwpAQCAtNDI1OSw2ICs0NDY4LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpPbmZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1YKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtp
dGZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmV2ZW50
TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhp
c09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgd29ybGRGb3JET01PYmpl
Y3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjcwLDYgKzQ0ODEsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHNldEV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIoJnRoaXNPYmplY3QsIHZhbHVlKTsKICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZSh2
YWx1ZSk7CkBAIC00Mjg2LDYgKzQ0OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRlQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC00Mjk5LDYgKzQ1
MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRXaXRoRXhlY1N0YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzMTcsNiArNDUzNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Ondp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLndp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNDMzMCw2ICs0NTQ5LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDM0OCw2ICs0NTY5LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MzY0LDYgKzQ1ODcsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtNDM4NSw2ICs0NjEwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlR2UKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CkBAIC00NDAxLDYgKzQ2MjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1
dGVTZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0
dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDQyMiw2ICs0NjUxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNl
c0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDQzOCw2ICs0NjY5LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlV2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQ2
MCw2ICs0NjkzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5j
b25kaXRpb25hbEF0dHIxKCkpKSk7CiB9CkBAIC00NDc2LDYgKzQ3MTEsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRD
b25kaXRpb25hbEF0dHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQ0OTcsNiArNDczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuY29uZGl0aW9uYWxBdHRyMigpKSkpOwogfQpAQCAtNDUxMyw2ICs0NzUyLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMiIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC00NTM0LDYgKzQ3NzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
bwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHIz
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSkpKTsKIH0KQEAgLTQ1NTAsNiAr
NDc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIz
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjMiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDU3MCw2ICs0ODE1LDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEE6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDU4NCw2ICs0ODMxLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNCIpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI0IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRy
NCIpKSwgdmFsdWUpOwogfQpAQCAtNDU5OSw2ICs0ODQ4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
b25kaXRpb25hbEF0dHI1Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtNDYxMyw2ICs0ODY0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNSIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNSIpKSwg
dmFsdWUpOwogfQpAQCAtNDYyOCw2ICs0ODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI1Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRp
b25hbEF0dHI2Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtNDY0Miw2ICs0ODk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJjb25kaXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUp
OwogfQpAQCAtNDY1Nyw2ICs0OTE0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y2FjaGVkQXR0cmlidXRlMSIpOwogICAg
IGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEu
Z2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CkBAIC00Njc1LDYgKzQ5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjYWNoZWRBdHRy
aWJ1dGUyIik7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2Fj
aGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTQ2OTQsNiArNDk1NSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmNhY2hlZEF0dHJpYnV0ZTMiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRo
aXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUzLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtNDcxNCw2
ICs0OTc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6YW55QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYW55QXR0cmli
dXRlKCkpKSk7CiB9CkBAIC00NzI3LDYgKzQ5OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
TwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBbnlBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NzQ1LDYgKzUw
MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvYmplY3RBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vYmplY3RB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3NTgsNiArNTAyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9iamVjdEF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPYmplY3Q+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQ3NzYsNiArNTA0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50
RG9jdW1lbnRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnRlbnREb2N1bWVudCIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPERvY3VtZW50Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUobGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5jb250ZW50RG9j
dW1lbnQoKSkpKSk7CiB9CkBAIC00Nzg5LDYgKzUwNjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptdXRhYmxlUG9pbnQi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLm11dGFibGVQb2ludCgpKSkpOwogfQpAQCAtNDgwMiw2ICs1MDc3LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludFNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
TXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxTVkdQb2ludD4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxl
UG9pbnQiLCAiU1ZHUG9pbnQiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC00ODIwLDYgKzUwOTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpibHVlYmVycnkiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYmx1ZWJlcnJ5KCkpKSk7CiB9CkBAIC00ODMzLDYgKzUxMTIsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpzZXRCbHVlYmVycnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDg1MSw2ICs1MTMyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRl
c2NyaXB0aW9uR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2IKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZGVzY3JpcHRpb24iKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZGVzY3JpcHRpb24oKSkpKTsKIH0KQEAgLTQ4NjQsNiArNTE0Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmlkIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmlkKCkpKSk7CiB9CkBAIC00ODc3LDYgKzUxNjIsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRJZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00ODk1
LDYgKzUxODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpoYXNoIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaGFzaCgpKSkp
OwogfQpAQCAtNDkwOCw2ICs1MTk3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5MjAsNiAr
NTIxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVB
dHRyaWJ1dGUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwg
c3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQpAQCAtNDkzMyw2ICs1
MjI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSkpKTsK
IH0KQEAgLTQ5NDYsNiArNTI0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC00OTU5LDYgKzUyNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgp
KSkpOwogfQpAQCAtNDk3Miw2ICs1MjcxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoKSkpKTsKIH0KQEAgLTQ5ODUsNiArNTI4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk5OCw2ICs1MzAxLDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlU2V0
dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwMTYsNiArNTMyMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpA
QCAtNTAyOSw2ICs1MzM2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC01MDQ3LDYgKzUzNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxh
YmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUwNjAsNiArNTM3MSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NTA3OCw2ICs1MzkxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
Qnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQnl0ZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDkxLDYgKzU0MDYsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXROdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExCeXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTEwOSw2ICs1
NDI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRl
KCkpKSk7CiB9CkBAIC01MTIyLDYgKzU0NDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoSlNHbG9iYWxPYmplYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphdHRyaWJ1dGVXaXRoUmVzZXJ2
ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVz
dE9iajo6T3B0aW9uYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpKSk7CiB9CkBAIC01MTM1LDYgKzU0NTYsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51
bVR5cGVTZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUg
PSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC01MTU2LDYgKzU0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJl
YWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExWb2lkPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUxNjksNiAr
NTQ5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9t
aXNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFByb21pc2U8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUxODIsNiArNTUw
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtNTE5NSw2ICs1NTI0LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9yd2FyZHNBdHRyaWJ1
dGUiKTsKICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1
dEZvcndhcmRzQXR0cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNP
YmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjE4LDYgKzU1NDksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpwdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTIzMSw2ICs1NTY0LDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInB1dEZvcndhcmRzTnVs
bGFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIikp
OwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC01MjU0LDYgKzU1ODksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MjY3
LDYgKzU2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdpZmllckF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUyODUsNiArNTYyNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTI5OSw2ICs1NjQwLDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVj
dCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzIwLDYgKzU2NjMs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRp
b25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
Y29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkpKSk7CiB9CkBA
IC01MzM3LDYgKzU2ODIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0
aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzU5LDYgKzU3
MDYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlvbmFs
bHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ydW50
aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTM3Miw2ICs1
NzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25h
bGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTUzOTAsNiArNTc0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9y
Z2VhYmxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucnVudGltZUNvbmRpdGlvbmFs
bHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZSgpKSkpOwogfQpAQCAtNTQwMyw2ICs1NzU2
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5
UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZv
cmdlYWJsZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1lQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDIxLDYgKzU3NzYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxl
UHJpdmF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxl
UHJpdmF0ZSgpKSkpOwogfQpAQCAtNTQzNCw2ICs1NzkxLDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3Jn
ZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0NTIsNiArNTgxMSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZVByb21pc2VHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1
bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExEb3VibGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ydW50aW1lQ29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2UoKSkpKTsKIH0KQEAgLTU0NjUsNiAr
NTgyNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2VTZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRl
UHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExQcm9taXNlPElETERvdWJsZT4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTU0ODMsNiArNTg0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxseUV4cG9zZWRU
b1dpbmRvd0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTQ5Niw2ICs1ODYxLDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NTE0LDYgKzU4ODEsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0
ZUdldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTU1MjcsNiArNTg5
Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTU0NSw2ICs1OTE2
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2Vy
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01NTU4LDYgKzU5MzEsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJp
YnV0ZVNldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1NzksNiArNTk1NCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNTU5Nyw2ICs1OTc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNTYxNiw2ICs1OTk1LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAg
ICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC01NjQ0LDYgKzYwMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvblN0YXRpYyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTU2NjcsNiArNjA1MCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjplbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxl
ZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTY4OSw2ICs2MDc0
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OndvcmxkU3BlY2lmaWNNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU3MTEsNiArNjA5OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNl
Y3JldFJlc3VsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
YWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY2FsY3VsYXRlU2Vj
cmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtNTcyOCw2ICs2MTE3LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0
U2VjcmV0Qm9vbGVhbkJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmdldFNlY3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpKTsKIH0KQEAg
LTU3NDQsNiArNjEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xl
YW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFu
PihpbXBsLnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtNTc2MSw2ICs2
MTU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwu
dm9pZE1ldGhvZCgpOwpAQCAtNTc3OCw2ICs2MTczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdz
Qm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRo
b2RXaXRoQXJncyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTgw
Niw2ICs2MjAzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmJ5dGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCeXRlPihpbXBsLmJ5dGVNZXRob2QoKSkpKTsK
IH0KQEAgLTU4MjEsNiArNjIyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlTWV0aG9kV2l0aEFyZ3Mi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU4NDcsNiArNjI0OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvY3RldE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpKSk7CiB9CkBAIC01
ODYyLDYgKzYyNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRNZXRob2RXaXRoQXJncyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTg4OCw2ICs2MjkzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TG9uZ01ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OmxvbmdNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExMb25nPihpbXBsLmxvbmdNZXRob2QoKSkpKTsKIH0KQEAgLTU5MDMsNiArNjMx
MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpsb25nTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5MjksNiArNjMzOCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZEJv
ZHkoSlNDOjpKCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpv
YmpNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kKCkpKSk7CiB9CkBAIC01OTQ0LDYgKzYzNTUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKQEAgLTU5NzAsNiArNjM4Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RC
b2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp1bmZvcmdl
YWJsZU1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TExvbmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpKTsKIH0KQEAgLTU5ODUsNiArNjQwMCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjAwNyw2ICs2NDI0LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwMjksNiArNjQ0OCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU3RyaW5nTWV0aG9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ01ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbXBsLm51bGxhYmxlU3RyaW5nTWV0aG9kKCkpKSk7CiB9CkBAIC02MDQ0LDYg
KzY0NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QiKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
TnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIFRlc3RPYmo6Om51
bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKCkpKSk7CiB9CiAKQEAgLTYwNTgsNiArNjQ4MSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwNzgsNiArNjUwMyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFbnVtQXJnQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjEwMCw2ICs2NTI3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhTdGFuZGFsb25l
RW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjEyMiw2
ICs2NTUxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW4KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gZW51
bUFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJlbnVt
QXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIsIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KSk7CkBAIC02MTQyLDYg
KzY1NzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CiAgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CkBAIC02MTYyLDYgKzY1OTUsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RU
aGF0UmVxdWlyZXNBbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjE4NSw2ICs2NjIwLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVT
VlN0cmluZ0EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTYyMDcsNiArNjY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTnVsbGFibGVV
U1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYy
MjksNiArNjY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjI1MSw2ICs2NjkyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5n
QXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02MjczLDYgKzY3
MTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjI5NSw2ICs2NzQwLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMxNyw2ICs2
NzY0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMzOSw2ICs2Nzg4LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJl
Y29yZEJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTYzNjEsNiArNjgxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25CCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKQEAgLTYzNzgsNiArNjgzMSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdM
b25nKCkpKSk7CiB9CkBAIC02MzkzLDYgKzY4NDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
UgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0
aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRo
RXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKSk7CiB9CkBAIC02NDA4LDYgKzY4NjUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2RCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtNjQyMiw2ICs2ODgxLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9k
V2l0aEFyZ3MoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC02
NDM2LDYgKzY4OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQm9keShKUwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHJpdmF0ZU1ldGhvZCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjQ1Niw2ICs2OTE5LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGlj
QW5kUHJpdmF0ZU1ldGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnB1YmxpY0FuZFByaXZhdGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTY0NzYsNiArNjk0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJCb2R5CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphZGRFdmVudExpc3Rl
bmVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02NTA1LDYgKzY5
NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjUzNCw2ICs3MDAzLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZVZvaWRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OndpdGhFeGVjU3RhdGVWb2lkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLndpdGhFeGVjU3RhdGVW
b2lkKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC02NTUxLDYgKzcwMjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqQm9keQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aEV4ZWNTdGF0ZU9iaiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC53aXRoRXhlY1N0YXRlT2JqKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KSkpKSk7CiB9CkBAIC02NTY2LDYgKzcwMzksOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRl
Vm9pZEV4YwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0
aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53aXRoRXhlY1N0YXRl
Vm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCkpKTsKQEAgLTY1ODMsNiArNzA1OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVPYmpFeGNlCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRl
T2JqRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVPYmpFeGNlcHRp
b24oKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpKSkpKTsK
IH0KQEAgLTY1OTgsNiArNzA3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250
ZXh0KSkKQEAgLTY2MTgsNiArNzA5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2MzgsNiArNzExOSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2NTYs
NiArNzEzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4
ZWNTdGF0ZVdpdGhTcGFjZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJ
S0VMWSghY29udGV4dCkpCkBAIC02Njc0LDYgKzcxNTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1
bWVudAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aERv
Y3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VM
WSghY29udGV4dCkpCkBAIC02Njk2LDYgKzcxODMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRB
cgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aENhbGxl
ckRvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9NV2luZG93KCpq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmNhbGxGcmFt
ZSkuZG9jdW1lbnQoKTsKICAgICBpZiAoIWluY3VtYmVudERvY3VtZW50KQpAQCAtNjcxNiw2ICs3
MjA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3UKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7CiAgICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoaW5jdW1iZW50RE9NV2luZG93
KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmNhbGxG
cmFtZSkpOwpAQCAtNjczMyw2ICs3MjI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRp
b25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CiAgICAgYXV0byBvcHQgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNjc1Myw2ICs3MjQ2LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvcHQgPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjc3Myw2ICs3MjY4LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02Nzk4LDYgKzcyOTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02ODI2LDYgKzczMjUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50
MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg0Niw2ICs3
MzQ3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElE
TFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAg
LTY4NjYsNiArNzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxBdG9tU3Ry
aW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAg
ICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSgp
IDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg4Niw2ICs3MzkxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gImZvbyJfcyA6IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NjkwNiw2ICs3NDEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJp
bmdBbmREZWZhdWx0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6
IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTY5MjYsNiArNzQzNSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQw
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTQ2LDYgKzc0
NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CkBAIC02OTY2LDYgKzc0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9k
V2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5p
c1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
QEAgLTY5ODYsNiArNzUwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
PyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDA2LDYgKzc1MjMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1
bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGNvbnZlcnQ8SURM
VVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NzAyNiw2ICs3NTQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJp
bmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
PyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNDYsNiAr
NzU2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTiIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBu
dW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNjYsNiArNzU4OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7
CkBAIC03MDg2LDYgKzc2MTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMbwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsTG9u
Z0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlv
bmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmdMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxMDYsNiArNzYzMyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBudW1i
ZXIgPSBjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOwpAQCAtNzEyNiw2ICs3NjU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW4K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhP
cHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0
dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0
dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxNDYsNiArNzY3Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNv
bnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKQEAgLTcxNjYsNiArNzY5OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0g
OiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTg2LDYgKzc3MjEsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Iik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5ID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyMDYsNiArNzc0Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+
OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSkpOwpAQCAtNzIyNiw2ICs3NzY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm8K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW5Jc0ZhbHNlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MjQ2LDYgKzc3ODcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETEFueT4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyNjYsNiArNzgw
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxPYmplY3QiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYSA9IGFyZ3Vt
ZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0
Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExPYmplY3Q+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETE9iamVjdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKSk7CkBAIC03Mjg2LDYgKzc4MzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9w
dGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50
ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxs
YWJsZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczMDYsNiArNzg1Myw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE51CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbCIsICJUZXN0T2JqIik7
IH0pOwpAQCAtNzMyNiw2ICs3ODc1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFAKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMWFBh
dGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsK
QEAgLTczNDYsNiArNzg5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxSZWNv
cmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gcmVjb3JkID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFdURjo6bnVs
bG9wdCA6IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9u
Zz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzM2Niw2
ICs3OTE5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUHIKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFByb21pc2UiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gcHJv
bWlzZSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxscHRyIDogY29udmVy
dDxJRExQcm9taXNlPElETFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOwpAQCAtNzM4Niw2ICs3OTQxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhDYWxs
YmFja0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzQwOCw2
ICs3OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03NDMzLDYg
Kzc5OTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpT
VGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwg
ImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmciKTsgfSk7CkBAIC03NDUzLDYgKzgwMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
QEAgLTc0NzUsNiArODAzOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFjCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC03NTAwLDYgKzgwNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxi
YWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7IH0pOwpAQCAtNzUyMCw2ICs4
MDg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnIik7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZU9i
amVjdEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVz
dE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpA
QCAtNzUzOSw2ICs4MTA4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFj
a0FyZyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc1NjEsNiArODEzMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0
aG9kMUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25k
aXRpb25hbE1ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmNvbmRpdGlvbmFsTWV0
aG9kMSgpKSkpOwogfQpAQCAtNzU3OSw2ICs4MTUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2Qy
Qm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlv
bmFsTWV0aG9kMiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1ldGhvZDIoKTsK
QEAgLTc1OTksNiArODE3NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbE1ldGhvZDMiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2QzKCk7CkBAIC03NjE4LDYgKzgx
OTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpBcmcg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RP
YmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwpAQCAtNzYzNiw2ICs4
MjE1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqQXJn
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0
T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc2NTQsNiAr
ODIzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOwpAQCAtNzY2OSw2ICs4MjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRCb2QK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc2ODQsNiArODI2OSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJ
RExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRl
ZE1ldGhvZCIpOyB9KTsKQEAgLTc2OTksNiArODI4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2
Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9h
ZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRN
ZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKQEAgLTc3MTQsNiArODMwMyw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q3Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3MjksNiArODMyMCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q4Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVz
dE9iaiIpOyB9KTsKQEAgLTc3NDQsNiArODMzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9k
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVk
TWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKICAgICBhdXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1By
b3h5Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldpbmRvd1Byb3h5
Iik7IH0pOwpAQCAtNzc1OSw2ICs4MzU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQm8KICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRo
b2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03Nzc0LDYg
KzgzNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCbwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJh
eUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3ODksNiArODM4OCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NzgwNCw2ICs4NDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYmxvYkFyZ3MgPSBj
b252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPEJsb2I+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTc4MTgsNiArODQyMSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2RPdmVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7CiAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTNCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcykpKTsK
QEAgLTc4NzAsNiArODQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE9w
dGlvbmFsUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzg4OCw2ICs4
NDk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc5MDYsNiArODUxNSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0
aW9uYWxQYXJhbWV0ZXIiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90
PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAx
KSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwpAQCAtNzkzNyw2ICs4NTQ4LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJs
b2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmplY3RPck5v
ZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNl
PFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBA
IC03OTUyLDYgKzg1NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0
aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzk2Nyw2ICs4NTgyLDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6
bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdz
Q291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc5OTIsNiArODYwOSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CkBAIC04MDA3LDYgKzg2MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3RyaW5nLCBJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgwMjIs
NiArODY0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CiAgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwog
ICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5n
QXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgwNDksNiArODY3Miw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5p
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODA2Nyw2ICs4NjkyLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
Om92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBv
YmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURM
SW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CkBAIC04MDg1LDYgKzg3MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iKTsK
ICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7CiAgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwpA
QCAtODEwNyw2ICs4NzM2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlVW5p
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVbmlv
bjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxMjIsNiArODc1Myw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtODEzNyw2ICs4NzcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291
bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAg
ICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0Fy
ZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MTY0LDYgKzg3OTksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmplY3RPck5vZGUg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZlcnQ8SURMVW5p
b248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTgxNzksNiArODgxNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlv
bmFsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODE5NCw2ICs4ODMz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
T3B0aW9uYWxVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDAp
IHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMpKSk7CkBAIC04MjIyLDYgKzg4NjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRl
ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAw
LCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlz
aGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwpAQCAtODI0MCw2ICs4ODgzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RO
b2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAw
LCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vp
c2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CkBAIC04MjU4LDYgKzg5MDMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0
ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChh
cmdzQ291bnQgPT0gMikgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTgyODEsNiArODkyOCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
Q2xhc3NNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjbGFzc01ldGhvZCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFRl
c3RPYmo6OmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTgyOTcsNiArODk0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjbGFzc01ldGhvZFdp
dGhPcHRpb25hbCIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtODMxNCw2ICs4
OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kMiIpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRob2Qy
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtODMyOSw2ICs4
OTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTgzNDYsNiArOTAwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVy
bG9hZGVkTWV0aG9kMSIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBA
IC04MzY0LDYgKzkwMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxTwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291
bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgzOTEsNiArOTA1MCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0
aG9kV2l0aENsYW1wCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpAQCAtODQxNiw2ICs5MDc3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aENs
YW1wT25PcHRpb25hbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElE
TExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODQz
Niw2ICs5MDk5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZSIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODQ2MSw2ICs5MTI2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWwiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8g
b2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMTG9uZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04NDgxLDYgKzkxNDgs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NTAzLDYgKzkxNzIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdBcnJheUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtODUyMyw2ICs5MTk0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW8K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmRvbVN0cmluZ0xp
c3RGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODU0
Myw2ICs5MjE2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmEKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFy
YW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBhdXRvIG9wdGlvbmFsVW5pb24gPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8
SURMVW5yZXN0cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVy
dGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91
YmxlPj4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmluZywgSURMU2Vx
dWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSkpOwpAQCAtODU2Myw2ICs5MjM4LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdp
dGhvdXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtODU4OCw2ICs5MjY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRCb2R5
KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEVsZW1l
bnRCeUlkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NjA4LDYg
KzkyODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHkoSgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Z2V0U1ZHRG9jdW1lbnQiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSkpOwogfQpAQCAtODYyMyw2ICs5MzA0LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDFCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNvbnZlcnQxIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC04NjQ1LDYgKzkzMjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpKUwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29udmVydDIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg2NjcsNiArOTM1Miw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQzQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjb252ZXJ0MyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtODY4OSw2ICs5Mzc2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQ0Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NzExLDYgKzk0MDAsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxl
UG9pbnRGdW5jdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkp
KSk7CiB9CkBAIC04NzI2LDYgKzk0MTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VCb2R5KEpTQzo6SlNHbAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YmFuYW5hIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICBpbXBsLmJhbmFuYSgpOwpAQCAtODc0Myw2ICs5NDM2LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNTdHJpbmdNZXRob2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnZhcmlhZGljU3RyaW5nTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC04NzY3LDYgKzk0NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dmFyaWFkaWNEb3VibGVN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg3OTEsNiAr
OTQ4OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjp2YXJpYWRpY05vZGVNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg4MTUsNiArOTUxNCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGlj
VW5pb25NZXRob2RCCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojp2YXJpYWRpY1VuaW9uTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC04ODM5LDYgKzk1NDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04ODY0LDYgKzk1NjcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6dGVzdFByb21pc2VGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC50ZXN0UHJvbWlz
ZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwpAQCAtODg4MSw2ICs5NTg2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODkwMyw2ICs5NjEwLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkpOwpAQCAt
ODkyMCw2ICs5NjI5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0
aW9uYWxJbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTg5NDAsNiArOTY1MSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0g
Y29udmVydDxJRExGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTg5NTUsNiArOTY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2Fk
ZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgYXV0byByZXF1ZXN0ID0gY29udmVydDxJRExJbnRlcmZhY2U8RmV0
Y2hSZXF1ZXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwpAQCAtODk3MCw2ICs5Njg1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAgICAg
ICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwpAQCAtODk5Myw2ICs5NzEwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUYKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RTdGF0aWNQcm9t
aXNlRnVuY3Rpb24iKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBUZXN0T2JqOjp0
ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05MDA5LDYgKzk3MjgsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blRlc3RTdGF0aWNQcm9taXNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iKTsKICAgICB0
aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OnRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTAyNSw2ICs5NzQ2LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVBy
b21pc2VGdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRl
c3RDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0
aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBXVEZNb3ZlKHByb21pc2UpKSkp
KTsKIH0KIApAQCAtOTAzOSw2ICs5NzYyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljQ3VzdG9tUHIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RTdGF0aWNDdXN0
b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnRlc3RTdGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rp
b24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFdURk1vdmUocHJvbWlzZSkpKSkp
OwogfQogCkBAIC05MDUzLDYgKzk3NzgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093bgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdEN1c3RvbVJldHVy
bnNPd25Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUmV0dXJuc093blByb21p
c2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7CiB9CiAKQEAg
LTkwNjcsNiArOTc5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmV0dXJuc093blByb21pc2VBbmRQ
cm9taXNlUHJveHlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJldHVybnNPd25Qcm9taXNlQW5kUHJvbWlz
ZVByb3h5RnVuY3Rpb24oKSkpKTsKIH0KQEAgLTkwODMsNiArOTgxMiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsT3ZlcmxvYWQxCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpjb25kaXRpb25hbE92ZXJsb2FkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTEwMSw2
ICs5ODMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8g
YSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTkxMjAsNiArOTg1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWRPCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0g
c3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYg
KGFyZ3NDb3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtOTE0Nyw2ICs5ODgyLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CkBAIC05MTYzLDYgKzk5MDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTE4MCw2ICs5OTE5LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIp
OwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNW
YWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CkBAIC05MjAzLDYgKzk5NDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keQogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0YWNoU2hhZG93Um9vdCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtOTIyNSw2ICs5OTY4LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNDcsNiArOTk5Miw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpidWZmZXJTb3VyY2VQYXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNjksNiArMTAwMTYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdhY3lDYWxsZXJO
YW1lZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bGVn
YWN5Q2FsbGVyTmFtZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkyOTEsNiArMTAwNDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdFJldHVyblZhbHVlT3B0aW1pemF0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05MzE2LDYgKzEw
MDY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNl
cHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkzNDEsNiAr
MTAwOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0Z1bmN0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dG
dW5jdGlvbigpOwpAQCAtOTM1OCw2ICsxMDExMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2Vk
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0
aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKCk7CkBAIC05Mzc1LDYgKzEwMTMyLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxseUV4cG9zZWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dT
Y29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5k
V29ya2VyRnVuY3Rpb24oKTsKQEAgLTkzOTIsNiArMTAxNTEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHko
SlNDOjpKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3Ry
aW5naWZpZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0cmluZ2lmaWVy
QXR0cmlidXRlKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmNwcAppbmRleCA0YjRiYTczODNmYjkwNWYyZTM3OTkzYWI5OTMwYTFmMDUxMGU2M2YyLi45ZWVh
Yjg3NGJlNjQ3MDg3NzY2MTQ3NzdiZDcxMjY0ODQ0YTBhNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIwNyw2
ICsyMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpub25Db25kaXRpb25hbE9w
ZXJhdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
dGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5ub25Db25kaXRpb25hbE9wZXJhdGlvbigp
OwpAQCAtMjI3LDYgKzIzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uQ29uCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmNvbmRp
dGlvbmFsT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3BlcmF0
aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5kZXggM2QwNzkzMjBm
NDk0NjVhOTY5YTY4ZGY0ZGQ1NTFjOGFjNDIzNzI3YS4uZjdkMGFhOWU3OGM5ODNkNTIzYTI0MmNj
ZWU1YmFmNjE4ZjI0NDIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcApA
QCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBl
Lmg+CkBAIC0yNDQsNiArMjQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPdmVycmlkZUJ1aWx0aW5zOjpuYW1lZEl0
ZW0iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKaW5kZXggMzI0NDNmNTI2YmU0M2IyNDUzOThk
NDAwNzI1OGI2MjZjNzhmNmM0Mi4uODgxMzZjOGVjMzU0YWM4YTgwYjE3MTBlOWE5YmM1NThhZmU4
NWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKQEAg
LTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SGVhcEFuYWx5emVyLmg+CkBAIC0yODMsNiArMjg1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dDo6cHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExBbnk+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC5wcm9taXNlKCkpKSk7CiB9CkBAIC0yOTYsNiArMzAwLDggQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbkdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudDo6cmVhc29uIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExBbnk+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhc29uKCkpKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKaW5kZXggOGM1OTE3YTM2MWJmNGNiYWRiNzBlZjgz
NGNjMzRmNjEwYjcxNmY0Zi4uZWU3ZGYyNDQyZGY0ODYyNzg5NjIwOWY4ZTNiNGFhOTViODhkZGJi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcApAQCAtMzksNiArMzksOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDMsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFs
aXphdGlvbjo6Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJz
dFN0cmluZ0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtMjU0LDYgKzI1OCw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0
aW9uOjpzZXRGaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3Miw2ICsyNzgsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6
c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC0yODUsNiArMjkzLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFNlY29uZExv
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzAzLDYgKzMxMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjp0aGlyZFVuc2VyaWFsaXphYmxlQXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdEV4Y2Vw
dGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTMxNiw2ICszMjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAi
dGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0LDYgKzM0OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUoKSkpKTsKIH0KQEAgLTM0Nyw2ICszNjMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRl
cgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0Rm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVz
dHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY1LDYgKzM4Myw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJp
YWxpemF0aW9uOjpmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25n
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNzgsNiArMzk4LDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxP
YmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNl
dEZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zOTYsNiArNDE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNpeHRoVHlwZWRlZkF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRG91YmxlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSkpOwog
fQpAQCAtNDA5LDYgKzQzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRTaXh0aFR5cGVkZWZBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
MjcsNiArNDUzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NDAsNiArNDY4LDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVTZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRp
b246OnNldFNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQ1OCw2ICs0ODgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3MSw2ICs1MDMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJlaWdodGhJbmRpcmVjdGx5
QXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ4OSw2ICs1
MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0U2VyaWFsaXphdGlvbjo6bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubmludGhPcHRp
b25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDIsNiArNTM4
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlv
bmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjAsNiAr
NTU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MzMsNiArNTczLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFNlcmlhbGl6YXRpb246OnNldFRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1
MSw2ICs1OTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTY0LDYgKzYwOCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1
ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpzZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTU4Miw2ICs2MjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01OTUsNiArNjQzLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2Vx
dWVuY2VBdHRyaWJ1dGVTZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNl
cmlhbGl6YXRpb246OnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdC5jcHAKaW5kZXggY2EwZWVmMTM1NWUyNDdhMDA4NzY3MjJkODcwZjNlMGU2OTE3
Mjc4OC4uZjE0ZWViMmI3NDEyMzZjYjFkMGVjODg2OGFjYzVlN2QxOTk5ZDUwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAt
MTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6aW5oZXJpdExvbmdBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTIw
Myw2ICsyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNldEluaGVyaXRMb25nQXR0cmli
dXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAppbmRleCAzMmFmYzM2
YmM3MzhmNzlkMzAyYTY3YzJjOTcxZmY4YWEyYzVhZDc2Li4zODNjNDNhODNkY2Q4MzA5ODBjODEy
MWE0YzBjMjI5NjZlMjExNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAtMTkzLDYgKzE5NSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlRm9vR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKSk7CiB9CkBAIC0yMDYsNiArMjEwLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNldEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMjQsNiArMjMw
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpKTsKIH0KQEAgLTIzNyw2
ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2V0RmluYWxMb25nQXR0cmli
dXRlQmFyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
aW5kZXggYzE1NTY3ZTI0NjMxMjkzNDNkMTkwYjVhYTQ1NDE1NmViODQ2MDEzNC4uNGJlZTJjZGFh
ZjQ4MmZiNWY4MmE5YWFmZTk1MzMyODVhOGYwYzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTM3LDYgKzM3LDgg
QEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0yMTcsNiArMjE5
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFsdWUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC52YWx1ZSgpKSkpOwogfQpAQCAtMjMwLDYgKzIzNCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1
ZVNldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0yNDgsNiArMjU0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoSlMKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6cmVhZG9ubHlWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRvbmx5VmFs
dWUoKSkpKTsKIH0KQEAgLTI2MSw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoSlNHbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpjYWNoZWRWYWx1ZSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhp
c09iamVjdC5tX2NhY2hlZFZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjc5LDYgKzI4OSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRWYWx1ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldENhY2hlZFZhbHVlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTcsNiArMzA5LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEpT
R2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6cG9ydHMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNl
cXVlbmNlPElETEludGVyZmFjZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0cygpKSkpOwog
fQpAQCAtMzEwLDYgKzMyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNh
Y2hlZFJlYWRvbmx5VmFsdWUiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNP
YmplY3QubV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMzMwLDYg
KzM0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5jdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzUyLDYgKzM3MCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5jdGlvblJldHVy
bmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9uUmV0dXJuaW5n
KCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAxNTEzZmQ4ZmFkNmViMjNi
YzVhZmRiZmU5MjVmNjFjZmM4NDNlODQ3Li43Y2QwMGEyNWY5YTJiNGY1MWIzZmRlNGNjNTEyN2Zk
YmJkMDEzMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTI5LDYgKzI5LDggQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVy
YXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KQEAgLTE5MCw2ICsxOTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keQogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyOjp0b1N0cmluZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGltcGwudG9TdHJpbmcoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCmluZGV4IGQwMTdk
ZmI0OTY3MWU3ZDdmMGIwYjU5MzMwYmU4NzYwNjMxNTg0NWEuLjU0Y2ZiZjc5NjNjOTY3MjM1YmQ5
NWNhNzZjM2RhZTA2MDVkZGQzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTkw
LDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnRvU3Ry
aW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCmluZGV4IDNmNjI4
NzYzOWY0MjhiODMwY2JmNDNlMzE2NjA2ZmU4OTZlZjE2NzcuLjUyZmNiNWYxMmQ2NzExNzEwNGEx
ZmQwYzVhYjk3Yjk5MWYyNmRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZpZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIwNyw2ICsyMTEs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZpZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKaW5k
ZXggYjg2ZjEyZjkxNzUzOWMyZDUzOWQ1MDljOWFhODQ4NDJmOWZhMjZhMy4uMDg2NTI5N2U4OWQ5
NzRhNjFlYWJlOGNiNjhiMDljYTkyNDFlMDA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKQEAgLTI5LDYgKzI5
LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90
b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBczo6YWx0ZXJuYXRlSWRlbnRpZmllciIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGltcGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSkpOwogfQpAQCAtMjA3LDYgKzIxMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXNQcm90b3R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjphbHRlcm5hdGVJZGVudGlm
aWVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkpKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCmluZGV4IDY2NmUzNTY3ZWQ0OTg2Mzc2YmM3ZGZhZTRkNGQyZGFjYTli
MDBiNzIuLjE5ZThlNmU3MWFjYmM1ODM4MjBhY2I5YjMzMmRiODc5YzU2ZDRlNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmcuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkyLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZ1Byb3RvdHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnRvU3RyaW5nIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCmluZGV4IGM1MDM3ZWYzNTFiOTU2MWZi
MGMwN2YwYjM1YWJmMGRlMTAxMDc3MGMuLmU1NTM0NjE1OGUxNDgzY2FkMzZmZDVkNjYxMmZjNjE3
ZThiODhiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZS5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Niw2ICsxOTgsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUlk
ZW50aWZpZXJHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMSw2ICsyMTUsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0
ZVByb3RvdHlwZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZpZXIiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCmluZGV4IDkwMDI5YmNlNjM4NjJlN2Nm
M2I4NzhmMzM5NjBiM2Q2MGYzZmY5YTQuLmNjZDFjMmViMjBlZDNkMjExYWU4ZjljNWExNjEyNjI1
ZTg2Y2U0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTk3LDYgKzE5OSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMCw2ICsyMTQsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlm
aWVyU2V0dGVyKEpTR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnNldElkZW50aWZpZXIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMzAsNiArMjM2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlUHJvdG90eXBlRnUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5k
ZXggMWQ2ODlkMjllYTAyOWI2YzZlNDcxN2JhMjFlYzZjOTgyMDUzNmI3NS4uZTMxNTI0ZjEzYjZl
ZTgxNTBmMGFkZmZjZjY1MjAyZjQ1NjRmNDQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC00
NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCkBAIC0zMDYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjp1bnNpZ25lZExvbmdMb25nQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKSkpOwog
fQpAQCAtMzE5LDYgKzMyMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzM3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkpKTsKIH0KQEAg
LTM1MCw2ICszNTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTZXJp
YWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjcsNiArMzc3LDggQEAgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
VGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OlRlc3RTdWJPYmoiKTsKICAg
ICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTM3OSw2
ICszOTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVX
aXRoQ2xhbXBHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFtcCgpKSkpOwog
fQpAQCAtMzkyLDYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0QXR0cmlidXRlV2l0aENsYW1wIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDEwLDYgKzQyNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZkdldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6YXR0cmlidXRlV2l0
aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlV2l0aENsYW1wSW5UeXBlZGVmKCkpKSk7CiB9CkBAIC00MjMsNiArNDQxLDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVm
U2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVk
ZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
Q2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDEsNiArNDYxLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFR5cGVkZWZzOjpidWZmZXJTb3VyY2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
YnVmZmVyU291cmNlQXR0cigpKSkpOwogfQpAQCAtNDU0LDYgKzQ3Niw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6
c2V0QnVmZmVyU291cmNlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1
ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDcyLDYgKzQ5
Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RUeXBlZGVmczo6ZG9tVGltZVN0YW1wQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5kb21UaW1lU3RhbXBBdHRyKCkpKSk7CiB9CkBAIC00ODUsNiArNTExLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0clNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5
cGVkZWZzOjpzZXREb21UaW1lU3RhbXBBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVk
TG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwNSw2ICs1MzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmNCb2R5KEpTQzo6SgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5
cGVkZWZzOjpmdW5jIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKICAgICBhdXRvIHggPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQ29u
dmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURM
U2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CkBAIC01MjUsNiArNTU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KEoKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2hhZG93Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NTksNiArNTkxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoU2VxdWUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RUeXBlZGVmczo6bWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NzksNiArNjEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNl
cXVlbmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6
bnVsbGFibGVTZXF1ZW5jZUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjAxLDYgKzYzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnNlcXVlbmNlT2ZOdWxsYWJs
ZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYyMyw2ICs2
NjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NSw2ICs2ODUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmciKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY2Nyw2ICs3MDksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blVuaW9uQXJnQm9keShKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFR5cGVkZWZzOjp1bmlvbkFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjg5LDYgKzczMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmZ1bmNXaXRoQ2xhbXAiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTcxNCw2ICs3NjAsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbkZ1bmNXaXRoQ2xhbXBJbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpmdW5jV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03MzYsNiArNzg0LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25Qb2ludEZ1
bmN0aW9uQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVm
czo6cG9pbnRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9pbnRGdW5jdGlvbigpKSkpOwogfQpAQCAtNzUx
LDYgKzgwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24iKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTc3MSw2ICs4MjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblN0cmluZ1NlcXVlbmNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzkxLDYgKzg0NSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdp
dGhTZXF1ZW5jCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRl
ZnM6OmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04MTEsNiArODY3LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVm
czo6bWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNl
cHRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQxYzlmZWM2MWUyOGJhYzM4N2NjYzdi
OWIzM2Y1ZmQwZDhmMzQxZTIuLmQzMDAyYzVjOTBkNzUwZjY1YWU4ZThiMTc3YTU1MTBmZTk4MzY1
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02MzMsNyArNjMzLDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCgpIGNvbnN0OworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBm
cmFtZUlEKCkgY29uc3Q7CisjZWxzZQogICAgIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJh
bWVJRCgpIGNvbnN0OworI2VuZGlmCiAKICAgICAvLyB0byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBo
ZWJyZXcgYW5kIGFyYWJpYyBwYWdlcyByaWdodAogICAgIHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggODgwMmVkMDRlYTMzMzBlOTU3ZGJhMDFjMTcx
NjI0NDUxZWM0NDRjZC4uMTVjMTQwZDE2Y2JiNDg2NjVlMDdmNDIxNzk1ZTk0NjNmMDViNmI1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMzIwNyw2ICszMjA3LDggQEAgRXhjZXB0aW9uT3I8
dm9pZD4gRWxlbWVudDo6c2V0T3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCkKIAogRXhjZXB0
aW9uT3I8dm9pZD4gRWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCkKIHsK
KyAgICBXVEZMb2dBbHdheXMoIkFQSXMgOiAlcyIsIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5wZWVrQWNjZXNzZWRBUElzKGRvY3VtZW50KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIAog
ICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKCp0aGlz
LCBodG1sLCBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogICAgIGlmIChmcmFnbWVudC5oYXNFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2VFeGNlcHRpb24oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFjay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZDVhZDgy
ZTY4OWM4M2YwZTgzZDM3YmI3YTNiMTkyNDYyOGM0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmIEVOQUJMRShX
RUJfQVBJX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGVj
dXRpb25TdGFjay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBFeGVjdXRpb25T
dGFjazo6dG9KU09OU3RyaW5nKHVpbnQ2NF90IGZyYW1lSUQpCit7CisgICAgaWYgKGRvY3VtZW50
SWRVUkxNYXAuZmluZChmcmFtZUlEKSA9PSBkb2N1bWVudElkVVJMTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIAorICAgIGF1dG8gZG9jdW1lbnRVUkwgPSBkb2N1bWVudElkVVJM
TWFwLmdldChmcmFtZUlEKTsKKworICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBvYmplY3QtPnNldFN0cmluZygiVG9wTGV2ZWxEb21haW4iLCByZWdpc3RyYWJs
ZURvbWFpbi5zdHJpbmcoKSk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoIlRvcExldmVsVVJMIiwg
ZG9jdW1lbnRVUkwuc3RyaW5nKCkpOworICAgIG9iamVjdC0+c2V0SW50ZWdlcigiRnJhbWVJRCIs
IGZyYW1lSUQpOworICAgIGF1dG8gc2NyaXB0RXhlY3V0aW9uID0gSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpOworICAgIAorICAgIGlmIChhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChm
cmFtZUlEKSA9PSBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAg
ICAgb2JqZWN0LT5zZXRBcnJheSgiU2NyaXB0RXhlY3V0aW9uIiwgV1RGTW92ZShzY3JpcHRFeGVj
dXRpb24pKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5nKCk7CisgICAgfQor
ICAgIAorICAgIGF1dG8gYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnQgPSBhcGlzQ2FsbGVk
QnlTY3JpcHRzSW5Eb2N1bWVudHMuZ2V0KGZyYW1lSUQpOworICAgIAorICAgIGZvciAoYXV0byBz
Y3JpcHRXaXRoQVBJc0tleSA6IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50LmtleXMoKSkg
eworICAgICAgICBhdXRvIHNjcmlwdFdpdGhBUElzID0gYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9j
dW1lbnQuZ2V0KHNjcmlwdFdpdGhBUElzS2V5KTsKKyAgICAgICAgYXV0byBhY2Nlc3NlZEFQSXMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAoYXV0byBjb25zdCYgQVBJTmFt
ZSA6IHNjcmlwdFdpdGhBUElzKSB7CisgICAgICAgICAgICBhdXRvIHRlbXAgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgdGVtcC0+c2V0SW50ZWdlcihBUElOYW1lLmtleSwg
QVBJTmFtZS52YWx1ZSk7CisgICAgICAgICAgICBhY2Nlc3NlZEFQSXMtPnB1c2hPYmplY3QoV1RG
TW92ZSh0ZW1wKSk7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhcGlFeGVjdXRpb24gPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhcGlFeGVjdXRpb24tPnNldEludGVnZXIoIlNj
cmlwdElEIiwgc2NyaXB0V2l0aEFQSXNLZXkpOworICAgICAgICAKKyAgICAgICAgaWYgKGRvY3Vt
ZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5maW5kKGZyYW1lSUQpID09IGRvY3VtZW50SWRBbmRTY3Jp
cHRJZFVSTE1hcC5lbmQoKSkKKyAgICAgICAgICAgIGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5nKCJT
Y3JpcHRVUkwiLCAiVW5hdmFpbGFibGUiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBh
dXRvIGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMgPSBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxN
YXAuZ2V0KGZyYW1lSUQpOworICAgICAgICAgICAgaWYgKGRvY3VtZW50SWRBbmRTY3JpcHRJZFVS
THMuZmluZChzY3JpcHRXaXRoQVBJc0tleSkgPT0gZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMcy5l
bmQoKSkKKyAgICAgICAgICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0cmluZygiU2NyaXB0VVJM
IiwgIlVuYXZhaWxhYmxlIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXBp
RXhlY3V0aW9uLT5zZXRTdHJpbmcoIlNjcmlwdFVSTCIsIGRvY3VtZW50SWRBbmRTY3JpcHRJZFVS
THMuZ2V0KHNjcmlwdFdpdGhBUElzS2V5KSk7CisgICAgICAgIH0KKyAgICAgICAgYXBpRXhlY3V0
aW9uLT5zZXRBcnJheSgiQWNjZXNzZWRBUElzIiwgV1RGTW92ZShhY2Nlc3NlZEFQSXMpKTsKKyAg
ICAgICAgc2NyaXB0RXhlY3V0aW9uLT5wdXNoT2JqZWN0KFdURk1vdmUoYXBpRXhlY3V0aW9uKSk7
CisgICAgfQorICAgIAorICAgIG9iamVjdC0+c2V0QXJyYXkoIlNjcmlwdEV4ZWN1dGlvbiIsIFdU
Rk1vdmUoc2NyaXB0RXhlY3V0aW9uKSk7CisgICAgcmV0dXJuIG9iamVjdC0+dG9KU09OU3RyaW5n
KCk7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4
ZWN1dGlvblN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMWE3MDE2ZTllOTI0ZjY2YWYyMzAzZWM1MjM5ZmRlNTFhNjMyZDhkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmgKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisjaW5j
bHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBFeGVjdXRp
b25TdGFjayB7CisgICAgZXhwbGljaXQgRXhlY3V0aW9uU3RhY2soY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikKKyAgICAgICAgOiByZWdpc3RyYWJsZURvbWFpbiB7IGRvbWFpbiB9Cisg
ICAgeworICAgIH0KKworICAgIEV4ZWN1dGlvblN0YWNrKCkgPSBkZWZhdWx0OworICAgIEV4ZWN1
dGlvblN0YWNrKGNvbnN0IEV4ZWN1dGlvblN0YWNrJikgPSBkZWxldGU7CisgICAgRXhlY3V0aW9u
U3RhY2smIG9wZXJhdG9yPShjb25zdCBFeGVjdXRpb25TdGFjayYpID0gZGVsZXRlOworICAgIEV4
ZWN1dGlvblN0YWNrKEV4ZWN1dGlvblN0YWNrJiYpID0gZGVmYXVsdDsKKyAgICBFeGVjdXRpb25T
dGFjayYgb3BlcmF0b3I9KEV4ZWN1dGlvblN0YWNrJiYpID0gZGVmYXVsdDsKKworICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyB0b0pTT05TdHJpbmcodWludDY0X3QgLyogRnJhbWVJRCAqLyk7CisK
KyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbjsKKworICAgIC8vIFRoaXMg
SGFzaE1hcCBtYWludGFpbnMgdGhlIG1hcHBpbmcgYmV0d2VlbiBGcmFtZUlEIGFuZCBEb2N1bWVu
dCBVUkwuCisgICAgSGFzaE1hcDx1aW50NjRfdCwgVVJMPiBkb2N1bWVudElkVVJMTWFwOworICAg
IAorICAgIC8vIFRoaXMgSGFzaE1hcCBtYWludGFpbnMgYSBzdGFjayBvZiBleGVjdXRpbmcgc2Ny
aXB0cyBpbiBlYWNoIGRvY3VtZW50LgorICAgIC8vIEN1cnJlbnRseSwgaXQgb25seSBjYXB0dXJl
cyBjbGFzc2ljIHNjcmlwdHMuCisgICAgSGFzaE1hcDx1aW50NjRfdCwgVmVjdG9yPHVpbnQ2NF90
Pj4gZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzOworICAgIAorICAgIC8vIFRoaXMgSGFzaE1h
cCBtYWludGFpbnMgdGhlIG1hcHBpbmcgYmV0d2VlbiBGcmFtZUlELCBTY3JpcHRJRCwgYW5kIFNj
cmlwdCBVUkxzLgorICAgIEhhc2hNYXA8dWludDY0X3QsIEhhc2hNYXA8dWludDY0X3QsIFN0cmlu
Zz4+IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTE1hcDsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hN
YXAgbWFpbnRhaW5zIHRoZSBBUElzIGNhbGxlZCBieSBhIHNjcmlwdCBpbiBhIGRvY3VtZW50Lgor
ICAgIC8vIEhhc2hNYXA8RnJhbWVJRCwgSGFzaE1hcDxTY3JpcHRJRCwgSGFzaENvdW50ZWRTZXQ8
Q291bnRPZkFQSU5hbWVzPj4+CisgICAgSGFzaE1hcDx1aW50NjRfdCwgSGFzaE1hcDx1aW50NjRf
dCwgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPj4+IGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50
czsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaAppbmRleCA2N2ZiZmZjMmQyMGFiMmZkOGJhNTZhOGRmYTRkNGFlNzhhOTVlYjIw
Li5jODk3MzY5ZTQzY2VhMGQ5NGFiYWIzNzIzNmFlYjhiMmFkZTlhZmZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjUsNiArMjUsNyBAQAog
CiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAK
QEAgLTU3LDYgKzU4LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbG9nU2NyZWVuQVBJ
QWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpT
Y3JlZW5BUEkpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmdGb3JU
ZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiAvKiBmaXJzdFBhcnR5RG9tYWluICovLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgLyogdGhpcmRQYXJ0eURvbWFpbiAqLywgYm9vbCAvKiBz
aG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbiAqLykgeyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcHVz
aEFjdGl2ZVNjcmlwdChjb25zdCBEb2N1bWVudCYsIGNvbnN0IHVpbnQ2NF90IC8qIHNjcmlwdElE
ICovLCBjb25zdCBTdHJpbmcmIC8qIHNjcmlwdFVSTCAqLykgeyB9CisgICAgdmlydHVhbCBPcHRp
b25hbDx1aW50NjRfdD4gcG9wQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JikgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8dWludDY0X3Q+IHBlZWtBY3RpdmVTY3JpcHQoY29u
c3QgRG9jdW1lbnQmKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBPcHRpb25hbDxTdHJpbmc+
IHBlZWtTY3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGxvZ0FjY2Vzc2VkQVBJcyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiAvKiBhcGlOYW1lICovKSB7IH0KKyAgICB2aXJ0dWFsIE9wdGlvbmFs
PFN0cmluZz4gcGVla0FjY2Vzc2VkQVBJcyhjb25zdCBEb2N1bWVudCYpIHsgcmV0dXJuIHsgfTsg
fQorCiAgICAgdmlydHVhbCBTdHJpbmcgc3RhdGlzdGljc0ZvclVSTChjb25zdCBVUkwmKSB7IHJl
dHVybiB7IH07IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9y
ZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0YXRlKCkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJl
c291cmNlTG9hZE9ic2VydmVyLmNwcAppbmRleCBlMjNjNzkxNzJhNTg5YjdlNjg3ZTcwYTg2MGI0
ODVlYmVlNGZjNGRjLi5lNjM5M2NlNDYxZDhkODRhYmU5MTBlNzFiZjk1YjIwNmI0OTlmMDk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKQEAgLTk4LDYgKzk4LDE3IEBA
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpCiAgICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKK0V4ZWN1dGlvblN0YWNrJiBXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFp
c0VwaGVtZXJhbCgpKTsKKworICAgIHJldHVybiBtX2V4ZWN1dGlvblN0YWNrTWFwLmVuc3VyZShk
b21haW4sIFsmZG9tYWluXSB7CisgICAgICAgIHJldHVybiBFeGVjdXRpb25TdGFjayhkb21haW4p
OworICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKIHsKICAgICBpZiAo
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpKSB7CkBAIC0yNjEsNiArMjcyLDE5NSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZChjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnB1c2hBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCB1aW50NjRfdCBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBzY3JpcHRVUkwpCit7CisgICAg
aWYgKGlzRXBoZW1lcmFsKCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisKKyAgICBhdXRvIGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRv
VUludDY0KCkgfTsKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0
YWNrRm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwo
KSB9KTsKKyAgICAKKyAgICAvLyBSZWdpc3RlciBzY3JpcHQgaWQgd2l0aCBzY3JpcHQgdXJsIGZv
ciBlYWNoIGZyYW1lLgorICAgIGlmIChleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2NyaXB0
SWRVUkxNYXAuZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25TdGFjay5kb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxNYXAuZW5kKCkpIHsKKyAgICAgICAgYXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRV
UkxzID0gZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJh
bWVJRCk7CisgICAgICAgIC8vIFdlIHVzZSBIYXNoTWFwLmFkZCgpIGhlcmUgYmVjYXVzZSB0aGVy
ZSBpcyBhIGNoYW5jZSB0aGF0IHNjcmlwdCBVUkwgaXMgbm9uZSAoaW4gY2FzZSBvZiBtaWNyb3Rh
c2tzKS4KKyAgICAgICAgLy8gSGFzaE1hcC5hZGQoKSB3aWxsIGVuc3VyZSB0aGF0IHRoZSBleGlz
aXRuZyBzY3JpcHQgVVJMIGRvZXMgbm90IGdldCBvdmVyd3JpdHRlbi4KKyAgICAgICAgZG9jdW1l
bnRJZEFuZFNjcmlwdElkVVJMcy0+dmFsdWUuYWRkKHNjcmlwdElELCBzY3JpcHRVUkwpOworICAg
ICAgICAKKyAgICB9IGVsc2UgeworICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBTdHJpbmc+IGRv
Y3VtZW50SWRBbmRTY3JpcHRJZFVSTHM7CisgICAgICAgIGRvY3VtZW50SWRBbmRTY3JpcHRJZFVS
THMuc2V0KHNjcmlwdElELCBzY3JpcHRVUkwpOworICAgICAgICBleGVjdXRpb25TdGFjay5kb2N1
bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuc2V0KGZyYW1lSUQsIFdURk1vdmUoZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMcykpOworICAgIH0KKyAgICAKKyAgICBpZiAoZXhlY3V0aW9uU3RhY2suZXhl
Y3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCkgIT0gZXhlY3V0aW9uU3RhY2su
ZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAgIGF1dG8gZXhlY3V0
aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3IgPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRz
SW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKTsKKyAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNr
SXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzY3JpcHRJRCk7CisKKyAgICB9IGVsc2UgeworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiBleGVjdXRpbmdTY3JpcHRzU3RhY2s7CisgICAg
ICAgIGV4ZWN1dGluZ1NjcmlwdHNTdGFjay5hcHBlbmQoc2NyaXB0SUQpOworICAgICAgICBleGVj
dXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuc2V0KGZyYW1lSUQsIFdURk1v
dmUoZXhlY3V0aW5nU2NyaXB0c1N0YWNrKSk7CisgICAgICAgIAorICAgICAgICBleGVjdXRpb25T
dGFjay5kb2N1bWVudElkVVJMTWFwLnNldChmcmFtZUlELCBkb2N1bWVudC51cmwoKSk7CisgICAg
fQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShz
Y3JpcHRJRCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdFVSTCk7CisjZW5kaWYKK30KKworT3B0
aW9uYWw8dWludDY0X3Q+IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwb3BBY3RpdmVTY3JpcHQo
Y29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElD
UykKKyAgICBhdXRvIGZyYW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsK
KworICAgIGF1dG8mIGV4ZWN1dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdp
c3RyYWJsZURvbWFpbihSZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH0pOworICAg
IGlmIChleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFt
ZUlEKSAhPSBleGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZW5kKCkp
IHsKKyAgICAgICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlv
blN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworCisgICAg
ICAgIGlmICghZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkg
eworCisgICAgICAgICAgICBhdXRvIHNjcmlwdElEID0gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRl
cmF0b3ItPnZhbHVlLmxhc3QoKTsKKworICAgICAgICAgICAgaWYgKGV4ZWN1dGluZ1NjcmlwdHNT
dGFja0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZXhlY3V0aW9u
U3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLnJlbW92ZShmcmFtZUlEKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRv
ci0+dmFsdWUucmVtb3ZlTGFzdCgpOworCisgICAgICAgICAgICByZXR1cm4gc2NyaXB0SUQ7Cisg
ICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5k
aWYKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDx1aW50NjRfdD4gV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmIGRv
Y3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBhdXRvIGZyYW1l
SUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKworICAgIGF1dG8mIGV4ZWN1
dGlvblN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdp
c3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH0pOworICAgIGlmIChleGVjdXRpb25TdGFj
ay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBleGVjdXRpb25T
dGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZW5kKCkpIHsKKyAgICAgICAgYXV0byBl
eGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1Nj
cmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworICAgICAgICBpZiAoIWV4ZWN1dGluZ1Nj
cmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4g
ZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3ItPnZhbHVlLmxhc3QoKTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5kaWYKKyAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworfQorCitPcHRpb25hbDxTdHJpbmc+IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpw
ZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAg
IGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisjaWYg
RU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3Ry
YWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgZXhlY3V0aW9uU3RhY2sg
PSBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lzdHJhYmxlRG9t
YWluKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIik7CisgICAgYnVpbGRlci5hcHBlbmQocmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpOworCisgICAgZm9yIChhdXRvIGtleSA6IGV4ZWN1dGlvblN0
YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5rZXlzKCkpIHsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJGcmFtZSBJRDogIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKGtleSkpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlNjcmlwdCBTdGFjazogWyIpOworICAg
ICAgICBhdXRvIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2su
ZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoa2V5KTsKKworICAgICAgICBmb3IgKGF1
dG8gY29uc3QmIGV4ZWN1dGluZ1NjcmlwdCA6IGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9y
LT52YWx1ZSkgeworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIoZXhl
Y3V0aW5nU2NyaXB0KSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAsIik7
CisgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJdIik7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCJcbiIpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisjZW5kaWYKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
QWNjZXNzZWRBUElzKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNv
bnN0IFN0cmluZyYgYXBpTmFtZSkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgYXV0byog
Y29udGV4dCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAKKyAgICBpZiAoIVVOTElLRUxZ
KCFjb250ZXh0KSkgeworICAgICAgICAKKyAgICAgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBhdXRvJiBkb2N1bWVu
dCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7CisgICAgICAgIGF1dG8gYWN0aXZlU2Ny
aXB0SUQgPSBwZWVrQWN0aXZlU2NyaXB0KGRvY3VtZW50KTsKKworICAgICAgICBpZiAoIWFjdGl2
ZVNjcmlwdElEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZnJhbWVJRCB7
IGRvY3VtZW50LmZyYW1lSUQoKS0+dG9VSW50NjQoKSB9OworICAgICAgICBhdXRvJiBzdGF0aXN0
aWNzID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3RyYWJs
ZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH0pOworCisgICAgICAgIGlmIChzdGF0aXN0aWNzLmFw
aXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IHN0YXRpc3RpY3Mu
YXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAgICAgICBhdXRv
IGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRvciA9IHN0YXRpc3RpY3MuYXBpc0NhbGxlZEJ5U2Ny
aXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisKKyAgICAgICAgICAgIGlmIChkb2N1bWVu
dFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVlLmZpbmQoKmFjdGl2ZVNjcmlwdElEKSAhPSBkb2N1
bWVudFdpdGhTY3JpcHRzSXRlcmF0b3ItPnZhbHVlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byBzY3JpcHRzV2l0aEFQSXNJdGVyYXRvciA9IGRvY3VtZW50V2l0aFNjcmlwdHNJdGVyYXRv
ci0+dmFsdWUuZmluZCgqYWN0aXZlU2NyaXB0SUQpOworICAgICAgICAgICAgICAgIHNjcmlwdHNX
aXRoQVBJc0l0ZXJhdG9yLT52YWx1ZS5hZGQoYXBpTmFtZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEhhc2hDb3VudGVkU2V0PFN0cmluZz4gYXBpczsKKyAgICAgICAg
ICAgICAgICBhcGlzLmFkZChhcGlOYW1lKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudFdpdGhT
Y3JpcHRzSXRlcmF0b3ItPnZhbHVlLnNldCgqYWN0aXZlU2NyaXB0SUQsIFdURk1vdmUoYXBpcykp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSGFzaE1hcDx1
aW50NjRfdCwgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPj4gYXBpc0V4ZWN1dGluZ0luU2NyaXB0Owor
ICAgICAgICAgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiBhcGlzOworICAgICAgICAgICAgYXBp
cy5hZGQoYXBpTmFtZSk7CisKKyAgICAgICAgICAgIGFwaXNFeGVjdXRpbmdJblNjcmlwdC5zZXQo
KmFjdGl2ZVNjcmlwdElELCBXVEZNb3ZlKGFwaXMpKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3Mu
YXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLnNldChmcmFtZUlELCBhcGlzRXhlY3V0aW5n
SW5TY3JpcHQpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGFwaU5hbWUpOworI2VuZGlmCit9
CisKK09wdGlvbmFsPFN0cmluZz4gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3Nl
ZEFQSXMoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmIChpc0VwaGVtZXJhbCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIAorI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZUV4ZWN1dGlvblN0YWNr
Rm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9
KTsKKyAgICBTdHJpbmcgQVBJSlNPTlN0cmluZyA9IHN0YXRpc3RpY3MudG9KU09OU3RyaW5nKGRv
Y3VtZW50LmZyYW1lSUQoKS0+dG9VSW50NjQoKSk7CisgICAgcmV0dXJuIEFQSUpTT05TdHJpbmc7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJy
ZXNvdXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UsIEZl
dGNoRGVzdGluYXRpb25Jc1NjcmlwdExpa2UgaXNTY3JpcHRMaWtlKQogewogICAgIGlmIChpc0Vw
aGVtZXJhbCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCAxODZmYWEx
M2Y2ODQyNGQwMjNmZmU3NGJhOTU3NDgwM2YyM2Q3YzgzLi44YTM5MTkxZWI2NGMyOWY4NDhjN2Vi
OGYyMWM5MDIxZTkzMzM0OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApA
QCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisjaW5jbHVk
ZSA8V2ViQ29yZS9FeGVjdXRpb25TdGFjay5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJQYWdlOwpAQCAtNTIsNiArNTYsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIGZpbmFsOwogICAgIHZvaWQg
bG9nU3VicmVzb3VyY2VMb2FkaW5nRm9yVGVzdGluZyhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW4mIHRoaXJkUGFydHlEb21haW4sIGJvb2wgc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24pOwog
CisgICAgdm9pZCBwdXNoQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29u
c3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKSBmaW5hbDsKKyAg
ICBPcHRpb25hbDx1aW50NjRfdD4gcG9wQWN0aXZlU2NyaXB0KGNvbnN0IFdlYkNvcmU6OkRvY3Vt
ZW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBlZWtBY3RpdmVTY3JpcHQoY29u
c3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5hbDsKKyAgICBPcHRpb25hbDxTdHJpbmc+IHBlZWtT
Y3JpcHRFeGVjdXRpb25TdGFjayhjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOworCisg
ICAgdm9pZCBsb2dBY2Nlc3NlZEFQSXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgYXBpTmFtZSkgZmluYWw7CisgICAgT3B0aW9uYWw8U3RyaW5nPiBwZWVrQWNjZXNzZWRBUElz
KGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmluYWw7CisKICNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRMb2dVc2VySW50ZXJhY3Rpb24oYm9vbCk7
CiAjZW5kaWYKQEAgLTc4LDYgKzkwLDExIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXA7CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbiwgV1RGOjpXYWxsVGltZT4gbV9sYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb25NYXA7CiAK
KyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIFdlYkNvcmU6OkV4ZWN1dGlvblN0
YWNrJiBlbnN1cmVFeGVjdXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbiwgV2ViQ29yZTo6RXhlY3V0aW9uU3RhY2s+IG1fZXhlY3V0aW9uU3RhY2tNYXA7Cisj
ZW5kaWYKKwogICAgIFdlYkNvcmU6OlRpbWVyIG1fbm90aWZpY2F0aW9uVGltZXI7CiAKICAgICBI
YXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2RvbWFpbnNXaXRoVXNlckludGVy
YWN0aW9uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406223</attachid>
            <date>2020-08-07 16:03:09 -0700</date>
            <delta_ts>2020-08-07 16:03:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215208-20200807180307.patch</filename>
            <type>text/plain</type>
            <size>576570</size>
            <attacher name="Umar Iqbal">uiqbal</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUzNThhYzExZjU0ODk2YzRlZDc3MDVmYmE3MmEwODE4M2MxMTQxLi45YjU3ODg2M2EzOWQwMWFh
NDVjYjAxMmMxYWEwOGMyNDIxOWE4NGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisK
KyAgICAgICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhl
Y3V0aW5nIHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhlc2UgaG9va3MgY2FwdHVyZSBldmFsL0Z1bmN0aW9uLCBjYWxsYmFj
a3MsIGFuZCBtaWNyb3Rhc2tzIGV4ZWN1dGlvbi4KKyAgICAgICAgVGhlIGNvZGUgaXMgYmVoaW5k
IHRoZSBXRUJfQVBJX1NUQVRJU1RJQ1MgKGJ1aWxkIGFuZCBydW50aW1lIGZsYWcpIGFuZCB3aWxs
IGJlIG9mZiBieSBkZWZhdWx0LiAKKworICAgICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5t
bToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OmV2YWwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAg
ICAqIGpzYy5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisK
IDIwMjAtMDgtMDUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCAxMC4xNgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGMzZWY2ODI4ZGM0M2M5ZGQzMWU2NmYzNWQ2M2QyNzJlNDEwYjA3ZDEuLmFkNjM0MjUx
OTg1ODcwOTYwOTdiYWY4NTgyMGQ2ZjY4YTI5ZjRjNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OSBAQAorMjAyMC0wOC0wNyAgVW1hciBJcWJhbCAgPHVpcWJhbEBhcHBsZS5jb20+CisKKyAgICAg
ICAgSlMgQVBJIGFjY2VzcyBjYXB0dXJlIGFuZCB0aGVpciBsaW5raW5nIHdpdGggZXhlY3V0aW5n
IHNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNTIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIG5ldyBmdW5jdGlvbmFsaXR5IHRvIGNhcHR1cmUgYWNjZXNzIG9mIHdlYiBBUElzLiAK
KyAgICAgICAgQWxzbyBtYWludGFpbmVkIGEgc3RhY2sgb2YgZXhlY3V0aW5nIHNjcmlwdHMsIHRo
YXQgYWxsb3dzIHVzIAorICAgICAgICB0byBhdHRyaWJ1dGUgQVBJIGFjY2Vzc2VzIHRvIHRoZSBy
ZXNwb25zaWJsZSBzY3JpcHRzLgorICAgICAgICBUZXN0IGNhc2VzIHRvIGJlIGFkZGVkIGxhdGVy
LiAKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpyZWdpc3RlckV2YWxPckZ1
bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25FbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVBdHRyaWJ1dGVHZXR0ZXJC
b2R5RGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUF0dHJpYnV0ZVNldHRlckJvZHlEZWZp
bml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24pOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnB1c2hBY3Rp
dmVTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFj
dGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cGVl
a0FjdGl2ZVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnBlZWtBY2Nlc3NlZEFQSXMpOgorCiAyMDIwLTA4LTA1ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzb21lIG1vcmUgQW5p
bWF0aW9ucyBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE5OTE5ZjMzYjdhOTM4YWYwMWMyNmI3YTcyZWYz
YTkzMTVjMTlkNTcuLmM2ZDVjNGY5NTEyZDBjZDVhMWQ1ZDMyMzUwNmE0OWExNWU0NzA2ZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMDcgIFVtYXIgSXFiYWwgIDx1aXFiYWxA
YXBwbGUuY29tPgorCisgICAgICAgIEpTIEFQSSBhY2Nlc3MgY2FwdHVyZSBhbmQgdGhlaXIgbGlu
a2luZyB3aXRoIGV4ZWN1dGluZyBzY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6ZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2NyaXB0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBvcEFjdGl2ZVNjcmlwdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrQWN0aXZlU2Ny
aXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnBlZWtTY3Jp
cHRFeGVjdXRpb25TdGFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpsb2dBY2Nlc3NlZEFQSXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6cGVla0FjY2Vzc2VkQVBJcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oOgorCiAyMDIwLTA4LTA1ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBhbGwgcmVm
ZXJlbmNlcyB0byBub24tZXhpc3RlbnQgMTAuMTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCmluZGV4IGRkZTJiZDMyM2JjN2I2NWI0ZjA5MDIzYjg3
YWVhMjdiMDQyMzYzOWUuLjU2M2I2NmM5OGI2M2VkNDkzMmFlMDU0OTMxNDgzYzMyNzc1YzEzMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3Qu
bW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQpA
QCAtNjgsNiArNjgsMTAgQEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9i
YWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CiAgICAgbnVsbHB0ciwgLy8g
ZGVmYXVsdExhbmd1YWdlCiAgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZwogICAgIG51
bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09y
UHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5j
dGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmQKKyNlbmRpZgogfTsKIAogdm9pZCBK
U0FQSUdsb2JhbE9iamVjdDo6cmVwb3J0VW5jYXVnaHRFeGNlcHRpb25BdEV2ZW50TG9vcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IDRl
N2NkYzFmN2MzMjc1NTEwZGU0OWZlNzlhZWEwYmIzYmNkMThhN2MuLmQyMWUxZTc2M2E0MDNmNGM0
NGNmZGMzNzNjZGUwMzJhODZjMDcwMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcApAQCAtMTUzLDkgKzE1MywyMyBAQCBKU1ZhbHVl
IGV2YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEVDTUFNb2RlIGVjbWFNbwogICAgICAgICBjYWxsZXJDb2RlQmxvY2stPmRpcmVjdEV2YWxDb2Rl
Q2FjaGUoKS5zZXQoZ2xvYmFsT2JqZWN0LCBjYWxsZXJDb2RlQmxvY2ssIHByb2dyYW1Tb3VyY2Us
IGNhbGxlckNhbGxTaXRlSW5kZXgsIGV2YWwpOwogICAgIH0KIAorI2lmIEVOQUJMRShXRUJfQVBJ
X1NUQVRJU1RJQ1MpCisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydCkKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5y
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KGds
b2JhbE9iamVjdCwgZXZhbC0+c291cmNlKCkucHJvdmlkZXJJRCgpLCBldmFsLT5zb3VyY2VVUkwo
KSk7CisjZW5kaWYKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJhbWUtPnRoaXNW
YWx1ZSgpOwogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IHZtLmludGVycHJldGVyOwor
CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgYXV0byB0ZW1wID0gaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQ
cm9taXNlRXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhl
Y3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRlbXA7CisjZWxzZQogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgZ2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGNhbGxlclNjb3BlQ2hhaW4pKTsKKyNlbmRpZgogfQogCiB1bnNp
Z25lZCBzaXplT2ZWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
YXJndW1lbnRzLCB1aW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCkKQEAgLTg5Niw2ICs5MTAsMjMg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KG5l
d0NvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgdGhpc1ZhbHVlLCBhcmdzQ291bnQs
IGFyZ3MuZGF0YSgpKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQpIHsKKyAgICAgICAgaWYgKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLT5zb3VyY2VD
b2RlKCkpIHsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25T
dGFydChnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLT5zb3VyY2VD
b2RlKCktPnByb3ZpZGVySUQoKSwganNDYXN0PEpTRnVuY3Rpb24qPihmdW5jdGlvbiktPnNvdXJj
ZUNvZGUoKS0+cHJvdmlkZXIoKS0+c291cmNlVVJMKCkpOworICAgICAgICAgICAgLy8gV2UgY2Fu
IGNhbGwgdGVtcEZ1bmN0aW9uLT5zb3VyY2VDb2RlKCktPnByb3ZpZGVyKCktPnNvdXJjZSgpLnV0
ZjgoKS5kYXRhKCkgdG8gZ2V0IHRoZSBzY3JpcHQgc291cmNlLgorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2xhc3NTb3Vy
Y2UoKS5wcm92aWRlcigpKQorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25TdGFydChnbG9iYWxPYmplY3QsIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcklEKCksIGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y2xhc3NTb3VyY2UoKS5wcm92aWRlcigpLT5zb3VyY2VVUkwoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvblN0YXJ0KGdsb2JhbE9iamVjdCwgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5j
bGFzc1NvdXJjZSgpLnByb3ZpZGVySUQoKSwgIlVuYXZhaWxhYmxlIik7CisgICAgICAgICAgICAv
LyBUaGlzIGVsc2UgY29uZGl0aW9uIGNhdGVycyBtaWNyb3Rhc2tzLiBXZSB0cnkgdG8gbGluayBj
b2RlIGV4ZWN1dGVkIGluIG1pY3JvdGFza3MgdG8gdGhlaXIgcGFyZW50IHNjcmlwdCBsaWtlIGFu
eSBvdGhlciBjYWxsYmFjay4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIG1pY3JvdGFza3Mgc2Vl
bSB0byBoYXZlIHRoZWlyIG93biBpZGVudGlmZXIgd2hlbiBhY2Nlc3NlZCB3aXRoIChjYWxsRGF0
YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmVpdGhlckNvZGVCbG9jaygpLT5zb3VyY2UoKS5wcm92
aWRlcklEKCkpLgorICAgICAgICAgICAgLy8gV2UgY2FsbCBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPmNsYXNzU291cmNlKCkucHJvdmlkZXJJRCgpIHRvIGdldCB0aGUgcGFyZW50IElE
ICh0aGUgc2NyaXB0IHRoYXQgY3JlYXRlZCB0aGUgbWljcm90YXNrKSBvZiBhIG1pY3JvdGFzay4K
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgLy8g
RXhlY3V0ZSB0aGUgY29kZToKICAgICBpZiAoaXNKU0NhbGwpIHsKQEAgLTkwNCw5ICs5MzUsMjEg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTT2JqZWN0KgogICAgICAgICByZXN1bHQgPSBqaXRDb2RlLT5leGVj
dXRlKCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQg
PSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvTmF0aXZlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bi5yYXdQb2ludGVyKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNKU0NhbGwgJiYgZ2xvYmFsT2JqZWN0LT5nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSgpLT5yZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJv
bWlzZUV4ZWN1dGlvbkVuZCkKKyAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9t
aXNlRXhlY3V0aW9uRW5kKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICB9CisjZWxzZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIEpTVmFsdWUoKSk7CisjZW5kaWYKICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgIGlmIChpc0pTQ2FsbCAmJiBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kKQorICAgICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9u
RW5kKGdsb2JhbE9iamVjdCk7CisjZW5kaWYKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1
bHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUzMjFlMmJkMjU4ODVhYzYxMmMxZWVi
Yzg1ZDMyNDRmYTVkNmE3MzcuLjJlNjU4Mjg5NDhiMTE2MTljODMwNjBmYTZjOWU4YWUyMGUzMzA4
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC02NzgsNiArNjc4LDEwIEBAIGNvbnN0IEdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlIEdsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA9IHsKICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxscHRyLCAvLyBj
b21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGluYXRlU3RyZWFtaW5nCisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2
YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0CisgICAgbnVsbHB0
ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25F
bmQKKyNlbmRpZgogfTsKIAogR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAppbmRleCAzOTIzNWUyM2NkMzRjNzJiZjE2ODZkNjA1M2JlYWRjNTVm
NzBjMzY1Li44Y2Q4NjIzOWZjYjk5YTNjOGRlZTViZWZlMGQ2NDI2OGEzNjU0ZjliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0z
OTYsNiArMzk2LDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xvYmFsT2Jq
ZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gewogICAgIG51bGxwdHIsIC8vIGRlZmF1
bHRMYW5ndWFnZQogICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRy
LCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1Mp
CisgICAgbnVsbHB0ciwgLy8gcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25TdGFydAorICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25P
ckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIC8qIFNvdXJjZSBm
b3IgSlNHbG9iYWxPYmplY3QubHV0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDNlZGRhZTMyN2MyZWJkZjY5YjEzMjNmODg2MDQ0YTBi
NjYwNDNhODQuLmYwYjRkNDhhOWNlMzU3MDlkYmY0NDBiMDc4OWU1OWU1YjVmMjgyZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMjQw
LDYgKzI0MCwxNCBAQCBzdHJ1Y3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgewogCiAgICAgdHlw
ZWRlZiB2b2lkICgqSW5zdGFudGlhdGVTdHJlYW1pbmdQdHIpKEpTR2xvYmFsT2JqZWN0KiwgSlNQ
cm9taXNlKiwgSlNWYWx1ZSwgSlNPYmplY3QqKTsKICAgICBJbnN0YW50aWF0ZVN0cmVhbWluZ1B0
ciBpbnN0YW50aWF0ZVN0cmVhbWluZzsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1Mp
CisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclBy
b21pc2VFeGVjdXRpb25TdGFydFB0cikoY29uc3QgSlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50
NjRfdCwgY29uc3QgU3RyaW5nJik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJh
Y2tPclByb21pc2VFeGVjdXRpb25TdGFydFB0ciByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxs
YmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0OworCisgICAgdHlwZWRlZiBib29sICgqcmVnaXN0
ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25FbmRQdHIpKGNvbnN0
IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmRQdHIgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQ7CisjZW5kaWYKIH07CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0
IDogcHVibGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCmlu
ZGV4IDQyNGUxNTFhYWViZDI5NDM1MjE5NGU1NGE1NzlhM2YxMmM3OGFhZjIuLjQwMmM2YTIyYzAx
NTE0ZWI0NzVmNzVjYWU1ODUyMjBmYjUxNGY5YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKQEAgLTQ5
NCw3ICs0OTQsMjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZh
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnIKICAgICBpZiAoIWV2YWwpCiAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9T
VEFUSVNUSUNTKQorICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KCktPnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3Rh
cnQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVn
aXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydChnbG9i
YWxPYmplY3QsIGV2YWwtPnNvdXJjZSgpLnByb3ZpZGVySUQoKSwgZXZhbC0+c291cmNlVVJMKCkp
OworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIHNjb3BlLnJl
bGVhc2UoKTsKKyAgICBhdXRvIHRlbXAgPSBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSk7CisgICAgaWYgKGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tP
clByb21pc2VFeGVjdXRpb25FbmQpCisgICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUoKS0+cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VF
eGVjdXRpb25FbmQoZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gdGVtcDsKKyNlbHNlCiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodm0uaW50ZXJwcmV0ZXIt
PmV4ZWN1dGUoZXZhbCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbFRoaXMoKSwg
Z2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpKSkpOworI2VuZGlmCiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1BhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDZl
MzUxOWEwZDc0ZmRjYzBhMGYwMWNkYTk4NDZmZmVmMjk4OGZiYi4uNGM2MmFiZjlhZTExYmM0YTE1
NDk4MGRmZjI5YjUzOWYzZTdiMjRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC03MTIsNiArNzEy
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGxvYWRlci9E
b2N1bWVudFdyaXRlci5oCiAgICAgbG9hZGVyL0VtcHR5Q2xpZW50cy5oCiAgICAgbG9hZGVyL0Vt
cHR5RnJhbWVMb2FkZXJDbGllbnQuaAorICAgIGxvYWRlci9FeGVjdXRpb25TdGFjay5oCiAgICAg
bG9hZGVyL0ZldGNoT3B0aW9ucy5oCiAgICAgbG9hZGVyL0Zvcm1TdGF0ZS5oCiAgICAgbG9hZGVy
L0Zvcm1TdWJtaXNzaW9uLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMTA1ZWM3OWU3NjdiY2EwNDZiNWVh
OWI5YzU4NTE1ZDkyNDI0MmEyYy4uYjYzODE1NWZlZWVlN2JhNTA3ZGFiNmU3OGU5YmM0MTIxYmI5
NDgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE0NjcsNiArMTQ2Nyw3IEBAIGxvYWRlci9Eb2N1bWVu
dExvYWRlci5jcHAKIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCiBsb2FkZXIv
RG9jdW1lbnRXcml0ZXIuY3BwCiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorbG9hZGVyL0V4ZWN1
dGlvblN0YWNrLmNwcAogbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAKIGxvYWRlci9GZXRj
aElkaW9tcy5jcHAKIGxvYWRlci9Gb3JtU3RhdGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDhlZDQxYjEwMTNiZjUzNzM2
NDE4MzdjNzA0ZTE3ZjE0MDExNWQ5MC4uZDNjODVhMjc4ZDBiZjgwNWQ5NzlkNGZmYTFmYmVlNzI4
NGZhYWRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNTE2Nyw2ICs1MTY3LDcgQEAKIAkJRjVDMDQxREIwRkZDQTdDRTAwODM5
RDRBIC8qIEhUTUxEYXRhTGlzdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1QzA0MUQ4MEZGQ0E3Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxp
c3RFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRjVDMDQxRTcwRkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMDQxRTIw
RkZDQTk2RDAwODM5RDRBIC8qIEpTSFRNTERhdGFMaXN0RWxlbWVudC5oICovOyB9OwogCQlGNUUw
QzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RTBD
NjVBMTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlw
ZS5oICovOyB9OworCQlGNjQwODMzODI0QzI3Qjg5MDA4OTMyNkUgLyogRXhlY3V0aW9uU3RhY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NDA4MzM3
MjRDMjdCN0UwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY5MTZDNDhFMERCNTEwRjgwMDc2Q0Q4MyAv
KiBKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjkxNkM0OEMwREI1MTBGODAwNzZDRDgzIC8qIEpTWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi87IH07CiAJCUY5RjBFRDdBMERCNTBDQTIwMEQx
NkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY5RjBFRDc3MERCNTBDQTIwMEQxNkRCOSAvKiBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCAqLzsgfTsKIAkJRkE2NTRBNkMxMTA4QUJFRDAw
MjYxNUUwIC8qIE1hdGhNTFRva2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkExMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRv
a2VuRWxlbWVudC5oICovOyB9OwpAQCAtMTYxMDYsNiArMTYxMDcsOCBAQAogCQlGNUMwNDFFMjBG
RkNBOTZEMDA4MzlENEEgLyogSlNIVE1MRGF0YUxpc3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTERhdGFMaXN0RWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGNUUwQzY1OTE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJP
bmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNUUwQzY1QTE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNo
b29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzYyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1dGlv
blN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZFIC8qIEV4ZWN1
dGlvblN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvblN0YWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY3NUEwNTlBRjE3MEQ4RkFBNUI4Q0FCRSAvKiBNYXRoTUxTZWxl
Y3RFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhN
TFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGODIxNjI5
OTAyOUY0RkI1MDEwMDAxMzEgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCUY5MTZDNDhCMERCNTEwRjgwMDc2Q0Q4MyAvKiBKU1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjY0NTgsNiArMjY0NjEsOCBAQAogCQkJCUY1MkFENUUzMTUzNDI0NUYwMDU5
RkJFNiAvKiBFbXB0eUNsaWVudHMuY3BwICovLAogCQkJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1
QyAvKiBFbXB0eUNsaWVudHMuaCAqLywKIAkJCQk0MTRERURFNTFGOUZFOTE1MDA0N0M0MEQgLyog
RW1wdHlGcmFtZUxvYWRlckNsaWVudC5oICovLAorCQkJCUY2NDA4MzM2MjRDMjdCN0UwMDg5MzI2
RSAvKiBFeGVjdXRpb25TdGFjay5jcHAgKi8sCisJCQkJRjY0MDgzMzcyNEMyN0I3RTAwODkzMjZF
IC8qIEV4ZWN1dGlvblN0YWNrLmggKi8sCiAJCQkJQ0VCQjhDMzIyMDc4NkRDQjAwMDM5NTQ3IC8q
IEZldGNoSWRpb21zLmNwcCAqLywKIAkJCQlDRUJCOEMzMTIwNzg2RENCMDAwMzk1NDcgLyogRmV0
Y2hJZGlvbXMuaCAqLywKIAkJCQk0MUFENzUzOTFDRUY2QkNFMDBBMzE0ODYgLyogRmV0Y2hPcHRp
b25zLmggKi8sCkBAIC0zMDkyMSw2ICszMDkyNiw3IEBACiAJCQkJNTFGNjQ1NjIxRjQ1Mzk4RjAw
QjU0REVEIC8qIEV4Y2VwdGlvbkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjkzODZCMjM1
RjZCNjkwMEM3RjNCMiAvKiBFeGNlcHRpb25EZXRhaWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0QxOTYzMTFENkNBQjc2MDBGQzdFNDcgLyogRXhjZXB0aW9uT3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCUY2NDA4MzM4MjRDMjdCODkwMDg5MzI2RSAvKiBFeGVjdXRpb25TdGFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODM3RkIzNDUxRjlFQTA2RDAwRDBGQzMxIC8qIEV4dGVuZGFibGVNZXNzYWdl
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRENERjQ0MURBMUM0NTQwMEVBNUI5MyAvKiBF
eHRlbmRlZENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4
RjcgLyogRXh0ZW5zaW9uc0dMLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGY5M2UzZmQzMWM2NWU0YjJlNTIy
NzQ1Nzk4NzNhYWExZGM0ZjcxNmMuLjY2NWZjYmE4ZjM4NjBmMDkzYjkyZDJjZTNlY2MzMmJlMzQ2
OTcyODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcApAQCAtNjEsNiArNjEsOSBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZE9ic2VydmVyLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKQEAgLTg4LDYgKzkxLDEwIEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
IEpTRE9NV2luZG93QmFzZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsKICAgICBudWxs
cHRyLAogICAgIG51bGxwdHIsCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNT
KQorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlv
blN0YXJ0LAorICAgICZyZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4
ZWN1dGlvbkVuZCwKKyNlbmRpZgogfTsKIAogSlNET01XaW5kb3dCYXNlOjpKU0RPTVdpbmRvd0Jh
c2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmUHRyPERPTVdpbmRvdz4mJiB3aW5k
b3csIEpTV2luZG93UHJveHkqIHByb3h5KQpAQCAtNDg3LDQgKzQ5NCwyNiBAQCB2b2lkIEpTRE9N
V2luZG93QmFzZTo6aW5zdGFudGlhdGVTdHJlYW1pbmcoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKUwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNT
KQorYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNr
T3JQcm9taXNlRXhlY3V0aW9uU3RhcnQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9iamVjdCwgY29u
c3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQoreworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIHsKKyAgICAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0aGlzT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnB1c2hBY3RpdmVTY3JpcHQoKnRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5mcmFtZSgpLT5kb2N1bWVudCgpLCBzY3JpcHRJRCwgc2NyaXB0VVJMKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBKU0RPTVdpbmRvd0Jhc2U6OnJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9t
aXNlRXhlY3V0aW9uRW5kKGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgeworICAgICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxjb25zdCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOworICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkucG9wQWN0aXZlU2NyaXB0KCp0aGlzT2JqZWN0
LT53cmFwcGVkKCkuZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAppbmRl
eCBlYzZkZGMxNzAyMTA4ZTk5Y2Y5OWRjMzYzMzVlMjVlMDA2NDVkODVhLi5hYWRiOTk2NmE2ODgx
ZjJlNmY1MDc5Yjc3YmM2MzkyNTVhNGVjMjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuaApAQCAtODUsNiArODUsMTEgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQgZmlyZUZyYW1lQ2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KERPTVdpbmRv
dyopOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBzdGF0aWMgYm9vbCBy
ZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1dGlvblN0YXJ0KGNv
bnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCB1aW50NjRfdCwgY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21p
c2VFeGVjdXRpb25FbmQoY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICBKU0RPTVdpbmRvd0Jhc2UoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwg
UmVmUHRyPERPTVdpbmRvdz4mJiwgSlNXaW5kb3dQcm94eSopOwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTV2luZG93UHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCmluZGV4IGRjZTczODIwYmJi
ZmQ5Yjk1YzU4NzlkMTNlZjY1ZWFiOThhOTA0MTguLjdmYjJiNzZkYWI2ZDljOWU4OTE4MjlkMDEy
YzUwMDg1NTlhMjhjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApAQCAtNTEsNiArNTEsMTAgQEAgY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUgSlNSZW1vdGVET01XaW5kb3dCYXNlOjpzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlID0KICAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKICAgICBudWxscHRy
LCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1p
bmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIsIC8vIHJlZ2lz
dGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQKKyAgICBu
dWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlzZUV4ZWN1
dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OkpTUmVtb3RlRE9N
V2luZG93QmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWZQdHI8UmVtb3RlRE9N
V2luZG93PiYmIHdpbmRvdywgSlNXaW5kb3dQcm94eSogcHJveHkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKaW5kZXgg
YzQ0ZjJmYjNhMGIwNWRhYWIxYThhOWUyZjg5YjUyZDg1MWViNDM2OC4uOWViMGFmY2NkMzA5Nzdh
ZjljOThlMzk3NmUzMzI0ZTE2MDUyY2QzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVCYXNlLmNwcApAQCAtNjksNiArNjksMTAg
QEAgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2U6
OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUKICAgICAmZGVmYXVsdExhbmd1YWdlLAogICAgIG51
bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKICAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0
cmVhbWluZworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgbnVsbHB0ciwgLy8g
cmVnaXN0ZXJFdmFsT3JGdW5jdGlvbk9yQ2FsbGJhY2tPclByb21pc2VFeGVjdXRpb25TdGFydAor
ICAgIG51bGxwdHIsIC8vIHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNl
RXhlY3V0aW9uRW5kCisjZW5kaWYKIH07CiAKIEpTV29ya2VyR2xvYmFsU2NvcGVCYXNlOjpKU1dv
cmtlckdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUmVmUHRyPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrbGV0R2xvYmFsU2NvcGVCYXNlLmNwcAppbmRleCBi
MTRiODE1NDJkYjg4OWVjNmQyNTliYzViNzBlZjJhNTA5OWM5NmQxLi5kODJjOGIzMWE2MWNhOGQx
MmUzMTZmMzNmN2QwODlkN2ExZmNmMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtsZXRHbG9iYWxTY29wZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2xldEdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTYxLDYgKzYxLDEw
IEBAIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTV29ya2xldEdsb2JhbFNjb3BlQmFz
ZTo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsCiAgICAgJmRlZmF1bHRMYW5ndWFnZSwKICAgICBu
dWxscHRyLCAvLyBjb21waWxlU3RyZWFtaW5nCiAgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVT
dHJlYW1pbmcKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIG51bGxwdHIsIC8v
IHJlZ2lzdGVyRXZhbE9yRnVuY3Rpb25PckNhbGxiYWNrT3JQcm9taXNlRXhlY3V0aW9uU3RhcnQK
KyAgICBudWxscHRyLCAvLyByZWdpc3RlckV2YWxPckZ1bmN0aW9uT3JDYWxsYmFja09yUHJvbWlz
ZUV4ZWN1dGlvbkVuZAorI2VuZGlmCiB9OwogCiBKU1dvcmtsZXRHbG9iYWxTY29wZUJhc2U6OkpT
V29ya2xldEdsb2JhbFNjb3BlQmFzZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUmVmUHRyPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAppbmRleCA0NjJiOTg0YjM0ZGYy
N2MyNDI5ZjdmMjExNmRhNzIyNTEzZTRkOTdhLi5lY2IxODY4OWE4N2ViN2Y0MmI3YmMyYjg3ZGVh
NjRhY2MzYzE3ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIlBheW1lbnRDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW5KYXZh
U2NyaXB0UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTEzOSw2ICsxNDAsOSBA
QCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyYwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9m
cmFtZSk7CiAgICAgU2V0Rm9yU2NvcGU8Y29uc3QgVVJMKj4gc291cmNlVVJMU2NvcGUobV9zb3Vy
Y2VVUkwsICZzb3VyY2VVUkwpOworICAgIAorICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5wdXNoQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRv
Y3VtZW50KCksIGpzU291cmNlQ29kZS5wcm92aWRlcklEKCksIHNvdXJjZVVSTC5zdHJpbmcoKSk7
CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2Zy
YW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5lKCksIHNvdXJjZUNv
ZGUuc3RhcnRDb2x1bW4oKSk7CiAKQEAgLTE1NCw5ICsxNTgsMTUgQEAgVmFsdWVPckV4Y2VwdGlv
biBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYgc291cmMKICAgICAgICAgb3B0aW9uYWxEZXRhaWxzID0gV1RGTW92ZShkZXRhaWxzKTsKICAg
ICB9CiAKLSAgICBpZiAob3B0aW9uYWxEZXRhaWxzKQorICAgIGlmIChvcHRpb25hbERldGFpbHMp
IHsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKKyAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5wb3BBY3RpdmVTY3JpcHQoKm1fZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgqb3B0aW9uYWxEZXRhaWxzKTsKKyAgICB9CiAKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKQorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
cG9wQWN0aXZlU2NyaXB0KCptX2ZyYW1lLmRvY3VtZW50KCkpOworICAgIAogICAgIHJldHVybiBy
ZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAzNTVkZGM3YTc1NWI4ODU1NDhmMDExMDc4ODgzNmI0
MGYxN2VlNWY5Li43M2U5MWFhZTQ2MzU5NzZhMjJiOGU1MTUwZWIwMzUyYjlhYTRjZjc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtNTAxNSw2ICs1MDE1LDQyIEBAIHN1YiBHZW5lcmF0ZUF0dHJpYnV0ZUdldHRlckJvZHlE
ZWZpbml0aW9uCiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAgICAgCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1l
bnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBK
U0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0
b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJ
bnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBh
cGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7Cisg
ICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFw
aUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NOYW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNO
YW1lID0gIk5vbmUiOworICAgICAgICBteSAkYXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAg
aWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNO
YW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0g
ZWxzaWYgKCRhdHRyaWJ1dGUtPnR5cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAg
ICAgICAgICRhcGlGdW5jTmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0
cmlidXRlKTsKKyAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JU
eXBlKCRhdHRyaWJ1dGUtPnR5cGUpKSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0
cmlidXRlLT5uYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgQHRlbXAgPSAo
KTsKKyAgICAgICAgICAgICgkYXBpRnVuY05hbWUsIEB0ZW1wKSA9ICRjb2RlR2VuZXJhdG9yLT5H
ZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlLT50eXBlLT5uYW1lLCAk
YXR0cmlidXRlKTsKKyAgICAgICAgICAgIGlmIChzY2FsYXIgQHRlbXAgPiAwKSB7CisgICAgICAg
ICAgICAgICAgJGFwaUFyZ3VtZW50cyA9ICI6IiAuIGpvaW4oIjoiLCBAdGVtcCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsIFwiJHthcGlDbGFzc05hbWV9Ojoke2FwaUZ1bmNOYW1lfSR7YXBpQXJndW1l
bnRzfVwiKTtcbiIpOworICAgIH0KKwogICAgIGlmICgkaGFzQ3VzdG9tR2V0dGVyKSB7CiAgICAg
ICAgIG15ICRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmly
c3QoJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGF0
dHJpYnV0ZS0+bmFtZSk7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4g
dGhpc09iamVjdC4ke2ltcGxHZXR0ZXJGdW5jdGlvbk5hbWV9KGxleGljYWxHbG9iYWxPYmplY3Qp
O1xuIik7CkBAIC01MTQ5LDYgKzUxODUsNDUgQEAgc3ViIEdlbmVyYXRlQXR0cmlidXRlU2V0dGVy
Qm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3VzdG9tRWxlbWVudFJlYWN0aW9uc1N0YWNr
SWZOZWVkZWQoJG91dHB1dEFycmF5LCAkYXR0cmlidXRlLCAibGV4aWNhbEdsb2JhbE9iamVjdCIp
OwogCisgICAgbXkgQGFwaXNOb3RUb0luc3RydW1lbnQgPSBxdyhKU1F1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNN
ZW1vcnlJbmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RN
RmFjdG9yeSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50
ZXJuYWxzU2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxk
SW5zdHJ1bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAg
ICAgIGlmICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVu
dCA9IDA7CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRz
aG91bGRJbnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxv
YWRPYnNlcnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIFxuIik7CisKKyAgICAgICAgbXkgJGFwaUNsYXNzTmFtZSA9IHN1YnN0cigkY2xhc3NO
YW1lLCAyKTsKKyAgICAgICAgbXkgJGFwaUZ1bmNOYW1lID0gIk5vbmUiOworICAgICAgICBteSAk
YXBpQXJndW1lbnRzID0gIiI7CisKKyAgICAgICAgaWYgKEhhc0N1c3RvbVNldHRlcigkYXR0cmli
dXRlKSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX3Vj
Zmlyc3QoJGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnR5
cGUtPm5hbWUgZXEgIkV2ZW50SGFuZGxlciIpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9
IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKKyAgICAgICAgfSBl
bHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUeXBlKCRhdHRyaWJ1dGUtPnR5cGUp
KSB7CisgICAgICAgICAgICAkYXBpRnVuY05hbWUgPSAkYXR0cmlidXRlLT5uYW1lOworICAgICAg
ICB9IGVsc2lmICgkYXR0cmlidXRlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntSZXBsYWNlYWJsZX0p
IHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRhdHRyaWJ1dGUtPm5hbWU7CisgICAgICAg
IH0gZWxzaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1dEZvcndhcmRzfSkg
eworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGF0dHJpYnV0ZS0+bmFtZTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG15IEB0ZW1wID0gKCk7CisgICAgICAgICAgICAoJGFwaUZ1
bmNOYW1lLCBAdGVtcCkgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvbihcJWltcGxJ
bmNsdWRlcywgJGludGVyZmFjZS0+dHlwZS0+bmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAg
ICBpZiAoc2NhbGFyIEB0ZW1wID4gMCkgeworICAgICAgICAgICAgICAgICRhcGlBcmd1bWVudHMg
PSAiOiIgLiBqb2luKCI6IiwgQHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNz
TmFtZX06OiR7YXBpRnVuY05hbWV9JHthcGlBcmd1bWVudHN9XCIpO1xuIik7CisgICAgfQorCiAg
ICAgaWYgKCRuZWVkU2VjdXJpdHlDaGVjaykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNET01CaW5kaW5nU2VjdXJpdHkuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT50eXBlLT5uYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC01MzY2LDYgKzU0NDEsMzQg
QEAgc3ViIEdlbmVyYXRlT3BlcmF0aW9uQm9keURlZmluaXRpb24KIAogICAgIEdlbmVyYXRlQ3Vz
dG9tRWxlbWVudFJlYWN0aW9uc1N0YWNrSWZOZWVkZWQoJG91dHB1dEFycmF5LCAkb3BlcmF0aW9u
LCAiKmxleGljYWxHbG9iYWxPYmplY3QiKSB1bmxlc3MgJGdlbmVyYXRpbmdPdmVybG9hZERpc3Bh
dGNoZXI7CiAKKyAgICBteSBAYXBpc05vdFRvSW5zdHJ1bWVudCA9IHF3KEpTTW9ja1BhZ2VPdmVy
bGF5IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCBKU1F1aWNrVGltZVBsdWdpblJlcGxhY2Vt
ZW50IEpTR0NPYnNlcnZhdGlvbiBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3MgSlNNZW1vcnlJ
bmZvIEpTTWFsbG9jU3RhdGlzdGljcyBKU0ludGVybmFsU2V0dGluZ3MgSlNNb2NrQ0RNRmFjdG9y
eSBKU01vY2tQYXltZW50Q29vcmRpbmF0b3IgSlNJbnRlcm5hbHNNYXBMaWtlIEpTSW50ZXJuYWxz
U2V0TGlrZSBKU1NlcnZpY2VXb3JrZXJJbnRlcm5hbHMgKTsKKyAgICBteSAkc2hvdWxkSW5zdHJ1
bWVudCA9IDE7CisKKyAgICBmb3IgKEBhcGlzTm90VG9JbnN0cnVtZW50KSB7CisgICAgICAgIGlm
ICgkXyBlcSAkY2xhc3NOYW1lKSB7CisgICAgICAgICAgICAkc2hvdWxkSW5zdHJ1bWVudCA9IDA7
CisgICAgICAgICAgICBsYXN0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRzaG91bGRJ
bnN0cnVtZW50KSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IFxuIik7CisgICAgICAgIG15ICRhcGlDbGFzc05hbWUgPSBzdWJzdHIoJGNsYXNzTmFtZSwgMik7
CisgICAgICAgIG15ICRhcGlGdW5jTmFtZSA9ICJOb25lIjsKKworICAgICAgICBpZiAoJGdlbmVy
YXRpbmdPdmVybG9hZERpc3BhdGNoZXIpIHsKKyAgICAgICAgICAgICRhcGlGdW5jTmFtZSA9ICRm
dW5jdGlvbk5hbWU7CisgICAgICAgIH0gZWxzaWYgKEhhc0N1c3RvbU1ldGhvZCgkb3BlcmF0aW9u
KSkgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25O
YW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGFwaUZ1bmNOYW1lID0gJGZ1bmN0
aW9uSW1wbGVtZW50YXRpb25OYW1lOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgXCIke2FwaUNsYXNzTmFtZX06OiR7
YXBpRnVuY05hbWV9XCIpO1xuIik7CisgICAgfQorCiAgICAgIyBGb3Igb3ZlcmxvYWRzLCB3ZSBn
ZW5lcmF0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgaW4gdGhlIG92ZXJsb2FkIGRpc3BhdGNoZXIsIGlu
c3RlYWQgb2YgdGhlIGJvZHkgb2YgZWFjaCBvdmVybG9hZCwgYXMgcGVyIHNwZWNpZmljYXRpb246
CiAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tY3JlYXRlLW9wZXJh
dGlvbi1mdW5jdGlvbgogICAgIGlmICghJGlzT3ZlcmxvYWRlZCB8fCAkZ2VuZXJhdGluZ092ZXJs
b2FkRGlzcGF0Y2hlcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTTWFwTGlrZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNNYXBMaWtlLmNwcAppbmRleCAzY2M3MzgwN2QyMjFiZGIzZjU1ODRiNzgy
N2FkOWMwMWJjOGI2MGJmLi4yMTMyMzA4MDIxYTVhNWZmZTRkZDM5NjQzM2UzOTZmYThhM2M4NmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNN
YXBMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNNYXBMaWtlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5o
IgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtMjE2LDYgKzIxOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc01hcExpa2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNpemUiKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0KIApAQCAtMjMwLDYgKzIzNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkdldEJv
ZHkoSlNDOjpKU0dsb2JhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBM
aWtlOjpnZXQiKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC0yNDksNiArMjU1LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShKU0M6
OkpTR2xvYmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6Omhh
cyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKQEAgLTI2OCw2ICsyNzYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keShKU0M6OkpT
RwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6ZW50cmllcyIp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4Miw2ICsyOTIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25L
ZXlzQm9keShKU0M6OkpTR2xvYgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
TWFwTGlrZTo6a2V5cyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1Zh
bHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndhcmRLZXlzVG9NYXBMaWtlKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI5Niw2ICsz
MDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtlUHJvdG90
eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEpTQzo6SlNHbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiTWFwTGlrZTo6dmFsdWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZFZhbHVlc1RvTWFw
TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwog
fQogCkBAIC0zMTAsNiArMzI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzTWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJvZHkoSlNDOjpKU0cKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OmZvckVhY2giKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CkBAIC0zMjksNiArMzQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uU2V0Qm9keShKU0M6OkpTR2xvYmEKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIk1hcExpa2U6OnNldCIpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZl
U2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTM1
MSw2ICszNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNNYXBMaWtl
UHJvdG90eXBlRnVuY3Rpb25DbGVhckJvZHkoSlNDOjpKU0dsbwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiTWFwTGlrZTo6Y2xlYXIiKTsKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICBmb3J3YXJkQ2xlYXJUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpj
YWxsRnJhbWUsICpjYXN0ZWRUaGlzKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMzY3LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc01hcExpa2VQcm90b3R5cGVGdW5jdGlvbkRlbGV0ZUJvZHkoSlNDOjpKU0dsCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJNYXBMaWtlOjpkZWxldGUiKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNSZWFkT25seU1hcExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTUmVhZE9ubHlNYXBMaWtlLmNwcAppbmRleCA0NDZiYTM5MDdmNzlmOWM5OTg1
NDJjODg5MTc1MmRmOTI3YWFmZDBlLi43MTRjNGEwODBjODllYWMxMGEyZTgwMDU4MzhiZDgyYjMz
ZjBkYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNSZWFkT25seU1hcExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5TWFwTGlrZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNp
bmNsdWRlICJKU0RPTU1hcExpa2UuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxMCw2ICsyMTIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seU1hcExpa2VTaXplR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJSZWFkT25seU1hcExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBmb3J3
YXJkU2l6ZVRvTWFwTGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSkpKTsKIH0K
IApAQCAtMjI0LDYgKzIyOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uR2V0Qm9keShKU0M6CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OmdldCIpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVT
dGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKQEAgLTI0Myw2ICsyNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5jdGlvbkhhc0JvZHkoSlNDOgogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlNYXBMaWtlOjpoYXMiKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CkBAIC0yNjIsNiArMjcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzUmVhZE9ubHlNYXBMaWtlUHJvdG90eXBlRnVuY3Rpb25FbnRyaWVzQm9keSgKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5TWFwTGlrZTo6ZW50cmllcyIpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJ
RExBbnk+KGZvcndhcmRFbnRyaWVzVG9NYXBMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI3Niw2ICsyODYsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNSZWFkT25seU1hcExpa2VQcm90b3R5cGVGdW5j
dGlvbktleXNCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVh
ZE9ubHlNYXBMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEtleXNUb01hcExpa2UoKmxleGlj
YWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjkw
LDYgKzMwMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5
TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzQm9keShKCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6OnZhbHVlcyIpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExBbnk+KGZvcndh
cmRWYWx1ZXNUb01hcExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0
ZWRUaGlzKSkpKTsKIH0KIApAQCAtMzA0LDYgKzMxOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5TWFwTGlrZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaEJv
ZHkoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seU1hcExpa2U6
OmZvckVhY2giKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUmVhZE9ubHlTZXRMaWtlLmNwcAppbmRleCBlYzQ0
NGY1NmRmNTlmMmVmOWFiODI1YTY3MmM3MTY1NTk1MGQ3ZjQwLi44ODIyYWFmNTk1NjdlZmJhZmRj
YWZmOTBjYzE0Mzg3ODQyMDhmNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNSZWFkT25seVNldExpa2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1JlYWRPbmx5U2V0TGlrZS5jcHAKQEAgLTMy
LDYgKzMyLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
U2V0TGlrZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4K
QEAgLTIwOCw2ICsyMTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNSZWFkT25seVNldExp
a2VTaXplR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OnNpemUiKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBmb3J3YXJkU2l6ZVRvU2V0TGlrZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0KSkpKTsKIH0KIApAQCAtMjIyLDYgKzIyNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlrZVByb3RvdHlwZUZ1bmN0aW9uSGFzQm9keShK
U0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJSZWFkT25seVNldExpa2U6
OmhhcyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI0MSw2ICsyNDcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNSZWFkT25seVNldExpa2VQcm90b3R5cGVGdW5jdGlvbkVudHJpZXNC
b2R5KAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiUmVhZE9ubHlTZXRMaWtl
OjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExpa2UoKmxleGljYWxHbG9i
YWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0KIApAQCAtMjU1LDYgKzI2
Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1JlYWRPbmx5U2V0TGlr
ZVByb3RvdHlwZUZ1bmN0aW9uS2V5c0JvZHkoSlNDCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJSZWFkT25seVNldExpa2U6OmtleXMiKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMQW55Pihmb3J3YXJkS2V5c1Rv
U2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkp
OwogfQogCkBAIC0yNjksNiArMjc5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXNCb2R5KEoKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJlYWRPbmx5U2V0TGlrZTo6dmFsdWVzIik7
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pT
PElETEFueT4oZm9yd2FyZFZhbHVlc1RvU2V0TGlrZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
bGxGcmFtZSwgKmNhc3RlZFRoaXMpKSkpOwogfQogCkBAIC0yODMsNiArMjk1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzUmVhZE9ubHlTZXRMaWtlUHJvdG90eXBlRnVu
Y3Rpb25Gb3JFYWNoQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlJl
YWRPbmx5U2V0TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NldExpa2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKaW5kZXggYWE2ZjA4
ODIzYWZkMTlkN2YyYzQzZTY4OTU2MjhkMDU0ODBiNGQxMC4uOTBlYjQ4OTkxMjc0ZDRjOTYxYzkx
NjhhYTdlZjVjODdmOTkxMzRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2V0TGlrZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NU2V0TGlrZS5oIgogI2luY2x1
ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CdWlsdGluTmFtZXMuaD4KQEAgLTIxNCw2ICsyMTYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNTZXRMaWtlU2l6ZUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJT
ZXRMaWtlOjpzaXplIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZm9yd2FyZFNpemVUb1Nl
dExpa2UobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpKSk7CiB9CiAKQEAgLTIyOCw2
ICsyMzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJv
dG90eXBlRnVuY3Rpb25IYXNCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiU2V0TGlrZTo6aGFzIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMjQ3LDYgKzI1Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVG
dW5jdGlvbkVudHJpZXNCb2R5KEpTQzo6SlNHCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJTZXRMaWtlOjplbnRyaWVzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2FyZEVudHJpZXNUb1NldExp
a2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRUaGlzKSkpKTsKIH0K
IApAQCAtMjYxLDYgKzI2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1NldExpa2VQcm90b3R5cGVGdW5jdGlvbktleXNCb2R5KEpTQzo6SlNHbG9iCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjprZXlzIik7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEFueT4oZm9yd2Fy
ZEtleXNUb1NldExpa2UoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICpjYXN0ZWRU
aGlzKSkpKTsKIH0KIApAQCAtMjc1LDYgKzI4NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvblZhbHVlc0JvZHkoSlNDOjpKU0ds
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjp2YWx1ZXMiKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMQW55Pihmb3J3YXJkVmFsdWVzVG9TZXRMaWtlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAqY2FzdGVkVGhpcykpKSk7CiB9CiAKQEAgLTI4OSw2ICszMDEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25Gb3JF
YWNoQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0
TGlrZTo6Zm9yRWFjaCIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9i
YWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTMwOCw2ICszMjIsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNTZXRMaWtlUHJvdG90eXBlRnVuY3Rpb25BZGRCb2R5
KEpTQzo6SlNHbG9iYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiU2V0TGlr
ZTo6YWRkIik7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtMzI3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1NldExpa2VQcm90b3R5cGVGdW5jdGlvbkNsZWFyQm9keShKU0M6
OkpTR2xvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJTZXRMaWtlOjpjbGVh
ciIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGZvcndhcmRDbGVhclRvU2V0TGlr
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgKmNhc3RlZFRoaXMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zNDMsNiArMzYxLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2V0TGlrZVByb3RvdHlwZUZ1bmN0
aW9uRGVsZXRlQm9keShKU0M6OkpTR2wKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlNldExpa2U6OmRlbGV0ZSIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKaW5kZXggNmRmYzQyZmZkY2Y0ODQ0MzMxYWU5NWRiOTc0MTc5M2NjOWNkNzY2My4u
N2I2NzBiMTU5MmZhMDE4MGM2MmU2ZGJhN2JjZDU3NTBlZmIzNjA0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNO
b2RlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjIyLDYgKzIyNCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxlCiAgICAgRVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNob3VsZEFsbG93QWNjZXNzKTsKICAgICBpZiAoIXNo
b3VsZEFsbG93QWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6OmV4
Y2l0aW5nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5leGNpdGluZ0F0dHIoKSkpKTsKIH0KQEAgLTIz
Nyw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0
aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25FeGNpdGluZwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6ZXhjaXRpbmdGdW5jdGlvbiIp
OwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3IpOwogICAgIEVYQ0VQVElPTl9BU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRB
bGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2VzcykKQEAgLTI2Myw2ICsyNjks
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2Jq
ZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzcwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEFjdGl2ZURPTU9iamVjdDo6cG9zdE1lc3NhZ2UiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI4Niw2ICsyOTQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZAogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjaygqbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RBY3RpdmVET01PYmplY3Q6Om92ZXJsb2FkZWRN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTMwMSw2ICszMTEsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEFjdGl2ZURPTU9iamVjdDo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBwYXJhbTEg
PSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJwYXJhbTEiLCAiVGVzdEFjdGl2ZURPTU9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kIiwgIk5vZGUiKTsgfSk7CkBAIC0zMTksNiArMzMxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RBY3RpdmVET01PYmplY3Q6OmpzVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0
aW9uT3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9i
amVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLndpbmRvdygpLCBUaHJvd1NlY3VyaXR5RXJyb3Ip
OwogICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpIHx8ICFzaG91bGRBbGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0Fj
Y2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnMuY3BwCmluZGV4IDQ2NzMzYTdkNWU3M2FhOGM3OGQy
YWM5ZjQxZjc2MDZjNjg5ODlhMzEuLjI4YTlhM2JlN2FiZWM4MDU3NTM2ODE4OTdiOTJiMjgzMjNm
NTc0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcApAQCAtMzUsNiArMzUsOCBAQAogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
ICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgpAQCAtMjE5LDYgKzIyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc0dldHRlcihKU0dsb2JhbE9iCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6YXR0cmlidXRlV2l0aENFUmVh
Y3Rpb25zIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRlV2l0aENFUmVhY3Rpb25zKCkp
KSk7CiB9CkBAIC0yMzMsNiArMjM3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENF
UmVhY3Rpb25zQXR0cmlidXRlV2l0aENFUmVhY3Rpb25zU2V0dGVyKEpTR2xvYmFsT2IKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFj
dGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rp
b25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNTEsNiArMjU3LDggQEAgc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9u
c0dldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25z
OjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGF0dHJpYnV0ZXdpdGhjZXJlYWN0aW9uc0F0dHIpKSkpOwogfQpAQCAtMjY1LDYgKzI3Myw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNTZXR0ZXIoSlNHCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVh
Y3Rpb25TdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RhdHRyaWJ1dGV3aXRoY2Vy
ZWFjdGlvbnNBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFs
c2UpOwpAQCAtMjgzLDYgKzI5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJl
YWN0aW9uc1N0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uczo6c3RyaW5naWZpZXJBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllcj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CkBA
IC0yOTYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25z
U3RyaW5naWZpZXJBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oInN0cmluZ2lmaWVyQXR0cmlidXRlIiksIHN0cmxlbigic3RyaW5naWZp
ZXJBdHRyaWJ1dGUiKSk7CiAgICAgYXV0byB2YWx1ZVRvRm9yd2FyZFRvID0gdGhpc09iamVjdC5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIGlkKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTMxOSw2ICszMzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Q0VSZWFjdGlvbnNBdHRyaWJ1dGVXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRHZXR0
ZXIoSgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlvbnM6OmF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJp
YnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZCgpKSkpOwogfQpAQCAtMzMzLDYgKzM0OSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc0F0dHJpYnV0ZVdpdGhDRVJl
YWN0aW9uc05vdE5lZWRlZFNldHRlcihKCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRoQ0VSZWFj
dGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNTEsNiArMzY5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENF
UmVhY3Rpb25zUmVmbGVjdEF0dHJpYnV0ZVdpdGhDRVJlYWN0aW9uc05vdE5lZWRlZEcKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjphdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhj
ZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERP
TVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0
ZXdpdGhjZXJlYWN0aW9uc25vdG5lZWRlZEF0dHIpKSkpOwogfQpAQCAtMzY1LDYgKzM4NSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDRVJlYWN0aW9uc1JlZmxlY3RBdHRyaWJ1dGVX
aXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWRTCiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25EaXNhbGxvd2VkU2NvcGUgY3VzdG9t
RWxlbWVudFJlYWN0aW9uRGlzYWxsb3dlZFNjb3BlOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZXdpdGhjZXJl
YWN0aW9uc25vdG5lZWRlZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC0zODMsNiArNDA1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWRHZXR0ZXIoSlNHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjpzdHJpbmdpZmll
ckF0dHJpYnV0ZU5vdE5lZWRlZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJm
YWNlPFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5naWZpZXJBdHRy
aWJ1dGVOb3ROZWVkZWQoKSkpKTsKIH0KQEAgLTM5Niw2ICs0MjAsOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckF0dHJpYnV0ZU5vdE5lZWRlZFNl
dHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q0VSZWFjdGlvbnM6
OnN0cmluZ2lmaWVyQXR0cmlidXRlTm90TmVlZGVkIik7CiAgICAgYXV0byBpZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigic3RyaW5n
aWZpZXJBdHRyaWJ1dGVOb3ROZWVkZWQiKSwgc3RybGVuKCJzdHJpbmdpZmllckF0dHJpYnV0ZU5v
dE5lZWRlZCIpKTsKICAgICBhdXRvIHZhbHVlVG9Gb3J3YXJkVG8gPSB0aGlzT2JqZWN0LmdldCgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDIyLDYgKzQ0OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0aW9uc1Byb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENF
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlv
blN0YWNrKCpsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnMiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIGltcGwubWV0aG9kV2l0aENFUmVhY3Rpb25zKCk7CkBAIC00NDAsNiAr
NDY4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rp
b25zUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ0UKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CiAgICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29w
ZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rp
b25zOjptZXRob2RXaXRoQ0VSZWFjdGlvbnNOb3ROZWVkZWQiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwubWV0aG9kV2l0aENFUmVhY3Rpb25zTm90TmVlZGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
Zmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllci5jcHAKaW5kZXggZGUxOTRkNDU1MzUzZGNjZDg5NmE4ODM1
Mjc3NjQwNDc3M2EwYzFiZS4uNmIwNDVhNTliZTcwYTYxZThhNjYzNmQ1NjdlMjMwMjliNGMyZTYz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcApAQCAt
MzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNs
dWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5j
dGlvblByb3RvdHlwZS5oPgpAQCAtMjAxLDYgKzIwMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyVmFsdWVHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnZhbHVlKCkpKSk7CiB9CkBAIC0yMTUs
NiArMjE5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENFUmVhY3Rpb25zU3RyaW5n
aWZpZXJWYWx1ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGUKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3Rv
bUVsZW1lbnRSZWFjdGlvblN0YWNrKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI6
OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMjMzLDYgKzIzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyVmFsdWVXaXRob3V0UmVhY3Rpb25zR2V0dGVyKEpTCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZVdpdGhv
dXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC52YWx1ZVdpdGhvdXRSZWFjdGlvbnMo
KSkpKTsKIH0KQEAgLTI0Nyw2ICsyNTUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
Q0VSZWFjdGlvbnNTdHJpbmdpZmllclZhbHVlV2l0aG91dFJlYWN0aW9uc1NldHRlcihKUwogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ3VzdG9tRWxlbWVudFJl
YWN0aW9uRGlzYWxsb3dlZFNjb3BlIGN1c3RvbUVsZW1lbnRSZWFjdGlvbkRpc2FsbG93ZWRTY29w
ZTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyOjpzZXRWYWx1ZVdpdGhvdXRSZWFjdGlvbnMiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yNjcsNiArMjc3LDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENFUmVhY3Rpb25zU3RyaW5naWZp
ZXJQcm90b3R5cGVGdW5jdGlvblQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyOjp2YWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGltcGwudmFsdWUoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAppbmRleCA0MGMzNDM3
MzAyMzQ3MzdhOTc2YTc2ODUxYzE4NGU2Njg2M2Q1NTMwLi5hZGRmYzJlYTNhYzE5OTA2MjNmZjA5
YWQ3ZmM1MGFkOWI4Yjc5Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCkBAIC0zOCw2ICsz
OCw4IEBACiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIz
OSw2ICsyNDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RB
dHRyaWJ1dGVJbnRlcmZhY2VHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZUludGVyZmFjZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1w
bC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFj
ZXJJbnRlcmZhY2UoaW1wbCwgInRlc3RBdHRyaWJ1dGVJbnRlcmZhY2UiX3MpOwpAQCAtMjU0LDYg
KzI1OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJp
YnV0ZUludGVyZmFjZVNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RDYWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlSW50ZXJmYWNlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3NCw2ICsyODAsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVTcGVj
aWZpZWRHZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0Q2FsbFRyYWNlcjo6dGVzdEF0dHJpYnV0ZVNwZWNpZmllZCIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2lu
Z0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJBdHRyaWJ1dGUo
aW1wbCwgInRlc3RBdHRyaWJ1dGVTcGVjaWZpZWQiX3MpOwpAQCAtMjg5LDYgKzI5Nyw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGVzdEF0dHJpYnV0ZVNwZWNpZmll
ZFNldHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RD
YWxsVHJhY2VyOjpzZXRUZXN0QXR0cmlidXRlU3BlY2lmaWVkIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwOSw2ICszMTksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudEdldHRl
cihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNl
cjo6dGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkp
KQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCAidGVz
dEF0dHJpYnV0ZVdpdGhWYXJpYW50Il9zKTsKQEAgLTMyNCw2ICszMzYsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0Q2FsbFRyYWNlclRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudFNldHRl
cihKU0dsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNl
cjo6c2V0VGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuaW9u
PElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC0zNDQsNiArMzU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENhbGxUcmFjZXJU
ZXN0UmVhZG9ubHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RSZWFkb25seUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC50ZXN0UmVhZG9ubHlBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTM1OSw2
ICszNzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25JbnRlcmZhY2UiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKQogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2Fs
bFRyYWNlckludGVyZmFjZShpbXBsLCAidGVzdE9wZXJhdGlvbkludGVyZmFjZSJfcyk7CkBAIC0z
NzgsNiArMzk2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENh
bGxUcmFjZXJQcm90b3R5cGVGdW5jdGlvblRlc3RPcGVyYXRpb24KICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RDYWxsVHJhY2VyOjp0ZXN0T3BlcmF0aW9uU3BlY2lmaWVk
Iik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVz
dENhbGxUcmFjZXJPcGVyYXRpb24oaW1wbCwgInRlc3RPcGVyYXRpb25TcGVjaWZpZWQiX3MpOwpA
QCAtMzk3LDYgKzQxNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDYWxsVHJhY2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhB
cmd1bWVudHMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQyNyw2
ICs0NDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVB
cmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNDUxLDYg
KzQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDYWxsVHJh
Y2VyUHJvdG90eXBlRnVuY3Rpb25UZXN0T3BlcmF0aW9uCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0Q2FsbFRyYWNlcjo6dGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJn
dW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQ3NSw2ICs1
MDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRyYWNl
clByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoTnVsbGFibGVWYXJp
YW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTQ5
OSw2ICs1MjcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2Fs
bFRyYWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoT3B0aW9u
YWxWYXJpYW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGF1dG8gdmFyaWFudE9wdGlvbmFsQXJnID0gYXJndW1lbnQwLnZhbHVl
KCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbmlvbjxJRExCb29sZWFu
LCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMVW5pb248SURMQm9vbGVhbiwgSURMRmxvYXQsIElETERPTVN0cmluZz4+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETEJvb2xlYW4sIElETEZsb2F0LCBJRExET01TdHJp
bmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTUyMSw2
ICs1NTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q2FsbFRy
YWNlclByb3RvdHlwZUZ1bmN0aW9uVGVzdE9wZXJhdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdENhbGxUcmFjZXI6OnRlc3RPcGVyYXRpb25XaXRoRGVmYXVsdFZh
cmlhbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgYXV0byB2YXJpYW50RGVmYXVsdEFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlz
VW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExVbmlvbjxJRExCb29sZWFu
LCBJRExGbG9hdCwgSURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAKaW5kZXggNTk3Zjc2ZjRlMzgyMmZmYjk1OGI2OWI2
OGM3MTllZjIxNTJjMTk3Mi4uNTlkZWVkZmQ2OTQ2MmZjOTg3MTdlNDQ0NTI1M2E1ZTIzOGM4YmQy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdERPTUpJVC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdERPTUpJVC5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0ZyYW1lVHJhY2Vycy5oPgpAQCAtNjQyLDYgKzY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRBbnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OmFueUF0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEFueT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5hbnlBdHRyKCkpKSk7CiB9CkBAIC02NTUsNiArNjU5LDggQEAgc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVEJvb2xlYW5BdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERP
TUpJVDo6Ym9vbGVhbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYm9vbGVhbkF0dHIoKSkpKTsK
IH0KQEAgLTY2OCw2ICs2NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
Qnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5ieXRlQXR0cigpKSkpOwogfQpAQCAtNjgxLDYgKzY4OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRPY3RldEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Om9jdGV0QXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMT2N0ZXQ+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwub2N0ZXRBdHRyKCkpKSk7CiB9CkBAIC02OTQsNiArNzA0LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFNob3J0QXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdERPTUpJVDo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTaG9y
dD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIoKSkpKTsK
IH0KQEAgLTcwNyw2ICs3MTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
VW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0QXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKSkpOwogfQpAQCAtNzIwLDYg
KzczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RET01KSVQ6OmxvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxvbmdBdHRyKCkp
KSk7CiB9CkBAIC03MzMsNiArNzQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERP
TUpJVFVuc2lnbmVkTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5zaWduZWRMb25nQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTc0Niw2
ICs3NjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTG9uZ0xvbmdBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0RE9NSklUOjpsb25nTG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0
b0pTPElETExvbmdMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmxv
bmdMb25nQXR0cigpKSkpOwogfQpAQCAtNzU5LDYgKzc3OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RET01KSVRVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OnVuc2lnbmVk
TG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNpZ25lZExvbmdM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVuc2lnbmVkTG9uZ0xv
bmdBdHRyKCkpKSk7CiB9CkBAIC03NzIsNiArNzk0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdERPTUpJVEZsb2F0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6ZmxvYXRBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExGbG9hdD4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5mbG9hdEF0dHIoKSkpKTsKIH0KQEAgLTc4NSw2ICs4MDksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRmxvYXRBdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVucmVzdHJpY3RlZEZsb2F0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBp
bXBsLnVucmVzdHJpY3RlZEZsb2F0QXR0cigpKSkpOwogfQpAQCAtNzk4LDYgKzgyNCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVREb3VibGVBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmRvdWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERvdWJsZT4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5kb3VibGVBdHRyKCkpKSk7CiB9
CkBAIC04MTEsNiArODM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVu
cmVzdHJpY3RlZERvdWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dW5yZXN0cmljdGVkRG91YmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5yZXN0cmljdGVkRG91YmxlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3RlZERvdWJsZUF0dHIoKSkpKTsK
IH0KQEAgLTgyNCw2ICs4NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
RG9tU3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdBdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuZG9tU3RyaW5nQXR0cigpKSkpOwogfQpAQCAtODM3LDYgKzg2OSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCeXRlU3RyaW5nQXR0ckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmJ5dGVTdHJpbmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCeXRl
U3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJpbmdB
dHRyKCkpKSk7CiB9CkBAIC04NTAsNiArODg0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdERPTUpJVFVzdlN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8K
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6dXN2U3RyaW5nQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVzdlN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTg2Myw2ICs4
OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUTm9kZUF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0RE9NSklUOjpub2RlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
SW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlQXR0cigpKSkpOwogfQpAQCAtODc2LDYgKzkx
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRCb29sZWFuTnVsbGFibGVB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RET01KSVQ6OmJvb2xlYW5OdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLmJvb2xlYW5OdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTg4OSw2ICs5Mjks
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUQnl0ZU51bGxhYmxlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RE9NSklUOjpieXRlTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExOdWxsYWJsZTxJRExCeXRlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5ieXRlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05MDIsNiArOTQ0LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVE9jdGV0TnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJ
VDo6b2N0ZXROdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETE9jdGV0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vY3Rl
dE51bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTE1LDYgKzk1OSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RET01KSVRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6OnNob3J0
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExT
aG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc2hvcnROdWxsYWJs
ZUF0dHIoKSkpKTsKIH0KQEAgLTkyOCw2ICs5NzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RE9NSklUVW5zaWduZWRTaG9ydE51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25lZFNob3J0
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExV
bnNpZ25lZFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNp
Z25lZFNob3J0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NDEsNiArOTg5LDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVExvbmdOdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJ
VDo6bG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFi
bGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubG9uZ051
bGxhYmxlQXR0cigpKSkpOwogfQpAQCAtOTU0LDYgKzEwMDQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0RE9NSklUVW5zaWduZWRMb25nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnNpZ25l
ZExvbmdOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxl
PElETFVuc2lnbmVkTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dW5zaWduZWRMb25nTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC05NjcsNiArMTAxOSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RET01KSVRMb25nTG9uZ051bGxhYmxlQXR0ckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RE
T01KSVQ6OmxvbmdMb25nTnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExOdWxsYWJsZTxJRExMb25nTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwubG9uZ0xvbmdOdWxsYWJsZUF0dHIoKSkpKTsKIH0KQEAgLTk4MCw2ICsxMDM0LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdERPTUpJVFVuc2lnbmVkTG9uZ0xvbmdOdWxsYWJs
ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dERPTUpJVDo6dW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5zaWduZWRMb25nTG9uZz4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ051bGxhYmxlQXR0cigpKSkp
OwogfQpAQCAtOTkzLDYgKzEwNDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9N
SklURmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpmbG9hdE51bGxhYmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMRmxvYXQ+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBA
IC0xMDA2LDYgKzEwNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5y
ZXN0cmljdGVkRmxvYXROdWxsYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1bnJlc3RyaWN0ZWRGbG9hdE51bGxhYmxlQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMVW5yZXN0cmljdGVk
RmxvYXQ+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnVucmVzdHJpY3Rl
ZEZsb2F0TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDE5LDYgKzEwNzksOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklURG91YmxlTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklU
Ojpkb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxh
YmxlPElETERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG91
YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDMyLDYgKzEwOTQsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0RE9NSklUVW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyR2V0
dGVyKEpTR2xvYmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1
bnJlc3RyaWN0ZWREb3VibGVOdWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwudW5yZXN0cmljdGVkRG91YmxlTnVsbGFibGVBdHRyKCkpKSk7CiB9
CkBAIC0xMDQ1LDYgKzExMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RE9NSklU
RG9tU3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpkb21TdHJpbmdOdWxsYWJsZUF0dHIiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZG9tU3RyaW5nTnVsbGFibGVBdHRyKCkp
KSk7CiB9CkBAIC0xMDU4LDYgKzExMjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
RE9NSklUQnl0ZVN0cmluZ051bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbAogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpieXRlU3RyaW5nTnVsbGFibGVB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExCeXRlU3RyaW5n
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5ieXRlU3RyaW5nTnVsbGFi
bGVBdHRyKCkpKSk7CiB9CkBAIC0xMDcxLDYgKzExMzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0RE9NSklUVXN2U3RyaW5nTnVsbGFibGVBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjp1c3ZTdHJpbmdO
dWxsYWJsZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETFVT
VlN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudXN2U3RyaW5n
TnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0xMDg0LDYgKzExNTQsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RE9NSklUTm9kZU51bGxhYmxlQXR0ckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpub2Rl
TnVsbGFibGVBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExJ
bnRlcmZhY2U8Tm9kZT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ub2RlTnVsbGFibGVBdHRyKCkpKSk7CiB9CkBAIC0x
MDk5LDYgKzExNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRBdHRyaWJ1dGVCb2R5KAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0QXR0cmlidXRlIik7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMTM1LDYgKzEyMDksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25J
dGVtQm9keShKU0M6OkpTRwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dERPTUpJVDo6aXRlbSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAt
MTE3Niw2ICsxMjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dERPTUpJVFByb3RvdHlwZUZ1bmN0aW9uSGFzQXR0cmlidXRlQm9keSgKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RET01KSVQ6Omhhc0F0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuaGFzQXR0
cmlidXRlKCkpKSk7CiB9CkBAIC0xMjA1LDYgKzEyODMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0RE9NSklUUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJ
ZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdERPTUpJVDo6Z2V0
RWxlbWVudEJ5SWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTEy
NDEsNiArMTMyMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RE
T01KSVRQcm90b3R5cGVGdW5jdGlvbkdldEVsZW1lbnRzQnlOYW1lCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0RE9NSklUOjpnZXRFbGVtZW50c0J5TmFtZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNldHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEVuYWJsZWRCeVNl
dHRpbmcuY3BwCmluZGV4IDUwMWI5ODhmYTJjNTIxZTZiYTcyMDUwNjNjMzRiN2FkOGUyNjQ4N2Mu
LmVlYjc5NzQyMzY3OTYwNmEwOWVkZDE1YzUxNzkyNzkxZTFkYWQ1YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkQnlTZXR0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RW5hYmxlZEJ5U2V0dGluZy5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAi
SlNUZXN0U3ViT2JqLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgpAQCAtMjM5LDYgKzI0MSw4IEBAIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1Rlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEVuYWJsZWRCeVNldHRpbmcmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OlRlc3RTdWJPYmpFbmFibGVk
QnlTZXR0aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0yNTAsNiArMjU0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5
U2V0dGluZ1Rlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RFbmFibGVkQnlTZXR0aW5nVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0RW5hYmxlZEJ5U2V0dGluZyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRCeVNldHRp
bmc6OlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
IlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIiksIHN0cmxlbigiVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTI2NCw2ICsyNzAsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdBdHRyaWJ1dGVH
ZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5hYmxlZEJ5U2V0
dGluZzo6ZW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVu
YWJsZWRCeVNldHRpbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTI4MCw2ICsyODgsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0RW5hYmxlZEJ5U2V0dGluZ0VuYWJsZWRCeVNldHRpbmdB
dHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RW5h
YmxlZEJ5U2V0dGluZzo6c2V0RW5hYmxlZEJ5U2V0dGluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMwMyw2ICszMTMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0RW5hYmxlZEJ5U2V0dGluZ1By
b3RvdHlwZUZ1bmN0aW9uRW5hYmxlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEVuYWJsZWRCeVNldHRpbmc6OmVuYWJsZWRCeVNldHRpbmdPcGVyYXRpb24iKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9yQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RW5hYmxlZEZv
ckNvbnRleHQuY3BwCmluZGV4IDNkZWIwMGM0ZDUzMGYyNTI5ZmU1MmVlOTRlYTNmZGJhYzBhOGFk
NGEuLjc4M2ZlYTc5YjBjMTQwMWUzZDI4OTFkMzlmN2NkOWU1MDQ4MmY4NmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFbmFibGVkRm9y
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEVuYWJsZWRGb3JDb250ZXh0LmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTE4OCw2ICsxOTAsOCBAQCBib29sIHNldEpTVGVz
dEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0RW5hYmxlZEZvckNvbnRleHRU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0RW5hYmxlZEZvckNvbnRleHQmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEVuYWJsZWRGb3JDb250ZXh0OjpU
ZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5OSw2ICsyMDMsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFbmFibGVkRm9yQ29udGV4dFRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dENvbnN0
cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0
VGVzdFN1Yk9iakVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEVuYWJsZWRGb3JDb250ZXh0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0RW5hYmxlZEZvckNvbnRleHQ6OlRlc3RTdWJPYmpFbmFibGVkRm9yQ29udGV4dCIpOwog
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSwgc3Ry
bGVuKCJUZXN0U3ViT2JqRW5hYmxlZEZvckNvbnRleHQiKSksIHZhbHVlKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBjM2MwOGFkMDY0Y2YzZjIzZDU5MGUxYjg5
YWY3OWIzOGRjMzFmMGFiLi5kYTk2ZGE4YjQyMmVhMTFiMDZiZWJhYTRkYzA2MzljYjE5OTM1ODAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+CkBAIC0yODcsNiArMjg5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50Q29uc3RydWN0b3I6OmF0dHIxIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwuYXR0cjEoKSkpKTsKIH0KQEAgLTMwMCw2ICszMDQsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXZlbnRD
b25zdHJ1Y3Rvcjo6YXR0cjIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmlu
Zz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5hdHRyMigpKSkpOwogfQpA
QCAtMzE0LDYgKzMyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0
cnVjdG9yQXR0cjNHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RFdmVudENvbnN0cnVjdG9yOjphdHRyMyIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmF0dHIzKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBk
NGQwZTZlYjA5Y2ZmNGFmNjk4ZTE3OTM4ZDdlNWM5N2E1MDY5OWRhLi4wMmQ3YjhlYmIyMDdkNjBh
ZjlmNTUzYjk2YWU0NDE3NGJmYWI0MDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKQEAg
LTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0Ns
aWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KQEAg
LTI1NSw2ICsyNTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW1Cb2R5KEpTQwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEV2ZW50VGFyZ2V0OjppdGVtIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmluZGV4IGUwN2I0
ZWE1N2Q1ZDhjOGI3NDM2ZDRkYzA3MDNmZTE5ZmJhYzdkYzcuLjUwOGUzMjMzNTZhOGZiODhmYjgx
MDliNjdjYzFiMDI4MDUwMmMwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0RXhjZXB0aW9uOjpuYW1lIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwubmFtZSgpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCmluZGV4IDU2NGY2ZmRjZmQ2NWJhODBlMGE0MGNhNGIyMWQ4ZGE1NTBm
NDFkMWQuLjA3ZDg5YTc1MzMxYzkyM2QxM2JiYzkzMmY2ODFlOGEyNTZiNWI0YjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVK
U0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgpAQCAtMTk1LDYgKzE5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQVNlY3JldEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjphU2VjcmV0QXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYVNlY3JldEF0dHJpYnV0ZSgpKSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCA2YzBlNTQ2MDFhNDY1OTYxY2RjMDY4Mjkx
NGU3NmZlYmNkYzE1MmRhLi44OTY1OWE0NDQyNDA1YTg2NDcxYTNhYWE2ZThmMTdhY2MwYjc0MDM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1
ZGUgIkpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU1Rl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTVGVzdFR5cGVk
ZWZzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTgyMSw2ICs4MjIsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpyZWd1bGFyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVn
dWxhckF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtODM0LDYgKzgzNyw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OnNldFJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC04NTIsNiArODU3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWwK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6cHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTg2NSw2ICs4NzIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZVNldHRlcihKU0ds
b2JhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpzZXRQ
dWJsaWNBbmRQcml2YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZmFsc2UpOwpAQCAtODg0LDYgKzg5Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVH
ZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnB1Ymxp
Y0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnB1
YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtOTAwLDYgKzkx
MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVTZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTkyMSw2ICs5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKSkpOwog
fQpAQCAtOTM3LDYgKzk1Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OnNldEVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CkBAIC05NTYsNiArOTczLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RDRVJlYWN0aW9ucyIpOwogICAgIHJldHVybiBKU1Rlc3RDRVJlYWN0aW9uczo6
Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC05NjcsNiArOTg2LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGkKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q0VSZWFjdGlvbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
ci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25z
IiksIHN0cmxlbigiVGVzdENFUmVhY3Rpb25zIikpLCB2YWx1ZSk7CiB9CkBAIC05NzksNiArMTAw
MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyIik7CiAgICAgcmV0dXJuIEpTVGVzdENFUmVh
Y3Rpb25zU3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtOTkwLDYgKzEw
MTMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiKSwg
c3RybGVuKCJUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTAw
Miw2ICsxMDI3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3JHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpU
ZXN0Q2FsbFRyYWNlciIpOwogICAgIHJldHVybiBKU1Rlc3RDYWxsVHJhY2VyOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTEwMTMsNiArMTA0MCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFj
ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0Q2FsbFRy
YWNlciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2FsbFRyYWNlciIpLCBzdHJsZW4o
IlRlc3RDYWxsVHJhY2VyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMDI2LDYgKzEwNTUsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdENhbGxiYWNr
SW50ZXJmYWNlIik7CiAgICAgcmV0dXJuIEpTVGVzdENhbGxiYWNrSW50ZXJmYWNlOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTEwNDAsNiArMTA3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxi
YWNrSW50ZXJmYWNlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdENhbGxiYWNrSW50ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RDYWxs
YmFja0ludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RDYWxsYmFja0ludGVyZmFjZSIpKSwgdmFsdWUp
OwogfQpAQCAtMTA1NCw2ICsxMDg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWMKIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xMDY1LDYgKzExMDAsOCBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKUwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3IiKSwgc3RybGVuKCJUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVl
KTsKIH0KQEAgLTEwNzcsNiArMTExNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdERPTUpJVCIpOwogICAgIHJldHVybiBKU1Rlc3RET01KSVQ6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTA4OCw2ICsxMTI3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2wKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklU
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdERPTUpJVCIp
OwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RE9NSklUIiksIHN0cmxlbigiVGVzdERPTUpJ
VCIpKSwgdmFsdWUpOwogfQpAQCAtMTEwMCw2ICsxMTQxLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmoKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWlu
U2VjdXJpdHlDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIpOwogICAgIHJl
dHVybiBKU1Rlc3REb21haW5TZWN1cml0eTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
MTExLDYgKzExNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9t
YWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3REb21haW5TZWN1cml0eSIpOwogICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RG9tYWluU2VjdXJpdHkiKSwgc3RybGVuKCJUZXN0RG9t
YWluU2VjdXJpdHkiKSksIHZhbHVlKTsKIH0KQEAgLTExMjMsNiArMTE2OCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFpblNlY3VyaXR5Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFibGVkQnlTZXR0
aW5nIik7CiAgICAgcmV0dXJuIEpTVGVzdEVuYWJsZWRCeVNldHRpbmc6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTEzNCw2ICsxMTgxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0
dGluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RFbmFi
bGVkQnlTZXR0aW5nIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFbmFibGVkQnlTZXR0
aW5nIiksIHN0cmxlbigiVGVzdEVuYWJsZWRCeVNldHRpbmciKSksIHZhbHVlKTsKIH0KQEAgLTEx
NDYsNiArMTE5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0Q29uc3RydWN0b3JH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9i
amVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFs
T2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICByZXR1cm4gSlNUZXN0RW5hYmxl
ZEZvckNvbnRleHQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTE1Nyw2ICsxMjA4LDgg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRGb3JDb250ZXh0
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RW5hYmxlZEZvckNvbnRleHQiKTsKICAgICAvLyBTaGFk
b3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgTENoYXIqPigiVGVzdEVuYWJsZWRGb3JDb250ZXh0IiksIHN0cmxlbigiVGVzdEVuYWJsZWRG
b3JDb250ZXh0IikpLCB2YWx1ZSk7CiB9CkBAIC0xMTY5LDYgKzEyMjIsOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RFbmFibGVkRm9yQ29udGV4dENvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIpOwogICAgIHJldHVybiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTExODAsNiArMTIzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50Q29uc3RydWN0
b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXZlbnRD
b25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciIpLCBzdHJsZW4oIlRlc3RFdmVudENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7CiB9CkBAIC0xMTky
LDYgKzEyNDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6
VGVzdEV2ZW50VGFyZ2V0Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV2ZW50VGFyZ2V0OjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyMDMsNiArMTI2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEV2ZW50
VGFyZ2V0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEV2
ZW50VGFyZ2V0Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RFdmVudFRhcmdldCIpLCBz
dHJsZW4oIlRlc3RFdmVudFRhcmdldCIpKSwgdmFsdWUpOwogfQpAQCAtMTIxNSw2ICsxMjc2LDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9u
Iik7CiAgICAgcmV0dXJuIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQog
CkBAIC0xMjI2LDYgKzEyODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0RXhjZXB0aW9uIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0RXhjZXB0aW9uIikp
LCB2YWx1ZSk7CiB9CkBAIC0xMjM4LDYgKzEzMDMsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5lcmF0ZUlz
UmVhY2hhYmxlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZSIpOwog
ICAgIHJldHVybiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7
CiB9CiAKQEAgLTEyNDksNiArMTMxNiw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZSIpLCBzdHJsZW4oIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpLCB2YWx1ZSk7CiB9
CkBAIC0xMjYxLDYgKzEzMzAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICByZXR1cm4gSlNUZXN0R2xvYmFsT2Jq
ZWN0OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEyNzIsNiArMTM0Myw4IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RHbG9iYWxPYmplY3QiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBj
b25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdEds
b2JhbE9iamVjdCIpLCBzdHJsZW4oIlRlc3RHbG9iYWxPYmplY3QiKSksIHZhbHVlKTsKIH0KQEAg
LTEyODQsNiArMTM1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEdsb2JhbE9i
amVjdENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMTI5NSw2ICsxMzcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTEzMDcsNiArMTM4NCw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MTMxOCw2ICsxMzk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEoKIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigiVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTMzMCw2ICsxNDExLDggQEAg
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoSlNHbG9iYWwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJuIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0x
MzQxLDYgKzE0MjQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbAogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xMzU0LDYgKzE0MzksOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iagogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICByZXR1cm4g
SlNUZXN0SW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTEzNjgsNiArMTQ1
NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
VGVzdEludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RJbnRlcmZhY2UiKSksIHZhbHVlKTsKIH0KQEAg
LTEzODIsNiArMTQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3Jl
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAg
ICByZXR1cm4gSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTM5Myw2ICsxNDg0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlQ29uc3RydWN0b3IoSlNHbG8K
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlIiksIHN0cmxlbigiVGVzdEludGVyZmFj
ZUxlYWRpbmdVbmRlcnNjb3JlIikpLCB2YWx1ZSk7CiB9CkBAIC0xNDA1LDYgKzE0OTgsOCBAQCBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAg
ICAgcmV0dXJuIEpTVGVzdEl0ZXJhYmxlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE0
MTYsNiArMTUxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RJdGVy
YWJsZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEl0ZXJhYmxlQ29uc3RydWN0b3JTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdEl0ZXJhYmxlIik7CiAgICAgLy8gU2hhZG93aW5n
IGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oIlRlc3RJdGVyYWJsZSIpLCBzdHJsZW4oIlRlc3RJdGVyYWJsZSIpKSwgdmFsdWUpOwog
fQpAQCAtMTQyOCw2ICsxNTI1LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0SXRl
cmFibGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE8KIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpOwogICAgIHJldHVy
biBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0xNDM5LDYgKzE1MzgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0dsb2JhbE9iagogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAg
IHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IiKSwgc3RybGVuKCJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiKSksIHZhbHVlKTsKIH0KQEAg
LTE0NTEsNiArMTU1Miw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxlCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3RNYXBMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdE1hcExpa2U6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKIH0KIApAQCAtMTQ2Miw2ICsxNTY1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xv
YmFsT2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEcK
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TWFwTGlrZUNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RNYXBMaWtlIik7CiAg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNP
YmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RNYXBMaWtlIiksIHN0cmxlbigiVGVzdE1hcExpa2Ui
KSksIHZhbHVlKTsKIH0KQEAgLTE0NzQsNiArMTU3OSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE1hcExpa2VDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTQ4
NSw2ICsxNTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG8KIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTQ5Nyw2ICsx
NjA2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNTA4LDYgKzE2MTksOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSwgc3RybGVuKCJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTE1
MjAsNiArMTYzMyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoCiBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTUzMSw2ICsxNjQ2LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNTQzLDYgKzE2NjAsOCBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFt
ZWRDb25zdHJ1Y3RvciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE1NTQsNiArMTY3Myw4IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFt
ZWRDb25zdHJ1Y3RvciIpLCBzdHJsZW4oIlRlc3ROYW1lZENvbnN0cnVjdG9yIikpLCB2YWx1ZSk7
CiB9CkBAIC0xNTY2LDYgKzE2ODcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYQogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEF1ZGlvQ29uc3RydWN0b3JHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpBdWRpbyIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWQ6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTU3Nyw2ICsxNzAwLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE8KIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RBdWRpb0Nv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OkF1ZGlvIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIkF1ZGlvIiksIHN0cmxlbigiQXVkaW8iKSksIHZhbHVlKTsKIH0K
QEAgLTE1ODksNiArMTcxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0QXVkaW9Db25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwKIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAg
cmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkp
OwogfQogCkBAIC0xNjAwLDYgKzE3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0
TmFtZWREZWxldGVyTm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4g
Y29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RO
YW1lZERlbGV0ZXJOb0lkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyTm9JZGVu
dGlmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0xNjEyLDYgKzE3NDEsOCBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVk
RGVsZXRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTE2MjMsNiAr
MTc1NCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkRGVsZXRlclRo
cm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZERlbGV0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpLCBzdHJsZW4oIlRlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMTYzNSw2ICsxNzY4LDggQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNjQ2LDYgKzE3ODEsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWREZWxldGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
ciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIiKSwgc3RybGVuKCJUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIiKSksIHZhbHVlKTsK
IH0KQEAgLTE2NTgsNiArMTc5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRl
eGVkR2V0dGVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRH
ZXR0ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTY2OSw2ICsxODA4LDggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Q29uc3RydWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIiKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
IiksIHN0cmxlbigiVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyIikpLCB2YWx1ZSk7
CiB9CkBAIC0xNjgxLDYgKzE4MjIsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNhbGxXaXRo
Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIpOwogICAgIHJldHVy
biBKU1Rlc3ROYW1lZEdldHRlckNhbGxXaXRoOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE2OTIsNiArMTgzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEdldHRlckNhbGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1
Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJl
dHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRHZXR0ZXJDYWxsV2l0aCIp
LCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlckNhbGxXaXRoIikpLCB2YWx1ZSk7CiB9CkBAIC0xNzA0
LDYgKzE4NDksOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlckNh
bGxXaXRoQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9i
YWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEds
b2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyIik7CiAgICAgcmV0dXJuIEpT
VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAg
LTE3MTUsNiArMTg2Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RO
YW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsCiBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29u
c3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVy
Tm9JZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZEdldHRlck5v
SWRlbnRpZmllciIpLCBzdHJsZW4oIlRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllciIpKSwgdmFs
dWUpOwogfQpAQCAtMTcyNyw2ICsxODc2LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0TmFtZWRHZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXIiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29u
c3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xv
YmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzM4LDYgKzE4ODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1l
ZEdldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2Jh
bE9iamVjdDo6VGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIiKSwgc3RybGVuKCJUZXN0TmFt
ZWRHZXR0ZXJXaXRoSWRlbnRpZmllciIpKSwgdmFsdWUpOwogfQpAQCAtMTc1MCw2ICsxOTAzLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6
OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIpOwogICAgIHJldHVybiBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0xNzYxLDYgKzE5
MTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2JhbAogc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
ciIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVy
biB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIi
KSwgc3RybGVuKCJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAg
LTE3NzMsNiArMTkzMCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25Db25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7
CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTc4NCw2ICsxOTQzLDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rv
cihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIik7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiksIHN0cmxlbigi
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iKSksIHZhbHVlKTsKIH0KQEAgLTE3OTYs
NiArMTk1Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xv
YmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgcmV0dXJu
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0K
IApAQCAtMTgwNyw2ICsxOTcwLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0dsb2IKIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIiKSksIHZhbHVlKTsKIH0KQEAgLTE4MTksNiArMTk4NCw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQog
ewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTgzMCw2ICsxOTk3
LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0
aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTE4NDIsNiArMjAxMSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0
KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAgcmV0dXJuIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXI6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTg1Myw2ICsyMDI0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHIKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoSW5k
ZXhlZEdldHRlckFuZFNldHRlckNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0
dGVyIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIi
KSksIHZhbHVlKTsKIH0KQEAgLTE4NjUsNiArMjAzOCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJDb25zdHJ1Y3Rv
cihKCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewog
ICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMTg3Niw2ICsy
MDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcigKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aE92
ZXJyaWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE4ODgsNiArMjA2NSw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnND
b25zdHJ1Y3RvcihKU0dsb2JhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsKICAgICByZXR1
cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtMTg5OSw2ICsyMDc4LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3Ry
dWMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMiKTsK
ICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhp
c09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzIiksIHN0cmxlbigiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
IikpLCB2YWx1ZSk7CiB9CkBAIC0xOTExLDYgKzIwOTIsOCBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9y
KEpTRwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMiKTsKICAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAK
QEAgLTE5MjIsNiArMjEwNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyCiBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnMiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpLCBzdHJs
ZW4oIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTE5MzUsNiArMjEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9w
ZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3BlcmF0aW9uQ29uZGl0
aW9uYWwiKTsKICAgICByZXR1cm4gSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMTk0OSw2ICsyMTM2LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0
OjpUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsIiksIHN0cmxlbigiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
IikpLCB2YWx1ZSk7CiB9CkBAIC0xOTYzLDYgKzIxNTIsOCBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycyIpOwogICAgIHJldHVybiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7CiB9CiAKQEAgLTE5NzQsNiArMjE2NSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNH
bG9iYWxPCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpLCBzdHJsZW4oIlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzIikpLCB2YWx1ZSk7CiB9CkBAIC0xOTg2LDYgKzIxNzksOCBAQCBib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgcmV0dXJuIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmdldENvbnN0cnVjdG9yKEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsK
IH0KIApAQCAtMTk5Nyw2ICsyMTkyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3QKIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIik7CiAgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNv
bnN0IExDaGFyKj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIiksIHN0
cmxlbigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UiKSksIHZhbHVlKTsK
IH0KQEAgLTIwMDksNiArMjIwNiw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0dsCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25z
dHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgcmV0dXJuIEpTVGVz
dE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjAyMCw2ICsy
MjE5LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RPdmVycmlkZUJ1aWx0aW5zIik7CiAgICAgLy8g
U2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oIlRlc3RPdmVycmlkZUJ1aWx0aW5zIiksIHN0cmxlbigiVGVzdE92ZXJy
aWRlQnVpbHRpbnMiKSksIHZhbHVlKTsKIH0KQEAgLTIwMzIsNiArMjIzMyw4IEBAIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFBsdWdpbkludGVyZmFj
ZSIpOwogICAgIHJldHVybiBKU1Rlc3RQbHVnaW5JbnRlcmZhY2U6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMjA0Myw2ICsyMjQ2LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kgogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VD
b25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNU
ZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0UGx1Z2luSW50
ZXJmYWNlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAg
cmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RQbHVnaW5JbnRlcmZhY2UiKSwg
c3RybGVuKCJUZXN0UGx1Z2luSW50ZXJmYWNlIikpLCB2YWx1ZSk7CiB9CkBAIC0yMDU1LDYgKzIy
NjAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRl
c3RSZWFkT25seU1hcExpa2UiKTsKICAgICByZXR1cm4gSlNUZXN0UmVhZE9ubHlNYXBMaWtlOjpn
ZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIwNjYsNiArMjI3Myw4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RSZWFkT25seU1hcExpa2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
UmVhZE9ubHlNYXBMaWtlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFJlYWRPbmx5TWFwTGlrZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UmVh
ZE9ubHlNYXBMaWtlIiksIHN0cmxlbigiVGVzdFJlYWRPbmx5TWFwTGlrZSIpKSwgdmFsdWUpOwog
fQpAQCAtMjA3OCw2ICsyMjg3LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVh
ZE9ubHlNYXBMaWtlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWwKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRMaWtlQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEds
b2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0UmVhZE9ubHlTZXRMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVzdFJl
YWRPbmx5U2V0TGlrZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMDg5LDYgKzIzMDAs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVhZE9ubHlTZXRMaWtl
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RSZWFkT25seVNldExpa2UiKTsKICAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiVGVzdFJlYWRPbmx5U2V0TGlrZSIpLCBzdHJsZW4oIlRlc3RSZWFkT25seVNldExp
a2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxMDEsNiArMjMxNCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9y
dEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCIpOwogICAgIHJldHVybiBKU1Rlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3Q6OmdldENvbnN0
cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2Jh
bE9iamVjdCgpKTsKIH0KIApAQCAtMjExMiw2ICsyMzI3LDggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdENvbnN0cnVjdG9yKEpTR2xv
YmFsT2IKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJU
ZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0IiksIHN0cmxlbigiVGVzdFJlcG9ydEV4dHJhTWVtb3J5
Q29zdCIpKSwgdmFsdWUpOwogfQpAQCAtMjEyNCw2ICsyMzQxLDggQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0UmVwb3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24iKTsKICAgICBy
ZXR1cm4gSlNUZXN0U2VyaWFsaXphdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0y
MTM1LDYgKzIzNTQsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U2Vy
aWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFNlcmlhbGl6YXRpb24iKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb24iKSwgc3RybGVuKCJUZXN0U2VyaWFs
aXphdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjE0Nyw2ICsyMzY4LDggQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2wKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIHJldHVybiBKU1Rlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBA
IC0yMTU4LDYgKzIzODEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3Rvcgogc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhl
cml0YW5jZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RT
ZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSwgc3RybGVuKCJUZXN0U2Vy
aWFsaXphdGlvbkluZGlyZWN0SW5oZXJpdGFuY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIxNzAsNiAr
MjM5NSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25JbmRp
cmVjdEluaGVyaXRhbmNlQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Q29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFs
aXphdGlvbkluaGVyaXQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjE4MSw2ICsyNDA4
LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25J
bmhlcml0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmoKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvclNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQiKTsKICAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IiksIHN0cmxlbigi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0IikpLCB2YWx1ZSk7CiB9CkBAIC0yMTkzLDYgKzI0MjIs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZQogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2Jq
ZWN0OjpUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbCIpOwogICAgIHJldHVybiBKU1Rlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIy
MDQsNiArMjQzNSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJp
YWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9y
LgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0U2VyaWFsaXphdGlv
bkluaGVyaXRGaW5hbCIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsIikp
LCB2YWx1ZSk7CiB9CkBAIC0yMjE3LDYgKzI0NTAsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Ywogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAg
IFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UiKTsKICAgICByZXR1cm4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIyMzEsNiArMjQ2Niw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihKCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4K
ICAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSIpLCBzdHJsZW4oIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNDUsNiArMjQ4Miw4IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
KEpTR2xvYmFsCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNl
dExpa2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgcmV0dXJuIEpTVGVz
dFNldExpa2U6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjI1Niw2ICsyNDk1LDggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEcKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RUZXN0U2V0TGlrZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RTZXRMaWtlIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3Ry
dWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTZXRMaWtl
IiksIHN0cmxlbigiVGVzdFNldExpa2UiKSksIHZhbHVlKTsKIH0KQEAgLTIyNjgsNiArMjUwOSw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFNldExpa2VDb25zdHJ1Y3RvcihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5n
aWZpZXIiKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXI6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtMjI3OSw2ICsyNTIyLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFN0cmluZ2lmaWVyQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGkKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXIi
KTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4g
dGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyIiksIHN0cmxlbigiVGVz
dFN0cmluZ2lmaWVyIikpLCB2YWx1ZSk7CiB9CkBAIC0yMjkxLDYgKzI1MzYsOCBAQCBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYgogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVz
dFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTIz
MDIsNiArMjU0OSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVjdG9yKEpTCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9u
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lm
aWVyQW5vbnltb3VzT3BlcmF0aW9uIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29u
c3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvbiIpLCBzdHJsZW4oIlRlc3RTdHJpbmdpZmllckFub255
bW91c09wZXJhdGlvbiIpKSwgdmFsdWUpOwogfQpAQCAtMjMxNCw2ICsyNTYzLDggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb25Db25z
dHJ1Y3RvcihKU0dsb2JhbE8KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0
cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24iKTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvbjo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzI1LDYgKzI1NzYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uQ29uc3RydWN0b3JTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24iKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1
cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRp
b24iKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbiIpKSwgdmFsdWUpOwog
fQpAQCAtMjMzNyw2ICsyNTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWMKIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25J
bXBsZW1lbnRlZEFzIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1w
bGVtZW50ZWRBczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yMzQ4LDYgKzI2MDMsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzQ29uc3RydWN0bwogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXNDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFs
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzIik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCiAgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmll
ck9wZXJhdGlvbkltcGxlbWVudGVkQXMiKSwgc3RybGVuKCJUZXN0U3RyaW5naWZpZXJPcGVyYXRp
b25JbXBsZW1lbnRlZEFzIikpLCB2YWx1ZSk7CiB9CkBAIC0yMzYwLDYgKzI2MTcsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVk
QXNDb25zdHJ1Y3RvcihKU0dsbwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmpl
Y3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAgICByZXR1cm4g
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKQEAgLTIzNzEsNiArMjYzMCw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25zdHJ1Y3RvCiBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyT3Bl
cmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKTsKICAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZyIpLCBz
dHJsZW4oIlRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmciKSksIHZhbHVlKTsK
IH0KQEAgLTIzODMsNiArMjY0NCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0
cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yKEpTR2xvCiBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlB
dHRyaWJ1dGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmli
dXRlIik7CiAgICAgcmV0dXJuIEpTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6Omdl
dENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjM5NCw2ICsyNjU3LDggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25z
dHJ1Y3RvcihKU0cKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIik7CiAgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUiKSksIHZhbHVlKTsKIH0KQEAg
LTI0MDYsNiArMjY3MSw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lm
aWVyUmVhZE9ubHlBdHRyaWJ1dGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmli
dXRlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICByZXR1cm4gSlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtMjQxNyw2ICsyNjg0LDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3Ry
dWN0b3IoSlMKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3Ry
aW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjpUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KICAgICByZXR1cm4gdGhpc09iamVj
dC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiksIHN0
cmxlbigiVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIikpLCB2YWx1ZSk7CiB9CkBA
IC0yNDI5LDYgKzI2OTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKEpTR2xvYmFsTwogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3Qm
IHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVj
dDo6VGVzdFR5cGVkZWZzIik7CiAgICAgcmV0dXJuIEpTVGVzdFR5cGVkZWZzOjpnZXRDb25zdHJ1
Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKQEAgLTI0NDAsNiArMjcxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsCiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZz
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6VGVzdFR5cGVkZWZz
Iik7CiAgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCiAgICAgcmV0dXJu
IHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RUeXBlZGVmcyIpLCBzdHJsZW4oIlRlc3RU
eXBlZGVmcyIpKSwgdmFsdWUpOwogfQpAQCAtMjQ1NSw2ICsyNzI4LDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25S
ZWd1bGFyT3BlcmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9i
YWxPYmplY3Q6OnJlZ3VsYXJPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTI0NzgsNiArMjc1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVuCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
MjQ5Niw2ICsyNzczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtMjUxNSw2ICsyNzk0LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkQXRSdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RHbG9iYWxPYmplY3Q6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6
bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdz
Q291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTI1NDMsNiArMjgyNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvckZ1
bmN0aW9uRW5hYmxlZEF0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
R2xvYmFsT2JqZWN0OjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uU3RhdGljIik7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwpAQCAtMjU2Niw2ICsyODQ5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVuYWJsZWRJblNw
ZWNpZmljV29ybGQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTI1
ODgsNiArMjg3Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEluU3BlCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0R2xvYmFsT2JqZWN0OjplbmFibGVkSW5TcGVjaWZpY1dv
cmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxlZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtMjYxMCw2ICsyODk3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFibGVkSW5TcGUK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxPYmplY3Q6OmVu
YWJsZWRJblNwZWNpZmljV29ybGRXaGVuUnVudGltZUZlYXR1cmVzRW5hYmxlZCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMjYzMyw2ICsyOTIyLDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVu
Y3Rpb25UZXN0UHJpdmF0ZUYKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RHbG9iYWxPYmplY3Q6OnRlc3RQcml2YXRlRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwudGVzdFByaXZhdGVGdW5jdGlvbigpOwpAQCAtMjY1Miw2ICsyOTQzLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rp
b25DYWxjdWxhdGVTZWMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RH
bG9iYWxPYmplY3Q6OmNhbGN1bGF0ZVNlY3JldFJlc3VsdCIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1w
bC5jYWxjdWxhdGVTZWNyZXRSZXN1bHQoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0yNjY5LDYgKzI5
NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0SW5zdGFuY2VGdW5jdGlvbkdldFNlY3JldEJvbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEdsb2JhbE9iamVjdDo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2Vj
cmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtMjY4NSw2ICsyOTgwLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25UZXN0
RmVhdHVyZUcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RHbG9iYWxP
YmplY3Q6OnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwudGVzdEZlYXR1cmVHZXRTZWNy
ZXRCb29sZWFuKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCmluZGV4IDNmNTAzYWI4ZDVhMzJkZGUyZGQ1ZWU3ZDg5NWY3NzZk
MzY5NWZkN2QuLjUwNDk3ODdlMWExYjU0YTA1YjVmZmVkYzNlNmM1OGQ3NDVjZTI5NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCkBA
IC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1
bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yODIsNiArMjg0LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZUZ1bmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNzEzMzlhMWFiODg1NTk0
M2ZkYmExYzcwNDlhODBhN2IwYmYxNzAyYS4uODM0NDNhNzNlYzIxOThkYWQ5ODg2ZmM4ZGIwYzFh
NTNjZjE2OGMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTM4LDYgKzM4LDggQEAKICNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNp
bmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKQEAgLTUxMCw2ICs1MTIsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9u
bHlBdHRyR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpp
bXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSkpKTsKIH0KIApA
QCAtNTI1LDYgKzUyOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyIik7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0
YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNTQwLDYgKzU0Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyU2V0dGVy
KEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldElt
cGxlbWVudHNTdGF0aWNBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC01NjAsNiArNTY4LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjEiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElE
TERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1l
bnRzU3RyMSgpKSkpOwogfQpAQCAtNTc2LDYgKzU4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVu
dHNTdHIyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSkpKTsKIH0KQEAg
LTU5Miw2ICs2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RyMiIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTYxMiw2ICs2MjYsOCBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0cjMiKTsKICAgICByZXR1cm4gdGhp
c09iamVjdC5pbXBsZW1lbnRzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtNjI2
LDYgKzY0Miw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFj
ZTo6SW1wbGVtZW50c1N0cjMiKTsKICAgICB0aGlzT2JqZWN0LnNldEltcGxlbWVudHNTdHIzKGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY0Miw2
ICs2NjAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c05vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzTm9kZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKSkp
OwogfQpAQCAtNjU4LDYgKzY3OCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNOb2RlIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNOb2RlIiwgIk5vZGUi
KTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC02
NzksNiArNzAxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2UKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRy
Iik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6
OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKSkpOwogfQogCkBAIC02OTQsNiArNzE4
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RhdGljQXR0ciIpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoKSkpKTsKIH0KIApAQCAtNzA5LDYgKzczNSw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJT
ZXR0ZXIoSlNHCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNl
dFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIiKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBBdHRyaWJ1dGVTZXR0ZXI6OmNh
bGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsKQEAgLTcyOSw2ICs3NTcs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxTdHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFdlYkNv
cmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpKSk7CiB9CkBAIC03
NDUsNiArNzc1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMiIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKSkp
OwogfQpAQCAtNzYxLDYgKzc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OnNldFN1cHBsZW1lbnRhbFN0cjIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC03ODEs
NiArODE1LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RJbnRlcmZhY2UmIHRoaXNPYmplY3QpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsU3RyMyIpOwog
ICAgIHJldHVybiB0aGlzT2JqZWN0LnN1cHBsZW1lbnRhbFN0cjMobGV4aWNhbEdsb2JhbE9iamVj
dCk7CiB9CiAKQEAgLTc5NSw2ICs4MzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZQogc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEludGVyZmFjZSYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdEludGVyZmFjZTo6U3VwcGxlbWVudGFsU3RyMyIpOwogICAgIHRoaXNPYmplY3Qu
c2V0U3VwcGxlbWVudGFsU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC04MTEsNiArODQ5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGkK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFs
Tm9kZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpbXBsKSkpKTsKIH0K
QEAgLTgyNyw2ICs4NjcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzZXRTdXBwbGVtZW50YWxOb2RlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUiLCAiTm9kZSIp
OyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTg0
OCw2ICs4OTAsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUmVmbGVj
dEF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjphdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIiKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGF0dHJpYnV0ZUF0dHIpKSkpOwogfQpAQCAtODY0LDYgKzkwOCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VSZWZsZWN0QXR0cmlidXRlU2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRl
cmZhY2U6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0YXR0cmlidXRlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTg4Nyw2ICs5MzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRz
TWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6
aW1wbGVtZW50c01ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuaW1wbGVtZW50c01ldGhv
ZDEoKTsKQEAgLTkwNyw2ICs5NTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01l
dGhvZDIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkzNiw2ICs5
ODYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbXBsZW1lbnRzTWV0aAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c01ldGhvZDMiKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5p
bXBsZW1lbnRzTWV0aG9kMygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7CiB9
CiAKQEAgLTk1Myw2ICsxMDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yRnVuY3Rpb25JbXBsZW1lbnRzTWUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNNZXRo
b2Q0Iik7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgVGVzdEludGVyZmFjZTo6aW1w
bGVtZW50c01ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtOTcyLDYgKzEwMjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5KAogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6dGFrZU5vZGVzIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGltcGxS
ZXN1bHQgPSBpbXBsLnRha2VOb2RlcygpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8Tm9kZT4+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZN
b3ZlKGltcGxSZXN1bHQubm9kZXMpKSkpOwpAQCAtOTkxLDYgKzEwNDcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25T
dXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdElu
dGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMShpbXBsKTsKQEAgLTEwMTEsNiAr
MTA2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1lCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlOjpzdXBwbGVtZW50YWxNZXRob2QyIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0xMDQwLDYgKzExMDAsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25TdXBwbGVtZW50YWxNZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kMyIpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRh
bE1ldGhvZDMoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC0x
MDU3LDYgKzExMTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JGdW5jdGlvblN1cHBsZW1lbnRhbAogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEludGVyZmFjZTo6c3VwcGxlbWVudGFsTWV0aG9kNCIp
OwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2VMZWFkaW5nVW5k
ZXJzY29yZS5jcHAKaW5kZXggMzYyOGNkNjYyN2NjOGVmZjc1MzRiOTY0NmY4YmVmNWE5MjkxNDhk
Zi4uNzA3YzYxOGMyZDMyNTQxOTkwYTYwMTFhMTJiNGVjZWI0NmIyODYyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxl
YWRpbmdVbmRlcnNjb3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCkBAIC0yOSw2ICsy
OSw4IEBACiAjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgogI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KQEAgLTE4NSw2ICsxODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmVSZWFkb25seUdldHRlcihKU0dsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmU6OnJlYWRvbmx5Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZG9ubHkoKSkpKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IDFjMTFiYzZi
ZmI5NmJmYmJkN2I5MDdhOWNiY2M1ODA1Mjk2YjI4ZDUuLjJiYTBhOGNjZDZhNzgwMTU5NTQxYzE1
MThjN2ViNGI4YjcyNzU0ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQnVpbHRpbnMuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Nyw2ICsxOTksOCBA
QCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3ImIHRoaXNP
YmplY3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yOjp0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmplY3QudGVzdEF0
dHJpYnV0ZUN1c3RvbShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIH0KIApAQCAtMjA4LDYgKzIxMiw4
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0
ZUN1c3RvbShKU0dsb2JhbE9iamVjdCogbGV4CiBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yJiB0
aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvcjo6dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgcmV0dXJuIHRoaXNPYmplY3Qu
dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC0yMTks
NiArMjI1LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlUldDdXN0b20oSlNHbG9iYWxPYmplY3QqIGwKIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbVNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3ImIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6VGVzdEF0dHJpYnV0ZVJX
Q3VzdG9tIik7CiAgICAgdGhpc09iamVjdC5zZXRUZXN0QXR0cmlidXRlUldDdXN0b20obGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjM0LDYgKzI0
Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvclByb3RvdHlwZUZ1bmN0aW9uVGVzCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OnRlc3RDdXN0b21GdW5jdGlvbiIp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKGNh
c3RlZFRoaXMtPnRlc3RDdXN0b21GdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxG
cmFtZSkpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGViZTJjNjJmOTk0ZTFhYjQ1ZDZm
NjEzODQ3MTQ4NDIzMTU5M2FhMzQuLjA1OTAyODdkYjQzYTc3NGMzZDBkNjgwMTI2Mjc3ZTBiMzcz
ZjQ2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMzU4LDYg
KzM2MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Om5h
bWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0zODMs
NiArMzg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG8KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6
aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXgg
NTkxNWExNTMwZjI2ZWYxY2YxNTliOWM3YjU0OGE0ZjNjMzI1ZjA0Yy4uMGRkZTg5M2ZmN2I5MjBh
ZjI1Y2ZlZWQ3OGQ0ZTRlNmU1YmZiNmM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAi
SlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0yNjUs
NiArMjY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3QKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6bmFtZWREZWxl
dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRHZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKaW5kZXggZDVmNDc4ZWZlNTYw
MGRhNTQ0NjY4NTM3YTA1YzJjZGJiNzZkNDhiZi4uNzgwMTNmOTVhNmFjMWVlZjRhMWVmZjcwNjVl
NTQzMTQyN2Q5YzdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEdldHRlcldpdGhJ
ZGVudGlmaWVyLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMjQxLDYgKzI0Myw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEdldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlRnVuY3RpCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0dGVyTmFtZSIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIuY3BwCmluZGV4IGVjNjcwMDY5NjA0ZDhlMTRlOGI4MmYxYjUwZjFh
NDIyYjQ2NjU5MTIuLjY3M2M0YTA4ZjI4MWI0MDVhMmFjZmMzZGRiZGU0YmMwOGY3YTFlZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAKQEAg
LTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVu
Y3Rpb25Qcm90b3R5cGUuaD4KQEAgLTMxMCw2ICszMTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6Om5hbWVkU2V0dGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhl
ZEdldHRlci5jcHAKaW5kZXggMGJlMzQwNWEyNDE4N2ZkMzUzZTZlMDdhNmIwYjhiYTlmMDFkMmY2
Ni4uNGE3NjBlNDZmNTJmYzIxNmU3MzhlOWUwNTNhMWUwOGM5NTNmOTJhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyLmNwcApAQCAtMzEs
NiArMzEsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlv
blByb3RvdHlwZS5oPgpAQCAtMzM1LDYgKzMzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyUHJvdG90eXBlRnVu
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlcjo6bmFtZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTM2MCw2ICszNjQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlclByb3RvdHlwZUZ1bgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4
ZWRHZXR0ZXI6OmluZGV4ZWRTZXR0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJ
bmRleGVkR2V0dGVyQW5kU2V0dGVyLmNwcAppbmRleCBhZTRlZTk2ODM1NGUyYzAyYTRlOTEwNWE5
MDVkNWIyYzI3OTlhMTRlLi45OTQ5NGI1NDRmYzRiY2E2MzllMjYxZmE0NWZmMDc4YjJkNWIwMzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElu
ZGV4ZWRHZXR0ZXJBbmRTZXR0ZXIuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZl
ci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zNTgsNiAr
MzYwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0
dGVyV2l0aEluZGV4ZWRHZXR0ZXJBbmRTZXR0ZXJQcm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOjpu
YW1lZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzgz
LDYgKzM4Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
cjo6aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNDAxLDYg
KzQwNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6
aW5kZXhlZFNldHRlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNDE0LDYgKzQy
Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRl
cldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlcjo6anNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRlclByb3RvdHlwZUZ1bmN0aW9u
SW5kZXhlZFNldHRlciIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KDIsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEp
IHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0
dGVyMkJvZHkobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBjYXN0ZWRUaGlzKSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcy5jcHAKaW5kZXggMjZjNjIyNWExMjA4MjcyYzQ1MmIzNmQwYjE3MDgyMzA3Yzc2
OTVhZi4uNzEzMDMxOTAxYzA4ZWUwMjFmNTBkMDBjZTlhYzY1YjQ0M2U5MzY4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXMuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUg
IlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0zMzgsNiArMzQwLDggQEAgc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
VW5mb3JnZWFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNTMs
NiArMzU3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5zdGEKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6
dW5mb3JnZWFibGVPcGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwudW5mb3JnZWFibGVP
cGVyYXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucy5jcHAKaW5kZXggMjc0MjNhYWM1ZTYxMzIyNGM0NzY1MWVhYTM0MmZmYjJmN2YwNDg4NC4u
NjYyZjk3NGY4M2IxODEyNjZjNGQwYTVkYzgwYmY4ZDU1MmRiNDIxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAKQEAgLTMxLDYgKzMxLDgg
QEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3Jl
SlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5
cGUuaD4KQEAgLTMxOSw2ICszMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zMzQsNiArMzM4
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3YKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnM6OnVuZm9yZ2VhYmxlT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBs
LnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggYTNiODc5MzFlMTJmYWVi
NzNhYjVmMTQ0MjVmNDY1ZDE1MjhiMTI2Yi4uNTRjNTM2ZWZjMTc4OTBkMjI5MGU0NDc2YTQ4NzNi
MjIxZDYzYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpT
RE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9i
c2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCkBAIC0yODksNiArMjkwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vZGVO
YW1lR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6bmFtZSIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
Lm5hbWUoKSkpKTsKIH0KQEAgLTMwMiw2ICszMDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0Tm9kZU5hbWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3ROb2RlOjpzZXROYW1lIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzIyLDYgKzMyNyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0Tm9kZTo6dGVzdFdvcmtlclByb21pc2UiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGlt
cGwudGVzdFdvcmtlclByb21pc2UoV1RGTW92ZShwcm9taXNlKSk7CkBAIC0zMzksNiArMzQ2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbkNhbGN1bGF0ZVNlY3JldFJlc3UKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3ROb2RlOjpjYWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAg
IGltcGwuY2FsY3VsYXRlU2VjcmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtMzU2LDYg
KzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25HZXRTZWNyZXRCb29sZWFuQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6Z2V0U2VjcmV0Qm9vbGVhbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEJvb2xlYW4+KGltcGwuZ2V0U2VjcmV0Qm9v
bGVhbigpKSkpOwogfQpAQCAtMzcyLDYgKzM4Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0RmVhdHVyZUdldFNlY3Jl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0Tm9kZTo6dGVzdEZlYXR1
cmVHZXRTZWNyZXRCb29sZWFuIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvSlM8SURMQm9vbGVhbj4oaW1wbC50ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xlYW4oKSkpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKaW5kZXggMTY0MzNkOTlmMTJhMTBkMTExZmE4YTUwYzYxZWM4ODRlMjZjNzI5
MS4uNTQzNTFlYmM3MTZkMDhlNTIwN2RkYjAxN2IyMGZkZmNmZDA0MmM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
QEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkpTV2luZG93UHJveHkuaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTI2NjYsNiArMjY2Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJlYWRP
bmx5TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhZE9ubHlMb25nQXR0cigpKSkpOwogfQpA
QCAtMjY3OSw2ICsyNjgyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRP
bmx5U3RyaW5nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0yNjkyLDYgKzI2OTcs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0
Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSkp
KTsKIH0KQEAgLTI3MDUsNiArMjcxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIi
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljUmVhZE9ubHlMb25n
QXR0cigpKSkpOwogfQogCkBAIC0yNzE3LDYgKzI3MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdGF0aWNTdHJpbmdB
dHRyIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0
cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgVGVzdE9iajo6c3RhdGljU3Ry
aW5nQXR0cigpKSkpOwogfQogCkBAIC0yNzI5LDYgKzI3NDAsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdGF0aWNT
dHJpbmdBdHRyIik7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CiAgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CkBAIC0yNzQ1LDYgKzI3NTgsOCBAQCBib29sIHNl
dEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yVGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkK
IHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpUZXN0U3ViT2JqIik7CiAgICAg
cmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwogfQogCkBAIC0yNzU3LDYg
KzI3NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0
U3RhdGljUmVhZG9ubHlPYmpHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjp0ZXN0U3RhdGljUmVhZG9ubHlPYmoiKTsKICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0yNzc0LDYgKzI3OTEsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpl
bnVtQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVzdE9i
ajo6RW51bVR5cGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmVudW1B
dHRyKCkpKSk7CiB9CkBAIC0yNzg3LDYgKzI4MDYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqRW51bUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
YwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbnVtQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFs
TmF0aXZlVmFsdWUgPSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0yODA4LDYgKzI4MjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
dGhyb3dTY29wZSwgKHRvSlM8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5ieXRlQXR0cigpKSkpOwogfQpAQCAtMjgyMSw2ICsyODQ0LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
Qnl0ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMQnl0ZT4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
MjgzOSw2ICsyODY0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0
ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vY3Rl
dEF0dHIoKSkpKTsKIH0KQEAgLTI4NTIsNiArMjg3OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1Rlc3RPYmpPY3RldEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9jdGV0QXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExPY3RldD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjg3MCw2ICsy
ODk5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExT
aG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zaG9ydEF0dHIoKSkp
KTsKIH0KQEAgLTI4ODMsNiArMjkxNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RP
YmpTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFNob3J0QXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExTaG9ydD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMjkwMSw2ICsyOTM0LDggQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6Y2xhbXBlZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0Lndy
YXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMQ2xh
bXBBZGFwdG9yPElETFNob3J0Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5jbGFtcGVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTE0LDYgKzI5NDksOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0clNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRDbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExT
aG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5MzIsNiArMjk2OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuZm9y
Y2VSYW5nZVNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW5mb3JjZVJh
bmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTQ1LDYgKzI5ODQsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRW5mb3Jj
ZVJhbmdlQWRhcHRvcjxJRExTaG9ydD4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI5NjMsNiArMzAw
NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbnNpZ25lZFNob3J0PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBs
LnVuc2lnbmVkU2hvcnRBdHRyKCkpKSk7CiB9CkBAIC0yOTc2LDYgKzMwMTksOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRVbnNpZ25lZFNob3J0QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbnNpZ25lZFNob3J0Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC0yOTk0LDYgKzMwMzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpsb25nQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5sb25nQXR0cigpKSkpOwogfQpAQCAtMzAwNyw2ICszMDU0LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakxvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0TG9uZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtMzAyNSw2ICszMDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakxv
bmdMb25nQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bG9uZ0xvbmdBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5sb25nTG9uZ0F0dHIoKSkpKTsKIH0KQEAgLTMwMzgsNiArMzA4OSw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldExvbmdMb25nQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtMzA1Niw2ICszMTA5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSkpKTsK
IH0KQEAgLTMwNjksNiArMzEyNCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVkTG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTMwODcsNiArMzE0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1w
bC5zdHJpbmdBdHRyKCkpKSk7CiB9CkBAIC0zMTAwLDYgKzMxNTksOCBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJp
bmdBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzExOCw2ICszMTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0
cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWwKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLnVzdnN0cmluZ0F0dHIoKSkpKTsKIH0KQEAgLTMxMzEsNiArMzE5NCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldFVzdnN0cmluZ0F0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zMTQ5LDYgKzMyMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYgog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0T2JqQXR0ciIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC50ZXN0
T2JqQXR0cigpKSkpOwogfQpAQCAtMzE2Miw2ICszMjI5LDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialRlc3RPYmpBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0VGVzdE9iakF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAidGVzdE9iakF0dHIiLCAiVGVz
dE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsK
QEAgLTMxODAsNiArMzI0OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
TnVsbGFibGVPYmpBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0dHIoKSkpKTsKIH0KQEAgLTMxOTMsNiArMzI2NCw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnNldFRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUsIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsICJUZXN0T2JqZWN0IiwgInRlc3ROdWxsYWJsZU9iakF0dHIiLCAiVGVzdE9iaiIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTMyMTEs
NiArMzI4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmxlbmllbnRUZXN0T2JqQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhp
c09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5sZW5pZW50VGVzdE9iakF0
dHIoKSkpKTsKIH0KQEAgLTMyMjQsNiArMzI5OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRK
U1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldExlbmllbnRUZXN0T2Jq
QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJsZW5pZW50VGVzdE9iakF0
dHIiLCAiVGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTMyNDIsNiArMzMxOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVuZm9yZ2VhYmxlQXR0ciIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKSkpOwogfQpAQCAtMzI1NSw2ICsz
MzM0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0
cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuc3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSkpKTsKIH0KQEAgLTMyNjgsNiArMzM0OSw4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZ1NldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETERPTVN0cmluZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTMyODYsNiArMzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihKU0dsCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0F0dHJUcmVhdGluZ051
bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExUcmVhdE51bGxB
c0VtcHR5QWRhcHRvcjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLnVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpKSk7CiB9
CkBAIC0zMjk5LDYgKzMzODQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdTZXR0ZXIoSlNHbAogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExUcmVhdE51bGxBc0VtcHR5QWRhcHRv
cjxJRExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zMzE3LDYgKzM0MDQsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nR2V0dGVyKEpTRwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpieXRlU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmJ5dGVTdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKSkpOwogfQpAQCAtMzMzMCw2ICszNDE5LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakJ5dGVTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZ1NldHRlcihKU0cKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0Qnl0ZVN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETFRyZWF0TnVsbEFzRW1wdHlBZGFwdG9yPElETEJ5dGVTdHJpbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC0zMzQ4LDYgKzM0MzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nTG9uZ1JlY29yZEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdMb25nUmVjb3JkQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUmVjb3JkPElETERPTVN0cmluZywgSURM
TG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zMzYxLDYg
KzM0NTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nTG9uZ1JlY29y
ZEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
MzM3OSw2ICszNDc0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0xvbmdSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExVU1ZTdHJpbmcsIElETExvbmc+PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwg
aW1wbC51c3ZzdHJpbmdMb25nUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzM5Miw2ICszNDg5LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0xvbmdSZWNvcmRBdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0VXN2c3RyaW5nTG9uZ1JlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
UmVjb3JkPElETFVTVlN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0MTAs
NiArMzUwOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdMb25n
UmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyIik7CiAgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJv
d1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxH
bG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBs
LnVzdnN0cmluZ0xvbmdSZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDIzLDYgKzM1MjQsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nTG9uZ1JlY29yZEF0dHJTZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRVc3ZzdHJpbmdMb25nUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNv
cmQ8SURMQnl0ZVN0cmluZywgSURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM0NDEsNiAr
MzU0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRB
dHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElETEludGVyZmFjZTxUZXN0T2JqPj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBpbXBsLnN0cmluZ09ialJlY29yZEF0dHIoKSkpKTsKIH0KQEAgLTM0NTQsNiArMzU1OSw4IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdPYmpSZWNvcmRBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnNldFN0cmluZ09ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3Jk
PElETERPTVN0cmluZywgSURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzQ3Miw2ICszNTc5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z051bGxhYmxlT2JqUmVjb3JkQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExSZWNvcmQ8SURMRE9NU3RyaW5nLCBJRExOdWxs
YWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nTnVsbGFibGVPYmpS
ZWNvcmRBdHRyKCkpKSk7CiB9CkBAIC0zNDg1LDYgKzM1OTQsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqU3RyaW5nTnVsbGFibGVPYmpSZWNvcmRBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdO
dWxsYWJsZU9ialJlY29yZEF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMUmVjb3JkPElETERPTVN0
cmluZywgSURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RPYmo+Pj4+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTM1MDMsNiArMzYxNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdWb2lkQ2FsbGJhY2tSZWNvcmRBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0
dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFJlY29yZDxJRExET01TdHJpbmcsIElE
TENhbGxiYWNrRnVuY3Rpb248SlNWb2lkQ2FsbGJhY2s+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc3RyaW5nVm9pZENh
bGxiYWNrUmVjb3JkQXR0cigpKSkpOwogfQpAQCAtMzUxNiw2ICszNjI5LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialN0cmluZ1ZvaWRDYWxsYmFja1JlY29yZEF0dHJTZXR0ZXIo
SlNHbG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
U3RyaW5nVm9pZENhbGxiYWNrUmVjb3JkQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExSZWNvcmQ8
SURMRE9NU3RyaW5nLCBJRExDYWxsYmFja0Z1bmN0aW9uPEpTVm9pZENhbGxiYWNrPj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlLCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTM0LDYgKzM2NDks
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGljdGlvbmFyeUF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpkaWN0aW9uYXJ5QXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuZGljdGlvbmFyeUF0dHIo
KSkpKTsKIH0KQEAgLTM1NDcsNiArMzY2NCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldERpY3Rpb25hcnlBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTM1NjUsNiArMzY4NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZURpY3Rpb25hcnlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlRGljdGlvbmFy
eUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVj
dC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZURpY3Rpb25hcnlBdHRy
KCkpKSk7CiB9CkBAIC0zNTc4LDYgKzM2OTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVEaWN0aW9uYXJ5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXROdWxsYWJsZURpY3Rpb25h
cnlBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETE51bGxhYmxlPElETERpY3Rpb25hcnk8VGVzdE9i
ajo6RGljdGlvbmFyeT4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNTk2LDYgKzM3MTksOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRyR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjphbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETFVuaW9uPElETERPTVN0cmluZywgSURMQ2xhbXBBZGFwdG9yPElETExvbmc+Pj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwuYW5ub3RhdGVkVHlwZUluVW5pb25BdHRyKCkpKSk7CiB9CkBAIC0zNjA5LDYgKzM3MzQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQW5ub3RhdGVkVHlwZUluVW5pb25BdHRy
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRBbm5vdGF0ZWRUeXBlSW5VbmlvbkF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
VW5pb248SURMRE9NU3RyaW5nLCBJRExDbGFtcEFkYXB0b3I8SURMTG9uZz4+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zNjI3LDYgKzM3NTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQW5ub3RhdGVkVHlwZUluU2VxdWVuY2VBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0Jgogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphbm5vdGF0ZWRUeXBlSW5TZXF1ZW5j
ZUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcXVlbmNlPElETENsYW1wQWRh
cHRvcjxJRExMb25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0cigpKSkp
OwogfQpAQCAtMzY0MCw2ICszNzY5LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akFubm90YXRlZFR5cGVJblNlcXVlbmNlQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QW5ub3RhdGVkVHlwZUluU2VxdWVu
Y2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETENsYW1wQWRhcHRvcjxJRExM
b25nPj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2NTgsNiArMzc4OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmltcGxl
bWVudGF0aW9uRW51bUF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEVudW1lcmF0
aW9uPEFsdGVybmF0ZUVudW1OYW1lPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
aW1wbC5pbXBsZW1lbnRhdGlvbkVudW1BdHRyKCkpKSk7CiB9CkBAIC0zNjcxLDYgKzM4MDQsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0clNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRJbXBsZW1lbnRhdGlvbkVudW1BdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gb3B0aW9uYWxOYXRpdmVWYWx1ZSA9IHBhcnNl
RW51bWVyYXRpb248QWx0ZXJuYXRlRW51bU5hbWU+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM2OTIs
NiArMzgyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpNZWRpYURldmljZXNH
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6Om1lZGlhRGV2aWNlcyIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRv
SlM8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlcz4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLm1lZGlhRGV2aWNlcygpKSkp
OwogfQpAQCAtMzcwNSw2ICszODQyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alhNTE9iakF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmoKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6eG1sT2JqQXR0ciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RPYmo+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC54bWxPYmpBdHRy
KCkpKSk7CiB9CkBAIC0zNzE4LDYgKzM4NTcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqWE1MT2JqQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iagog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRYTUxPYmpBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIlhNTE9iakF0dHIiLCAiVGVzdE9iaiIpOyB9
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM3MzYs
NiArMzg3Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiB7CiAgICAgYXV0byYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmlzQ3JlYXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmlzQ3JlYXRl
KCkpKSk7CiB9CkBAIC0zNzQ5LDYgKzM4OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqQ3JlYXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDcmVhdGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMQm9vbGVhbj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzc2Nyw2ICszOTEyLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJ
RExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0
cmluZ2F0dHJBdHRyKSkpKTsKIH0KQEAgLTM3ODAsNiArMzkyNyw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRz
dHJpbmdhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZh
bHNlKTsKQEAgLTM3OTgsNiArMzk0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpCiB7CiAg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb246V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpKSk7CiB9CkBAIC0z
ODExLDYgKzM5NjIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
VVNWU3RyaW5nQXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
OldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODI5LDYgKzM5ODIs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpnZXRJbnRlZ3JhbEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSkpKTsKIH0K
QEAgLTM4NDIsNiArMzk5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODYwLDYgKzQwMTcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIo
SlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRV
bnNpZ25lZEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5z
aWduZWRpbnRlZ3JhbGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVbnNp
Z25lZExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIHN0ZDo6bWF4KDAsIGlt
cGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNp
Z25lZGludGVncmFsYXR0ckF0dHIpKSkpKTsKIH0KQEAgLTM4NzMsNiArNDAzMiw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0clNl
dHRlcihKU0dsb2JhbE9iamVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zODkxLDYgKzQwNTIsOCBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpoYXNBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uOldlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
Ym9vbGVhbmF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExCb29sZWFuPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0
dHIpKSkpOwogfQpAQCAtMzkwNCw2ICs0MDY3LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Qm9vbGVhbkF0dHJpYnV0
ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciIpOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExCb29sZWFuPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zOTIyLDYgKzQwODcsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpnZXRVUkxBdHRyaWJ1dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxh
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpKTsKIH0KQEAgLTM5MzUsNiArNDEwMiw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyU2V0dGVy
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb246V2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTM5NTMsNiArNDEyMiw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldFVSTEF0
dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdXN2dXJsYXR0ckF0dHIpKSkpOwogfQpAQCAtMzk2Niw2ICs0MTM3LDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGljYWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVzdnVybGF0dHJBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVTVlN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtMzk4NCw2ICs0MTU3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdB
dHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKSkp
OwogfQpAQCAtMzk5Nyw2ICs0MTcyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWwKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQw
MTUsNiArNDE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEludGVncmFsQXR0cmlidXRlOldlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdy
YWxBdHRyQXR0cikpKSk7CiB9CkBAIC00MDI4LDYgKzQyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRJbnRlZ3Jh
bEF0dHJpYnV0ZTpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJB
dHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQwNDYs
NiArNDIyNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETEJvb2xlYW4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA1OSw2ICs0
MjQyLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRCb29sZWFuQXR0cmlidXRlOldlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExCb29sZWFuPihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCBmYWxzZSk7CkBAIC00MDc3LDYgKzQyNjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpnZXRVUkxBdHRyaWJ1
dGU6V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKSkpOwogfQpAQCAtNDA5MCw2ICs0Mjc3LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJTZXR0ZXIoSlNHbG9i
YWxPYmplY3QmIGxleGkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbjpXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRVUkxBdHRyQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGlj
YWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGZhbHNlKTsKQEAgLTQxMDksNiArNDI5OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC00MTI1LDYgKzQzMTYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDE0Niw2ICs0MzM5LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpY0dldHRlcigKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0
YXRpYyIpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01T
dHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OmVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVTdGF0aWMoKSkpKTsKIH0KIApAQCAtNDE2MSw2ICs0MzU2LDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yRW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZVN0YXRpY1NldHRlcigKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZVN0YXRpYyIpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIEF0
dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0g
ewpAQCAtNDE4MCw2ICs0Mzc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5
cGVkQXJyYXlBdHRyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmEKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dHlwZWRBcnJheUF0dHIiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHlwZWRBcnJheUF0dHIo
KSkpKTsKIH0KQEAgLTQxOTMsNiArNDM5Miw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rl
c3RPYmpUeXBlZEFycmF5QXR0clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldFR5cGVkQXJyYXlBdHRyIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETEZsb2F0MzJBcnJheT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFs
dWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJh
eSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQyMTAsNiArNDQxMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhCiBzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmN1c3RvbUF0dHIiKTsKICAgICByZXR1cm4gdGhpc09iamVjdC5j
dXN0b21BdHRyKGxleGljYWxHbG9iYWxPYmplY3QpOwogfQogCkBAIC00MjIxLDYgKzQ0MjQsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSgogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9i
akN1c3RvbUF0dHJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Q3VzdG9tQXR0ciIpOwogICAgIHRoaXNPYmplY3Qu
c2V0Q3VzdG9tQXR0cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC00MjMzLDYgKzQ0MzgsOCBAQCBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlCiBzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQiKTsKICAgICByZXR1
cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3Qud3JhcHBlZCgpLCBldmVudE5hbWVz
KCkuZm9vRXZlbnQsIHdvcmxkRm9yRE9NT2JqZWN0KHRoaXNPYmplY3QpKTsKIH0KIApAQCAtNDI0
NCw2ICs0NDUxLDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHUKIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPbmZvb1NldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0T2JqJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpldmVudE5hbWVzKCkuZm9vRXZlbnQi
KTsKICAgICBzZXRFdmVudEhhbmRsZXJBdHRyaWJ1dGUobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c09iamVjdCwgdGhpc09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgdmFs
dWUpOwogICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKCZ0aGlzT2JqZWN0LCB2YWx1ZSk7CiAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUodmFsdWUpOwpAQCAtNDI1OSw2ICs0NDY4LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpPbmZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1YKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtp
dGZvb0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0T2Jq
JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmV2ZW50
TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhp
c09iamVjdC53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCwgd29ybGRGb3JET01PYmpl
Y3QodGhpc09iamVjdCkpOwogfQogCkBAIC00MjcwLDYgKzQ0ODEsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZAogc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vU2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RPYmomIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmV2ZW50TmFtZXMoKS5mb29FdmVudCIpOwogICAgIHNldEV2ZW50SGFuZGxl
ckF0dHJpYnV0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0Lndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50LCB2YWx1ZSk7CiAgICAgdm0uaGVhcC53cml0
ZUJhcnJpZXIoJnRoaXNPYmplY3QsIHZhbHVlKTsKICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZSh2
YWx1ZSk7CkBAIC00Mjg2LDYgKzQ0OTksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aEV4ZWNTdGF0ZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewog
ICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRlQXR0cmlidXRl
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVBdHRyaWJ1dGUoKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KSkpKSk7CiB9CkBAIC00Mjk5LDYgKzQ1
MTQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aEV4ZWNTdGF0ZUF0dHJp
YnV0ZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aQogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpzZXRXaXRoRXhlY1N0YXRlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQzMTcsNiArNDUzNCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Ondp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3Bl
LCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLndp
dGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCkpKSkpOwogfQpAQCAtNDMzMCw2ICs0NTQ5LDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNh
bGxXaXRoQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDM0OCw2ICs0NTY5LDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKICAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC00MzY0LDYgKzQ1ODcsOCBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpzZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
ZmFsc2UpOwpAQCAtNDM4NSw2ICs0NjEwLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlQXR0cmlidXRlR2UKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CkBAIC00NDAxLDYgKzQ2MjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVBdHRyaWJ1
dGVTZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZUF0
dHJpYnV0ZSIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDQyMiw2ICs0NjUxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNl
c0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlIik7CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNDQzOCw2ICs0NjY5LDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
RXhlY1N0YXRlV2l0aFNwYWNlc0EKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRFeGVjU3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kRXhlY1N0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIsICJUZXN0T2JqIik7
IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDQ2
MCw2ICs0NjkzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyMSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5j
b25kaXRpb25hbEF0dHIxKCkpKSk7CiB9CkBAIC00NDc2LDYgKzQ3MTEsOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRD
b25kaXRpb25hbEF0dHIxIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQ0OTcsNiArNDczNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIyR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsQXR0cjIiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuY29uZGl0aW9uYWxBdHRyMigpKSkpOwogfQpAQCAtNDUxMyw2ICs0NzUyLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dE9iajo6c2V0Q29uZGl0aW9uYWxBdHRyMiIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC00NTM0LDYgKzQ3NzUsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
bwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbEF0dHIz
Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRpdGlvbmFsQXR0cjMoKSkpKTsKIH0KQEAgLTQ1NTAsNiAr
NDc5Myw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIz
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsQXR0cjMiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
TG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDU3MCw2ICs0ODE1LDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlMKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTVGVzdE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEE6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKIH0KIApAQCAtNDU4NCw2ICs0ODMxLDggQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
VGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNCIpOwogICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJjb25kaXRpb25hbEF0dHI0IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRy
NCIpKSwgdmFsdWUpOwogfQpAQCAtNDU5OSw2ICs0ODQ4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dE9iaiYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
b25kaXRpb25hbEF0dHI1Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9i
amVjdCgpKTsKIH0KIApAQCAtNDYxMyw2ICs0ODY0LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmEKIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9i
aiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNSIpOwogICAgIC8vIFNoYWRvd2lu
ZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCJjb25kaXRpb25hbEF0dHI1IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNSIpKSwg
dmFsdWUpOwogfQpAQCAtNDYyOCw2ICs0ODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI1Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QK
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYg
dGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRp
b25hbEF0dHI2Iik7CiAgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgp
KTsKIH0KIApAQCAtNDY0Miw2ICs0ODk3LDggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmEKIHN0
YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JT
ZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhp
c09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxBdHRyNiIpOwogICAgIC8vIFNoYWRvd2luZyBhIGJ1
aWx0LWluIGNvbnN0cnVjdG9yLgogICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KCJjb25kaXRpb25hbEF0dHI2IiksIHN0cmxlbigiY29uZGl0aW9uYWxBdHRyNiIpKSwgdmFsdWUp
OwogfQpAQCAtNDY1Nyw2ICs0OTE0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
akNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG8KIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y2FjaGVkQXR0cmlidXRlMSIpOwogICAg
IGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC5tX2NhY2hlZEF0dHJpYnV0ZTEu
Z2V0KCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CkBAIC00Njc1LDYgKzQ5MzQsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjYWNoZWRBdHRy
aWJ1dGUyIik7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0Lm1fY2Fj
aGVkQXR0cmlidXRlMi5nZXQoKSkKICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKQEAgLTQ2OTQsNiArNDk1NSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUzR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmNhY2hlZEF0dHJpYnV0ZTMiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRo
aXNPYmplY3QubV9jYWNoZWRBdHRyaWJ1dGUzLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtNDcxNCw2
ICs0OTc3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6YW55QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExBbnk+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYW55QXR0cmli
dXRlKCkpKSk7CiB9CkBAIC00NzI3LDYgKzQ5OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqQW55QXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
TwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRBbnlBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMQW55PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NzQ1LDYgKzUw
MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqT2JqZWN0QXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvYmplY3RBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETE9iamVjdD4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5vYmplY3RB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3NTgsNiArNTAyNyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1Rlc3RPYmpPYmplY3RBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnNldE9iamVjdEF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExPYmplY3Q+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTQ3NzYsNiArNTA0Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50
RG9jdW1lbnRHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnRlbnREb2N1bWVudCIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPERvY3VtZW50Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
KnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUobGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5jb250ZW50RG9j
dW1lbnQoKSkpKSk7CiB9CkBAIC00Nzg5LDYgKzUwNjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsTwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptdXRhYmxlUG9pbnQi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLm11dGFibGVQb2ludCgpKSkpOwogfQpAQCAtNDgwMiw2ICs1MDc3LDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2ludFNldHRlcihKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
TXV0YWJsZVBvaW50Iik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETEludGVyZmFjZTxTVkdQb2ludD4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJtdXRhYmxl
UG9pbnQiLCAiU1ZHUG9pbnQiKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CkBAIC00ODIwLDYgKzUwOTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
agogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpibHVlYmVycnkiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGltcGwuYmx1ZWJlcnJ5KCkpKSk7CiB9CkBAIC00ODMzLDYgKzUxMTIsOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeVNldHRlcihKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iagogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpzZXRCbHVlYmVycnkiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwpAQCAtNDg1MSw2ICs1MTMyLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRl
c2NyaXB0aW9uR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2IKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZGVzY3JpcHRpb24iKTsKICAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGlt
cGwuZGVzY3JpcHRpb24oKSkpKTsKIH0KQEAgLTQ4NjQsNiArNTE0Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmlkIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBpbXBsLmlkKCkpKSk7CiB9CkBAIC00ODc3LDYgKzUxNjIsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqSWRTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXRJZCIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00ODk1
LDYgKzUxODIsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpoYXNoIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuaGFzaCgpKSkp
OwogfQpAQCAtNDkwOCw2ICs1MTk3LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ5MjAsNiAr
NTIxMSw4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0CiBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdE9iaiYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cmVwbGFjZWFibGVB
dHRyaWJ1dGUiKTsKICAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBwcm9wZXJ0eS4KICAgICBy
ZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigicmVwbGFjZWFibGVBdHRyaWJ1dGUiKSwg
c3RybGVuKCJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpKSwgdmFsdWUpOwogfQpAQCAtNDkzMyw2ICs1
MjI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6bnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETE51bGxhYmxlPElETFVucmVzdHJpY3RlZERvdWJsZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoKSkpKTsK
IH0KQEAgLTQ5NDYsNiArNTI0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTnVsbGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpKSk7CiB9
CkBAIC00OTU5LDYgKzUyNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJvb2xlYW4+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgp
KSkpOwogfQpAQCAtNDk3Miw2ICs1MjcxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXgKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGUoKSkpKTsKIH0KQEAgLTQ5ODUsNiArNTI4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbE9i
amVjCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExMb25nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5udWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNDk5OCw2ICs1MzAxLDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlU2V0
dGVyKEpTR2xvYmFsT2JqZWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
c2V0TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTnVs
bGFibGU8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwMTYsNiArNTMyMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
ICh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpA
QCAtNTAyOSw2ICs1MzM2LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExET01TdHJpbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCBmYWxzZSk7CkBAIC01MDQ3LDYgKzUzNTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsb2JhbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpudWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJ
RExVU1ZTdHJpbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxh
YmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUwNjAsNiArNTM3MSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMVVNWU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAt
NTA3OCw2ICs1MzkxLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
Qnl0ZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETE51bGxhYmxlPElETEJ5dGVTdHJpbmc+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm51bGxhYmxlQnl0ZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDkxLDYgKzU0MDYsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVCeXRlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpz
ZXROdWxsYWJsZUJ5dGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExCeXRlU3RyaW5nPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTEwOSw2ICs1
NDI2LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6YXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExE
T01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmlidXRl
KCkpKSk7CiB9CkBAIC01MTIyLDYgKzU0NDEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoSlNHbG9iYWxPYmplYwog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphdHRyaWJ1dGVXaXRoUmVzZXJ2
ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRW51bWVyYXRpb248VGVz
dE9iajo6T3B0aW9uYWw+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpKSk7CiB9CkBAIC01MTM1LDYgKzU0NTYsOCBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51
bVR5cGVTZXR0ZXIoSlNHbG9iYWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpzZXRBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG9wdGlvbmFsTmF0aXZlVmFsdWUg
PSBwYXJzZUVudW1lcmF0aW9uPFRlc3RPYmo6Ok9wdGlvbmFsPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBA
IC01MTU2LDYgKzU0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdFJl
YWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYgogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmVhZE9ubHlWb2lkUHJvbWlzZUF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExWb2lkPj4obGV4aWNh
bEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGlt
cGwudGVzdFJlYWRPbmx5Vm9pZFByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUxNjksNiAr
NTQ5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0UmVhZE9ubHlQcm9t
aXNlQXR0cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFByb21pc2U8SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KGxleGlj
YWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBp
bXBsLnRlc3RSZWFkT25seVByb21pc2VBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTUxODIsNiArNTUw
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0
ZUdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExJbnRlcmZhY2U8VGVzdE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0
ZSgpKSkpOwogfQpAQCAtNTE5NSw2ICs1NTI0LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpT
VGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2EK
IHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9yd2FyZHNBdHRyaWJ1
dGUiKTsKICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpLCBzdHJsZW4oInB1
dEZvcndhcmRzQXR0cmlidXRlIikpOwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNP
YmplY3QuZ2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjE4LDYgKzU1NDksOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihK
U0dsb2JhbE9iamVjdAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpwdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qu
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE5vZGU+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRo
aXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucHV0Rm9yd2FyZHNOdWxs
YWJsZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTIzMSw2ICs1NTY0LDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYWxPYmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oInB1dEZvcndhcmRzTnVs
bGFibGVBdHRyaWJ1dGUiKSwgc3RybGVuKCJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIikp
OwogICAgIGF1dG8gdmFsdWVUb0ZvcndhcmRUbyA9IHRoaXNPYmplY3QuZ2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CkBAIC01MjU0LDYgKzU1ODksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAg
IGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
JmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzdHJpbmdpZmllckF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVVNWU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aHJvd1Njb3BlLCBpbXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MjY3
LDYgKzU2MDQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5naWZpZXJB
dHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpzZXRTdHJpbmdpZmllckF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExVU1ZTdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUyODUsNiArNTYyNCw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0
cmlidXRlR2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTI5OSw2ICs1NjQwLDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmoKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0Q29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZh
Y2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVj
dCIsICJjb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzIwLDYgKzU2NjMs
OCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBbmRDb25kaXRp
b25hbGx5UmVhZFdyaXRlQXR0cmlidXRlR2V0dAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpjb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
Y29uZGl0aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlKCkpKSk7CiB9CkBA
IC01MzM3LDYgKzU2ODIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dAogewogICAgIGF1dG8m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRpb25hbEFuZENvbmRpdGlvbmFsbHlS
ZWFkV3JpdGVBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0
aW9uYWxBbmRDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlIiwgIk5vZGUiKTsgfSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MzU5LDYgKzU3
MDYsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlvbmFs
bHlSZWFkV3JpdGVBdHRyaWJ1dGVHZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSIpOwog
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ydW50
aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTM3Miw2ICs1
NzIxLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25h
bGx5UmVhZFdyaXRlQXR0cmlidXRlU2V0dGVyKEpTR2wKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKQEAgLTUzOTAsNiArNTc0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9y
Z2VhYmxlCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1bnRpbWVDb25k
aXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2Nv
cGUsICh0b0pTPElETEludGVyZmFjZTxOb2RlPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNP
YmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwucnVudGltZUNvbmRpdGlvbmFs
bHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZSgpKSkpOwogfQpAQCAtNTQwMyw2ICs1NzU2
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5
UmVhZFdyaXRlQXR0cmlidXRlVW5mb3JnZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6c2V0UnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZv
cmdlYWJsZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9i
YWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdE9iamVjdCIsICJydW50aW1lQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxlIiwgIk5vZGUiKTsgfSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NDIxLDYgKzU3NzYsOCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUnVudGltZUNvbmRpdGlvbmFsbHlSZWFk
V3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxl
UHJpdmF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29w
ZSwgaW1wbC5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVVuZm9yZ2VhYmxl
UHJpdmF0ZSgpKSkpOwogfQpAQCAtNTQzNCw2ICs1NzkxLDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlVW5mb3Jn
ZWFibGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0UnVudGltZUNv
bmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgIlRlc3RPYmplY3QiLCAicnVudGltZUNvbmRpdGlvbmFsbHlSZWFkV3JpdGVBdHRy
aWJ1dGVVbmZvcmdlYWJsZVByaXZhdGUiLCAiTm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU0NTIsNiArNTgxMSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJp
YnV0ZVByb21pc2VHZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnJ1
bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlUHJvbWlzZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExEb3VibGU+PihsZXhpY2FsR2xvYmFsT2JqZWN0
LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5ydW50aW1lQ29u
ZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2UoKSkpKTsKIH0KQEAgLTU0NjUsNiAr
NTgyNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpSdW50aW1lQ29uZGl0aW9u
YWxseVJlYWRXcml0ZUF0dHJpYnV0ZVByb21pc2VTZXR0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OnNldFJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRl
UHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExQcm9taXNlPElETERvdWJsZT4+KGxleGljYWxH
bG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGZhbHNlKTsKQEAgLTU0ODMsNiArNTg0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7
CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuY29uZGl0aW9uYWxseUV4cG9zZWRU
b1dpbmRvd0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTQ5Niw2ICs1ODYxLDggQEAgc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBdHRyaWJ1
dGVTZXR0ZXIoSlNHbG8KIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2V0
Q29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01NTE0LDYgKzU4ODEsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dvcmtlckF0dHJpYnV0
ZUdldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25k
aXRpb25hbGx5RXhwb3NlZFRvV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAo
dG9KUzxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmNvbmRp
dGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTU1MjcsNiArNTg5
Niw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbGx5RXhwb3Nl
ZFRvV29ya2VyQXR0cmlidXRlU2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OnNldENvbmRpdGlvbmFsbHlFeHBvc2VkVG9Xb3JrZXJBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNTU0NSw2ICs1OTE2
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsbHlFeHBvc2Vk
VG9XaW5kb3dBbmRXb3JrZXJBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJpYnV0
ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNF
X0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2Vy
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01NTU4LDYgKzU5MzEsOCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0FuZFdvcmtlckF0dHJp
YnV0ZVNldAogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpzZXRDb25kaXRp
b25hbGx5RXhwb3NlZFRvV2luZG93QW5kV29ya2VyQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1NzksNiArNTk1NCw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjplbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtNTU5Nyw2ICs1OTc0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmVuYWJsZWRBdFJ1bnRpbWVP
cGVyYXRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNTYxNiw2ICs1OTk1LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uRW5hYmxlZEF0UnVudGltZU9wZXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAg
ICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CkBAIC01NjQ0LDYgKzYwMjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6ZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvblN0YXRpYyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTU2NjcsNiArNjA1MCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkVuYWJsZWRJblNwZWNpZmljV29yCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjplbmFibGVkSW5TcGVjaWZpY1dvcmxkV2hlblJ1bnRpbWVGZWF0dXJlRW5hYmxl
ZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTY4OSw2ICs2MDc0
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV29ybGRTcGVjaWZpY01ldGhvZEIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OndvcmxkU3BlY2lmaWNNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU3MTEsNiArNjA5OCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNhbGN1bGF0ZVNl
Y3JldFJlc3VsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpj
YWxjdWxhdGVTZWNyZXRSZXN1bHQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY2FsY3VsYXRlU2Vj
cmV0UmVzdWx0KFdURk1vdmUocHJvbWlzZSkpOwpAQCAtNTcyOCw2ICs2MTE3LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0
U2VjcmV0Qm9vbGVhbkJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmdldFNlY3JldEJvb2xlYW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExCb29sZWFuPihpbXBsLmdldFNlY3JldEJvb2xlYW4oKSkpKTsKIH0KQEAg
LTU3NDQsNiArNjEzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RGZWF0dXJlR2V0U2VjcmV0CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0RmVhdHVyZUdldFNlY3JldEJvb2xl
YW4iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVB
U0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCb29sZWFu
PihpbXBsLnRlc3RGZWF0dXJlR2V0U2VjcmV0Qm9vbGVhbigpKSkpOwogfQpAQCAtNTc2MSw2ICs2
MTU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVm9pZE1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwu
dm9pZE1ldGhvZCgpOwpAQCAtNTc3OCw2ICs2MTczLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdz
Qm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnZvaWRNZXRo
b2RXaXRoQXJncyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTgw
Niw2ICs2MjAzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmJ5dGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExCeXRlPihpbXBsLmJ5dGVNZXRob2QoKSkpKTsK
IH0KQEAgLTU4MjEsNiArNjIyMCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpieXRlTWV0aG9kV2l0aEFyZ3Mi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU4NDcsNiArNjI0OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk9jdGV0TWV0aG9kQm9keShKU0M6CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvY3RldE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh0b0pTPElETE9jdGV0PihpbXBsLm9jdGV0TWV0aG9kKCkpKSk7CiB9CkBAIC01
ODYyLDYgKzYyNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdpdGhBcmdzQgogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b2N0ZXRNZXRob2RXaXRoQXJncyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNTg4OCw2ICs2MjkzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TG9uZ01ldGhvZEJvZHkoSlNDOjoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OmxvbmdNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNv
ZGUodG9KUzxJRExMb25nPihpbXBsLmxvbmdNZXRob2QoKSkpKTsKIH0KQEAgLTU5MDMsNiArNjMx
MCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJnc0JvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjpsb25nTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxH
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxl
eGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTU5MjksNiArNjMzOCw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhvZEJv
ZHkoSlNDOjpKCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpv
YmpNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJ
bnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwub2JqTWV0aG9kKCkpKSk7CiB9CkBAIC01OTQ0LDYgKzYzNTUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PYmpNZXRob2RXaXRoQXJnc0JvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6b2JqTWV0aG9kV2l0aEFyZ3MiKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxH
bG9iYWxPYmplY3QpKTsKQEAgLTU5NzAsNiArNjM4Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVNZXRob2RC
b2R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp1bmZvcmdl
YWJsZU1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElE
TExvbmc+KGltcGwudW5mb3JnZWFibGVNZXRob2QoKSkpKTsKIH0KQEAgLTU5ODUsNiArNjQwMCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjAwNyw2ICs2NDI0LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShj
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwMjksNiArNjQ0OCw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU3RyaW5nTWV0aG9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ01ldGhvZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpT
VmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpbXBsLm51bGxhYmxlU3RyaW5nTWV0aG9kKCkpKSk7CiB9CkBAIC02MDQ0LDYg
KzY0NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JGdW5jdGlvbk51bGxhYmxlU3RyaW5nU3RhdAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bnVsbGFibGVTdHJpbmdTdGF0aWNNZXRob2QiKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURM
TnVsbGFibGU8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIFRlc3RPYmo6Om51
bGxhYmxlU3RyaW5nU3RhdGljTWV0aG9kKCkpKSk7CiB9CiAKQEAgLTYwNTgsNiArNjQ4MSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk51bGxhYmxlU3RyaW5nU3BlY2lhCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpudWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYwNzgsNiArNjUwMyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhFbnVtQXJnQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoRW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjEwMCw2ICs2NTI3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFN0YW5kYWxvbmUKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhTdGFuZGFsb25l
RW51bUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjEyMiw2
ICs2NTUxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW4KICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gZW51
bUFyZyA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VGVzdE9iajo6RW51bVR5cGU+Pjo6UmV0dXJuVHlwZT4oKSA6IE9w
dGlvbmFsPENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUZXN0T2JqOjpFbnVtVHlwZT4+OjpSZXR1
cm5UeXBlPihjb252ZXJ0PElETEVudW1lcmF0aW9uPFRlc3RPYmo6OkVudW1UeXBlPj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJlbnVt
QXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIsIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOyB9KSk7CkBAIC02MTQyLDYg
KzY1NzMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CiAgICAgYXV0byBlbnVtQXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxIDogY29udmVydDxJRExFbnVtZXJhdGlvbjxUZXN0
T2JqOjpFbnVtVHlwZT4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwg
W10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKGxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3RPYmo6OkVudW1UeXBlPigpKTsgfSk7CkBAIC02MTYyLDYgKzY1OTUsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RU
aGF0UmVxdWlyZXNBbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjE4NSw2ICs2NjIwLDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVT
VlN0cmluZ0EKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhVU1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKQEAgLTYyMDcsNiArNjY0NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOdWxsYWJsZVVTCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTnVsbGFibGVV
U1ZTdHJpbmdBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYy
MjksNiArNjY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjI1MSw2ICs2NjkyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5n
QXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02MjczLDYgKzY3
MTYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVCeQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE51bGxhYmxlQnl0ZVN0cmluZ0FyZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjI5NSw2ICs2NzQwLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aEJ5dGVTdHJpbmcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhCeXRlU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYg
KFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMxNyw2ICs2
NzY0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlQm9keSgKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnNlcmlhbGl6ZWRWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjMzOSw2ICs2Nzg4LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFJl
Y29yZEJvZHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1l
dGhvZFdpdGhSZWNvcmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTYzNjEsNiArNjgxMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25CCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJl
bGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUsIGltcGwubWV0aG9kV2l0aEV4Y2VwdGlvbigpKTsKQEAgLTYzNzgsNiArNjgzMSw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb25SCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uUmV0dXJuaW5nTG9uZyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETExvbmc+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNlcHRpb25SZXR1cm5pbmdM
b25nKCkpKSk7CiB9CkBAIC02MzkzLDYgKzY4NDgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9u
UgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0
aEV4Y2VwdGlvblJldHVybmluZ09iamVjdCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5tZXRob2RXaXRo
RXhjZXB0aW9uUmV0dXJuaW5nT2JqZWN0KCkpKSk7CiB9CkBAIC02NDA4LDYgKzY4NjUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25DdXN0b21NZXRob2RCb2R5KEpTQwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6Y3VzdG9tTWV0aG9kIik7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93
U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9kKCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtNjQyMiw2ICs2ODgxLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzIik7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIChKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tTWV0aG9k
V2l0aEFyZ3MoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOwogfQogCkBAIC02
NDM2LDYgKzY4OTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Qcml2YXRlTWV0aG9kQm9keShKUwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAK
KyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6cHJpdmF0ZU1ldGhvZCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjQ1Niw2ICs2OTE5LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUHVibGlj
QW5kUHJpdmF0ZU1ldGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnB1YmxpY0FuZFByaXZhdGVNZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKQEAgLTY0NzYsNiArNjk0MSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXJCb2R5CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjphZGRFdmVudExpc3Rl
bmVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02NTA1LDYgKzY5
NzIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6cmVtb3ZlRXZlbnRMaXN0ZW5lciIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNjUzNCw2ICs3MDAzLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aEV4ZWNT
dGF0ZVZvaWRCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
OndpdGhFeGVjU3RhdGVWb2lkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLndpdGhFeGVjU3RhdGVW
b2lkKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBA
IC02NTUxLDYgKzcwMjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRlT2JqQm9keQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aEV4ZWNTdGF0ZU9iaiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC53aXRoRXhlY1N0YXRlT2JqKCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xv
YmFsT2JqZWN0KSkpKSk7CiB9CkBAIC02NTY2LDYgKzcwMzksOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRXhlY1N0YXRl
Vm9pZEV4YwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0
aEV4ZWNTdGF0ZVZvaWRFeGNlcHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC53aXRoRXhlY1N0YXRl
Vm9pZEV4Y2VwdGlvbigqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9i
amVjdCkpKTsKQEAgLTY1ODMsNiArNzA1OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhFeGVjU3RhdGVPYmpFeGNlCiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoRXhlY1N0YXRl
T2JqRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMSW50ZXJmYWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLndpdGhFeGVjU3RhdGVPYmpFeGNlcHRp
b24oKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpKSkpKTsK
IH0KQEAgLTY1OTgsNiArNzA3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxP
YmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250
ZXh0KSkKQEAgLTY2MTgsNiArNzA5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2MzgsNiArNzExOSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4ZWNTdGF0ZU9iakV4Y2VwdGlvbiIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2NTYs
NiArNzEzOSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZEV4
ZWNTdGF0ZVdpdGhTcGFjZXMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhp
Y2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJ
S0VMWSghY29udGV4dCkpCkBAIC02Njc0LDYgKzcxNTksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1
bWVudAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aERv
Y3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2Fs
R2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VM
WSghY29udGV4dCkpCkBAIC02Njk2LDYgKzcxODMsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoQ2FsbGVyRG9jdW1lbnRB
cgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0
aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgp
LmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6d2l0aENhbGxl
ckRvY3VtZW50QXJndW1lbnQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8qIGluY3VtYmVudERvY3VtZW50ID0gaW5jdW1iZW50RE9NV2luZG93KCpq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmNhbGxGcmFt
ZSkuZG9jdW1lbnQoKTsKICAgICBpZiAoIWluY3VtYmVudERvY3VtZW50KQpAQCAtNjcxNiw2ICs3
MjA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uV2l0aENhbGxlcldpbmRvd0FyZ3UKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OndpdGhDYWxsZXJXaW5kb3dBcmd1bWVudCIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7CiAgICAgaW1wbC53aXRoQ2FsbGVyV2luZG93QXJndW1lbnQoaW5jdW1iZW50RE9NV2luZG93
KCpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KSwgKmNhbGxG
cmFtZSkpOwpAQCAtNjczMyw2ICs3MjI0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRp
b25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7
CiAgICAgYXV0byBvcHQgPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9u
YWw8Q29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSkpOwpAQCAtNjc1Myw2ICs3MjQ2LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXIKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvcHQgPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxJRExMb25nPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjc3Myw2ICs3MjY4LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02Nzk4LDYgKzcyOTUsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoTm9uT3B0aW9uYQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIik7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC02ODI2LDYgKzczMjUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50
MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg0Niw2ICs3
MzQ3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVMKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBjb252ZXJ0PElE
TFVTVlN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAg
LTY4NjYsNiArNzM2OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxBdG9tU3Ry
aW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1
cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAg
ICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSgp
IDogY29udmVydDxJRExBdG9tU3RyaW5nQWRhcHRvcjxJRExET01TdHJpbmc+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNjg4Niw2ICs3MzkxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZSIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gImZvbyJfcyA6IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NjkwNiw2ICs3NDEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJp
bmdBbmREZWZhdWx0VmFsdWUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSA/IEF0b21TdHJpbmcoImZvbyIsIEF0b21TdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6
IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTY5MjYsNiArNzQzNSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gYXJndW1lbnQw
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC02OTQ2LDYgKzc0
NTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSk7CkBAIC02OTY2LDYgKzc0NzksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxBdAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9k
V2l0aE9wdGlvbmFsQXRvbVN0cmluZ0lzTnVsbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1bWVudDAudmFsdWUoKS5p
c1VuZGVmaW5lZCgpID8gbnVsbEF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8
SURMRE9NU3RyaW5nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsK
QEAgLTY5ODYsNiArNzUwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxTdHJp
bmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
PyBlbXB0eVN0cmluZygpIDogY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MDA2LDYgKzc1MjMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoT3B0aW9uYWxVUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBzdHIgPSBhcmd1
bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IGNvbnZlcnQ8SURM
VVNWU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NzAyNiw2ICs3NTQ1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXQKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbEF0b21TdHJp
bmdJc0VtcHR5U3RyaW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1
bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
PyBlbXB0eUF0b20oKSA6IGNvbnZlcnQ8SURMQXRvbVN0cmluZ0FkYXB0b3I8SURMRE9NU3RyaW5n
Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNDYsNiAr
NzU2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTiIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBu
dW1iZXIgPSBjb252ZXJ0PElETFVucmVzdHJpY3RlZERvdWJsZT4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcwNjYsNiArNzU4OSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEZsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7
CkBAIC03MDg2LDYgKzc2MTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMbwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsTG9u
Z0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwog
ICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IE9wdGlv
bmFsPENvbnZlcnRlcjxJRExMb25nTG9uZz46OlJldHVyblR5cGU+KCkgOiBPcHRpb25hbDxDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmdMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxMDYsNiArNzYzMyw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyIpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2
ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBudW1i
ZXIgPSBjb252ZXJ0PElETExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOwpAQCAtNzEyNiw2ICs3NjU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW4K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhP
cHRpb25hbFVuc2lnbmVkTG9uZ0xvbmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gbnVtYmVyID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0
dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPjo6UmV0
dXJuVHlwZT4oY29udmVydDxJRExVbnNpZ25lZExvbmdMb25nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTcxNDYsNiArNzY3Nyw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFVuCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjptZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG51bWJlciA9IGNv
bnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50
MC52YWx1ZSgpKTsKQEAgLTcxNjYsNiArNzY5OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNl
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhcnJheSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgPyBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj46OlJldHVyblR5cGV7IH0g
OiBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MTg2LDYgKzc3MjEsOCBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZy
YW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6
bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5Iik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5ID0gYXJndW1lbnQwLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSA/IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+
Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyMDYsNiArNzc0Myw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUg
YXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBhcmd1bWVu
dDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+
OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVydGVyPElETEJvb2xlYW4+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSkpOwpAQCAtNzIyNiw2ICs3NzY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm8K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhP
cHRpb25hbEJvb2xlYW5Jc0ZhbHNlIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PElETEJvb2xlYW4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03MjQ2LDYgKzc3ODcsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9wdGlvbmFsQW55Iik7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQw
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETEFueT4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTcyNjYsNiArNzgw
OSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbE9iCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxPYmplY3QiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYSA9IGFyZ3Vt
ZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxDb252ZXJ0ZXI8SURMT2JqZWN0
Pjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENvbnZlcnRlcjxJRExPYmplY3Q+OjpSZXR1cm5U
eXBlPihjb252ZXJ0PElETE9iamVjdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52
YWx1ZSgpKSk7CkBAIC03Mjg2LDYgKzc4MzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxOdQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aE9w
dGlvbmFsTnVsbGFibGVXcmFwcGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT5hcmd1bWVudCgwKTsKICAgICBhdXRvIG9iaiA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50
ZXJmYWNlPFRlc3RPYmo+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIDAsICJvYmoiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxOdWxs
YWJsZVdyYXBwZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczMDYsNiArNzg1Myw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbE51CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxOdWxsYWJsZVdyYXBwZXJJc051bGwiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVT
Y29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqID0g
Y29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iaiIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhPcHRpb25hbE51bGxhYmxlV3JhcHBlcklzTnVsbCIsICJUZXN0T2JqIik7
IH0pOwpAQCAtNzMyNiw2ICs3ODc1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFAKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25h
bFhQYXRoTlNSZXNvbHZlciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byByZXNvbHZlciA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMWFBh
dGhOU1Jlc29sdmVyPFhQYXRoTlNSZXNvbHZlcj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJn
dW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOyB9KTsK
QEAgLTczNDYsNiArNzg5Nyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFJlCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoT3B0aW9uYWxSZWNv
cmQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAg
IGF1dG8gcmVjb3JkID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/IFdURjo6bnVs
bG9wdCA6IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMUmVjb3JkPElETERPTVN0cmluZywgSURMTG9u
Zz4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzM2Niw2
ICs3OTE5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsUHIKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhPcHRpb25hbFByb21pc2UiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxp
dmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gcHJv
bWlzZSA9IGFyZ3VtZW50MC52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgPyBudWxscHRyIDogY29udmVy
dDxJRExQcm9taXNlPElETFZvaWQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCkpOwpAQCAtNzM4Niw2ICs3OTQxLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhDYWxs
YmFja0FyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
aWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzQwOCw2
ICs3OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWMKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03NDMzLDYg
Kzc5OTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1
dG8gY2FsbGJhY2sgPSBjb252ZXJ0PElETE51bGxhYmxlPElETENhbGxiYWNrSW50ZXJmYWNlPEpT
VGVzdENhbGxiYWNrSW50ZXJmYWNlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwg
ImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxB
cmciKTsgfSk7CkBAIC03NDUzLDYgKzgwMTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdQog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsK
QEAgLTc0NzUsNiArODAzOCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFjCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjptZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC03NTAwLDYgKzgwNjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aENhbGxi
YWNrRnVuY3Rpb25BbmRPcHRpb25hbEFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxG
cmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFi
bGU8SURMQ2FsbGJhY2tGdW5jdGlvbjxKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uPj4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFuZE9wdGlvbmFsQXJnIik7IH0pOwpAQCAtNzUyMCw2ICs4
MDg3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnIik7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+
YXJndW1lbnQoMCk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RCZU9i
amVjdEVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVz
dE9iamVjdCIsICJzdGF0aWNNZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpA
QCAtNzUzOSw2ICs4MTA4LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25TdGF0aWNNZXRob2RXaXRoQ2EKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnN0YXRpY01ldGhvZFdpdGhDYWxsYmFj
a0FyZyIpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3Qp
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc1NjEsNiArODEzMiw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0
aG9kMUJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25k
aXRpb25hbE1ldGhvZDEiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9K
UzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLmNvbmRpdGlvbmFsTWV0
aG9kMSgpKSkpOwogfQpAQCAtNzU3OSw2ICs4MTUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2Qy
Qm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlv
bmFsTWV0aG9kMiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbE1ldGhvZDIoKTsK
QEAgLTc1OTksNiArODE3NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsTWV0aG9kM0JvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25hbE1ldGhvZDMiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUu
cmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0aW9uYWxNZXRob2QzKCk7CkBAIC03NjE4LDYgKzgx
OTUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMUJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3Vt
ZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmpBcmcg
PSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RP
YmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwpAQCAtNzYzNiw2ICs4
MjE1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDJCb2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1
bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gb2JqQXJn
ID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+PigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0
T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc2NTQsNiAr
ODIzNSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QzQm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFy
ZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQw
LnZhbHVlKCkpOwpAQCAtNzY2OSw2ICs4MjUyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDRCb2QK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVu
c3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc2ODQsNiArODI2OSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q1Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGNhbGxiYWNrID0gY29udmVydDxJ
RExDYWxsYmFja0ludGVyZmFjZTxKU1Rlc3RDYWxsYmFja0ludGVyZmFjZT4+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgMCwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRl
ZE1ldGhvZCIpOyB9KTsKQEAgLTc2OTksNiArODI4Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q2
Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9h
ZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgwKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETElu
dGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHNjb3BlLCAwLCAibGlzdEFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRN
ZXRob2QiLCAiRE9NU3RyaW5nTGlzdCIpOyB9KTsKQEAgLTc3MTQsNiArODMwMyw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2Q3Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJ
RExOdWxsYWJsZTxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3MjksNiArODMyMCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2Q4Qm9kCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJm
YWNlPFRlc3RPYmo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVz
dE9iaiIpOyB9KTsKQEAgLTc3NDQsNiArODMzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5Qm9k
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVk
TWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKICAgICBhdXRvIHdpbmRvdyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFdpbmRvd1By
b3h5Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAs
ICJ3aW5kb3ciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIldpbmRvd1Byb3h5
Iik7IH0pOwpAQCAtNzc1OSw2ICs4MzU0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwQm8KICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRo
b2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmlu
Zz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC03Nzc0LDYg
KzgzNzEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTFCbwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZCIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhcnJh
eUFyZyA9IGNvbnZlcnQ8SURMU2VxdWVuY2U8SURMVW5zaWduZWRMb25nPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTc3ODksNiArODM4OCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2QxMkJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAt
NzgwNCw2ICs4NDA1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEzQm8KICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYmxvYkFyZ3MgPSBj
b252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMSW50ZXJmYWNlPEJsb2I+PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgKmNhbGxGcmFtZSwgMCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTc4MTgsNiArODQyMSw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2Fk
ZWRNZXRob2RPdmVyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QiKTsKICAgICBzaXpl
X3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7CiAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0
aG9kMTNCb2R5KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgY2FzdGVkVGhpcykpKTsK
QEAgLTc4NzAsNiArODQ3NSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE9w
dGlvbmFsUGFyYW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzg4OCw2ICs4
NDk1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8
VGVzdE9iaj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9u
YWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTc5MDYsNiArODUxNSw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoT3B0
aW9uYWxQYXJhbWV0ZXIiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90
PigyLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAx
KSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwpAQCAtNzkzNyw2ICs4NTQ4LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJs
b2FkZWRNZXRob2RXaXRoRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmplY3RPck5v
ZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNl
PFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBA
IC03OTUyLDYgKzg1NjUsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZFdpdGhEaXN0
aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExMb25nPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtNzk2Nyw2ICs4NTgyLDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6
bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdz
Q291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTc5OTIsNiArODYwOSw4IEBAIHN0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aDJEaXN0aW5ndWlzaGluZ1VuaW9ucyIpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAu
dmFsdWUoKSk7CkBAIC04MDA3LDYgKzg2MjYsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0
aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxv
Z0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0
PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0SW50ZXJmYWNlPiwgSURMRE9NU3RyaW5nLCBJRExM
b25nPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgwMjIs
NiArODY0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zIik7CiAgICAgc2l6ZV90IGFyZ3ND
b3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwog
ICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5n
QXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgwNDksNiArODY3Miw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRoCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5p
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExVbmlvbjxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODA2Nyw2ICs4NjkyLDggQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRl
ZE1ldGhvZFdpdGgKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6
Om92ZXJsb2FkZWRNZXRob2RXaXRoTm9uRGlzdGluZ3Vpc2hpbmdVbmlvbiIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3Bl
IGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBv
YmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURM
SW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFs
dWUoKSk7CkBAIC04MDg1LDYgKzg3MTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iKTsK
ICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigyLCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAyKSB7CiAgICAgICAgIEpTVmFs
dWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwpA
QCAtODEwNyw2ICs4NzM2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlVW5p
b24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3Vy
ZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExVbmlv
bjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+Pj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKQEAgLTgxMjIsNiArODc1Myw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk92ZXJsb2FkV2l0aE51bGxhYmxlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpvdmVybG9hZFdpdGhOdWxsYWJsZVVuaW9uIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJn
dW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4
ID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVl
KCkpOwpAQCAtODEzNyw2ICs4NzcwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291
bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAg
ICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0Fy
ZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CkBAIC04MTY0LDYgKzg3OTksOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZFdpdGhPcHRpb25hbAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoT3B0aW9uYWxVbmlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAgICAgYXV0byBvYmplY3RPck5vZGUg
PSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gdHJ1ZSA6IGNvbnZlcnQ8SURMVW5p
b248SURMRE9NU3RyaW5nLCBJRExCb29sZWFuPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MC52YWx1ZSgpKTsKQEAgLTgxNzksNiArODgxNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlv
bmFsCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVybG9h
ZFdpdGhPcHRpb25hbFVuaW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExMb25nPigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODE5NCw2ICs4ODMz
LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRXaXRoT3B0aW9uYWwKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
VU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2Jh
bE9iamVjdCwgIlRlc3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRXaXRo
T3B0aW9uYWxVbmlvbiIpOwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+
KDEsIGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDAp
IHsKICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkV2l0aE9wdGlvbmFsVW5pb24xQm9keShsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUsIGNhc3RlZFRoaXMpKSk7CkBAIC04MjIyLDYgKzg4NjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6b3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRl
ciIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJl
U3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MCk7CiAgICAgYXV0byBvYmogPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0
T2JqPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAw
LCAib2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlz
aGluZ1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwpAQCAtODI0MCw2ICs4ODgzLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRXaXRoTnVsbGFibGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6Om92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIi
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0
aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJmYWNlPFRlc3RO
b2RlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAw
LCAibm9kZSIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vp
c2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5vZGUiKTsgfSk7CkBAIC04MjU4LDYgKzg5MDMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25PdmVybG9hZFdpdGhOdWxsYWJsZQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdE9iajo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZFdpdGhOdWxsYWJs
ZU5vbkRpc3Rpbmd1aXNoaW5nUGFyYW1ldGVyIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0
ZDo6bWluPHNpemVfdD4oMiwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChh
cmdzQ291bnQgPT0gMikgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTgyODEsNiArODkyOCw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9u
Q2xhc3NNZXRob2RCb2R5KEpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjbGFzc01ldGhvZCIpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIFRl
c3RPYmo6OmNsYXNzTWV0aG9kKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTgyOTcsNiArODk0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoT3B0CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjbGFzc01ldGhvZFdp
dGhPcHRpb25hbCIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8gYXJnID0gYXJndW1lbnQwLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25n
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtODMxNCw2ICs4
OTY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZDJCb2R5KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kMiIpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iajo6Y2xhc3NNZXRob2Qy
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lKSkpKTsKIH0KIApAQCAtODMyOSw2ICs4
OTgyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgRW5zdXJlU3Rp
bGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBh
cmd1bWVudDAudmFsdWUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTgzNDYsNiArOTAwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1l
dGhvZDEyCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpvdmVy
bG9hZGVkTWV0aG9kMSIpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gdHlwZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBA
IC04MzY0LDYgKzkwMjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxTwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5j
dGlvbk92ZXJsb2FkZWRNZXRob2QxIik7CiAgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwogICAgIGlmIChhcmdzQ291
bnQgPT0gMSkgewogICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKQEAgLTgzOTEsNiArOTA1MCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0
aG9kV2l0aENsYW1wCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
OjpjbGFzc01ldGhvZFdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCkpOwpAQCAtODQxNiw2ICs5MDc3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXAKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aENs
YW1wT25PcHRpb25hbCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJndW1l
bnQoMCk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8SURMQ2xhbXBBZGFwdG9yPElE
TExvbmc+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtODQz
Niw2ICs5MDk5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZSIp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODQ2MSw2ICs5MTI2LDgg
QEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uQ2xhc3NNZXRob2RXaXRoRW5mb3IKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9i
amVjdCwgIlRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZU9uT3B0aW9uYWwiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgIGF1dG8g
b2JqQXJnc0xvbmcgPSBjb252ZXJ0PElETEVuZm9yY2VSYW5nZUFkYXB0b3I8SURMTG9uZz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CkBAIC04NDgxLDYgKzkxNDgs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdE9iajo6bWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NTAzLDYgKzkxNzIsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
dHJpbmdBcnJheUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6c3RyaW5nQXJyYXlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCkpOwpAQCAtODUyMyw2ICs5MTk0LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRG9tU3RyaW5nTGlzdEZ1bmN0aW8K
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmRvbVN0cmluZ0xp
c3RGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODU0
Myw2ICs5MjE2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uT3BlcmF0aW9uV2l0aE9wdGlvbmEKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhPcHRpb25hbFVuaW9uUGFy
YW1ldGVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsK
ICAgICBhdXRvIG9wdGlvbmFsVW5pb24gPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8Q29udmVydGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8
SURMVW5yZXN0cmljdGVkRG91YmxlPj4+OjpSZXR1cm5UeXBlPigpIDogT3B0aW9uYWw8Q29udmVy
dGVyPElETFVuaW9uPElETERPTVN0cmluZywgSURMU2VxdWVuY2U8SURMVW5yZXN0cmljdGVkRG91
YmxlPj4+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETFVuaW9uPElETERPTVN0cmluZywgSURMU2Vx
dWVuY2U8SURMVW5yZXN0cmljdGVkRG91YmxlPj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1
bWVudDAudmFsdWUoKSkpOwpAQCAtODU2Myw2ICs5MjM4LDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdp
dGhvdXQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6Om1ldGhv
ZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZSIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCkpOwpAQCAtODU4OCw2ICs5MjY1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0RWxlbWVudEJ5SWRCb2R5
KEoKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7Cisg
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3Rh
dGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmdldEVsZW1l
bnRCeUlkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBp
ZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NjA4LDYg
KzkyODcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudEJvZHkoSgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Z2V0U1ZHRG9jdW1lbnQiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHRG9jdW1lbnQ+PigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3Bl
LCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbXBsLmdldFNWR0RvY3VtZW50KCkpKSkpOwogfQpAQCAtODYyMyw2ICs5MzA0LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29udmVydDFCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNvbnZlcnQxIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC04NjQ1LDYgKzkzMjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db252ZXJ0MkJvZHkoSlNDOjpKUwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29udmVydDIiKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg2NjcsNiArOTM1Miw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNv
bnZlcnQzQm9keShKU0M6OkpTCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJU
ZXN0T2JqOjpjb252ZXJ0MyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpA
QCAtODY4OSw2ICs5Mzc2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDRCb2R5KEpTQzo6SlMKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbnZlcnQ0Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04NzExLDYgKzk0MDAsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NdXRhYmxl
UG9pbnRGdW5jdGlvbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6bXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExJbnRlcmZhY2U8U1ZHUG9pbnQ+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm11dGFibGVQb2ludEZ1bmN0aW9uKCkp
KSk7CiB9CkBAIC04NzI2LDYgKzk0MTcsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcmFuZ2VCb2R5KEpTQzo6SlNHbAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YmFuYW5hIik7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICBpbXBsLmJhbmFuYSgpOwpAQCAtODc0Myw2ICs5NDM2LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFk
aWNTdHJpbmdNZXRob2QKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnZhcmlhZGljU3RyaW5nTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSk7CkBAIC04NzY3LDYgKzk0NjIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZAogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dmFyaWFkaWNEb3VibGVN
ZXRob2QiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg3OTEsNiAr
OTQ4OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljTm9kZU1ldGhvZEJvCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0T2JqOjp2YXJpYWRpY05vZGVNZXRob2QiKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTg4MTUsNiArOTUxNCw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGlj
VW5pb25NZXRob2RCCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojp2YXJpYWRpY1VuaW9uTWV0aG9kIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0
KSk7CkBAIC04ODM5LDYgKzk1NDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnlCb2R5KEpTQzo6SlNHbG9iYQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YW55Iik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04ODY0LDYgKzk1NjcsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJv
bWlzZUZ1bmN0aW9uQgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9i
ajo6dGVzdFByb21pc2VGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC50ZXN0UHJvbWlz
ZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwpAQCAtODg4MSw2ICs5NTg2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudCIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtODkwMyw2ICs5NjEwLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFBy
b21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRXhjZXB0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24oV1RGTW92ZShwcm9taXNlKSkpOwpAQCAt
ODkyMCw2ICs5NjI5LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvblcKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkg
CisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0
aW9uYWxJbnRBcmd1bWVudCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhID0gYXJndW1lbnQwLnZhbHVlKCkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IE9wdGlvbmFsPENv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oY29udmVydDxJRExMb25nPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpKTsKQEAgLTg5NDAsNiArOTY1MSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFy
Z3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgYXV0byBhID0g
Y29udmVydDxJRExGbG9hdD4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgp
KTsKQEAgLTg5NTUsNiArOTY2OCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlT3ZlcmxvYWRlCiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFi
bGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNz
ZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UHJvbWlzZU92ZXJsb2Fk
ZWRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCk7CiAgICAgYXV0byByZXF1ZXN0ID0gY29udmVydDxJRExJbnRlcmZhY2U8RmV0
Y2hSZXF1ZXN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwpAQCAtODk3MCw2ICs5Njg1LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVz
dFByb21pc2VPdmVybG9hZGUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RPYmo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVybG9hZGVkRnVu
Y3Rpb24iKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90PigxLCBjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7CiAgICAg
ICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOwpAQCAtODk5Myw2ICs5NzEwLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljUHJvbWlzZUYKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RTdGF0aWNQcm9t
aXNlRnVuY3Rpb24iKTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBUZXN0T2JqOjp0
ZXN0U3RhdGljUHJvbWlzZUZ1bmN0aW9uKFdURk1vdmUocHJvbWlzZSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05MDA5LDYgKzk3MjgsOCBAQCBzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
blRlc3RTdGF0aWNQcm9taXNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFS
QU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdE9iajo6dGVzdFN0YXRpY1Byb21pc2VGdW5jdGlvbldpdGhFeGNlcHRpb24iKTsKICAgICB0
aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFRlc3RPYmo6OnRlc3RTdGF0aWNQcm9taXNlRnVuY3Rpb25X
aXRoRXhjZXB0aW9uKFdURk1vdmUocHJvbWlzZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTAyNSw2ICs5NzQ2LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdEN1c3RvbVBy
b21pc2VGdW4KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRl
c3RDdXN0b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUHJvbWlzZUZ1bmN0
aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCBXVEZNb3ZlKHByb21pc2UpKSkp
KTsKIH0KIApAQCAtOTAzOSw2ICs5NzYyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25UZXN0U3RhdGljQ3VzdG9tUHIKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RTdGF0aWNDdXN0
b21Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmo6OnRlc3RTdGF0aWNDdXN0b21Qcm9taXNlRnVuY3Rp
b24oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIFdURk1vdmUocHJvbWlzZSkpKSkp
OwogfQogCkBAIC05MDUzLDYgKzk3NzgsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0Q3VzdG9tUmV0dXJuc093bgogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdEN1c3RvbVJldHVy
bnNPd25Qcm9taXNlRnVuY3Rpb24iKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29w
ZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50ZXN0Q3VzdG9tUmV0dXJuc093blByb21p
c2VGdW5jdGlvbigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSkpKSk7CiB9CiAKQEAg
LTkwNjcsNiArOTc5NCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RSZXR1cm5zT3duUHJvbWlzCiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjp0ZXN0UmV0dXJuc093blByb21pc2VBbmRQ
cm9taXNlUHJveHlGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETFByb21pc2U8SURMVm9pZD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdFJldHVybnNPd25Qcm9taXNlQW5kUHJvbWlz
ZVByb3h5RnVuY3Rpb24oKSkpKTsKIH0KQEAgLTkwODMsNiArOTgxMiw4IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlv
bmFsT3ZlcmxvYWQxCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxs
RnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2Jq
Ojpjb25kaXRpb25hbE92ZXJsb2FkIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBhdXRvIHN0ciA9IGNvbnZlcnQ8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTEwMSw2
ICs5ODMyLDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAg
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29w
ZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8g
YSA9IGNvbnZlcnQ8SURMTG9uZz4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1
ZSgpKTsKQEAgLTkxMjAsNiArOTg1Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWRPCiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBzaXplX3QgYXJnc0NvdW50ID0g
c3RkOjptaW48c2l6ZV90PigxLCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSk7CiAgICAgaWYg
KGFyZ3NDb3VudCA9PSAxKSB7CiAgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwpAQCAtOTE0Nyw2ICs5ODgyLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2luZ2xlQ29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RPYmo6OnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVu
dDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGF1dG8gc3RyID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CkBAIC05MTYzLDYgKzk5MDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZQogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZCIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgYXV0byBhID0gY29udmVydDxJRExMb25nPigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgYXJndW1lbnQwLnZhbHVlKCkpOwpAQCAtOTE4MCw2ICs5OTE5LDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xl
Q29uZGl0aW9uYWxPdmUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RP
Ymo6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIp
OwogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpKTsKICAgICBpZiAoYXJnc0NvdW50ID09IDEpIHsKICAgICAgICAgSlNW
YWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CkBAIC05MjAzLDYgKzk5NDQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290Qm9keQogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6YXR0YWNoU2hhZG93Um9vdCIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtOTIyNSw2ICs5OTY4LDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uT3BlcmF0aW9uV2l0aEV4dGVybmEKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6Om9wZXJhdGlvbldpdGhFeHRlcm5hbERpY3Rpb25hcnlQYXJhbWV0ZXIiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNDcsNiArOTk5Miw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbkJ1ZmZlclNvdXJjZVBhcmFtZXRlCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNF
RF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0T2JqOjpidWZmZXJTb3VyY2VQYXJhbWV0ZXIiKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QpKTsKQEAgLTkyNjksNiArMTAwMTYsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25MZWdhY3lDYWxsZXJO
YW1lZEJvZAogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6bGVn
YWN5Q2FsbGVyTmFtZWQiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTkyOTEsNiArMTAwNDAsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UmV0dXJuVmFsdWVPcHRpbQogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgp
KSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJ
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6dGVzdFJldHVyblZhbHVlT3B0aW1pemF0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAo
VU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC05MzE2LDYgKzEw
MDY3LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVGVzdFJldHVyblZhbHVlT3B0aW0KICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RPYmo6OnRlc3RSZXR1cm5WYWx1ZU9wdGltaXphdGlvbldpdGhFeGNl
cHRpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTkzNDEsNiAr
MTAwOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db25kaXRpb25hbGx5RXhwb3NlZAogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6Y29uZGl0aW9uYWxseUV4cG9zZWRUb1dpbmRvd0Z1bmN0
aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dG
dW5jdGlvbigpOwpAQCAtOTM1OCw2ICsxMDExMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsbHlFeHBvc2Vk
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T2JqOjpjb25kaXRpb25h
bGx5RXhwb3NlZFRvV29ya2VyRnVuY3Rpb24iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIGltcGwuY29uZGl0
aW9uYWxseUV4cG9zZWRUb1dvcmtlckZ1bmN0aW9uKCk7CkBAIC05Mzc1LDYgKzEwMTMyLDggQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uQ29uZGl0aW9uYWxseUV4cG9zZWQKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VE
X1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RPYmo6OmNvbmRpdGlvbmFsbHlFeHBvc2VkVG9XaW5kb3dBbmRXb3JrZXJGdW5jdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgdGhyb3dT
Y29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5jb25kaXRpb25hbGx5RXhwb3NlZFRvV2luZG93QW5k
V29ya2VyRnVuY3Rpb24oKTsKQEAgLTkzOTIsNiArMTAxNTEsOCBAQCBzdGF0aWMgaW5saW5lIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZ0JvZHko
SlNDOjpKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1l
KTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
UElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdE9iajo6c3Ry
aW5naWZpZXJBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExVU1ZTdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBpbXBsLnN0cmluZ2lmaWVy
QXR0cmlidXRlKCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
LmNwcAppbmRleCA0YjRiYTczODNmYjkwNWYyZTM3OTkzYWI5OTMwYTFmMDUxMGU2M2YyLi45ZWVh
Yjg3NGJlNjQ3MDg3NzY2MTQ3NzdiZDcxMjY0ODQ0YTBhNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9u
YWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPcGVyYXRpb25Db25kaXRpb25hbC5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTIwNyw2
ICsyMDksOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T3BlcmF0
aW9uQ29uZGl0aW9uYWxQcm90b3R5cGVGdW5jdGlvbk5vbgogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsOjpub25Db25kaXRpb25hbE9w
ZXJhdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
dGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgaW1wbC5ub25Db25kaXRpb25hbE9wZXJhdGlvbigp
OwpAQCAtMjI3LDYgKzIzMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPcGVyYXRpb25Db25kaXRpb25hbFByb3RvdHlwZUZ1bmN0aW9uQ29uCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWw6OmNvbmRp
dGlvbmFsT3BlcmF0aW9uIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3BlcmF0
aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKaW5kZXggM2QwNzkzMjBm
NDk0NjVhOTY5YTY4ZGY0ZGQ1NTFjOGFjNDIzNzI3YS4uZjdkMGFhOWU3OGM5ODNkNTIzYTI0MmNj
ZWU1YmFmNjE4ZjI0NDIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcApA
QCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBl
Lmg+CkBAIC0yNDQsNiArMjQ2LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXQKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RPdmVycmlkZUJ1aWx0aW5zOjpuYW1lZEl0
ZW0iKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChV
TkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RQcm9taXNlUmVqZWN0
aW9uRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKaW5kZXggMzI0NDNmNTI2YmU0M2IyNDUzOThk
NDAwNzI1OGI2MjZjNzhmNmM0Mi4uODgxMzZjOGVjMzU0YWM4YTgwYjE3MTBlOWE5YmM1NThhZmU4
NWU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5jcHAKQEAg
LTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SGVhcEFuYWx5emVyLmg+CkBAIC0yODMsNiArMjg1LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFByb21pc2VHZXR0ZXIoSlNHbG9iYWxPYmplY3Qm
IGwKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NF
bmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNj
ZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dDo6cHJvbWlzZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMUHJvbWlzZTxJRExBbnk+
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dT
Y29wZSwgaW1wbC5wcm9taXNlKCkpKSk7CiB9CkBAIC0yOTYsNiArMzAwLDggQEAgc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdFByb21pc2VSZWplY3Rpb25FdmVudFJlYXNvbkdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGUKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQ
SVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudDo6cmVhc29uIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3Jh
cHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExBbnk+
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwucmVhc29uKCkpKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXphdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKaW5kZXggOGM1OTE3YTM2MWJmNGNiYWRiNzBlZjgz
NGNjMzRmNjEwYjcxNmY0Zi4uZWU3ZGYyNDQyZGY0ODYyNzg5NjIwOWY4ZTNiNGFhOTViODhkZGJi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uLmNwcApAQCAtMzksNiArMzksOCBAQAogI2lu
Y2x1ZGUgIkpTVGVzdEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6YXRpb25J
bmRpcmVjdEluaGVyaXRhbmNlLmgiCiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTI0MSw2ICsyNDMsOCBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkZpcnN0U3RyaW5nQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFs
aXphdGlvbjo6Zmlyc3RTdHJpbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETERPTVN0cmluZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5maXJz
dFN0cmluZ0F0dHJpYnV0ZSgpKSkpOwogfQpAQCAtMjU0LDYgKzI1OCw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRmlyc3RTdHJpbmdBdHRyaWJ1dGVTZXR0ZXIo
SlNHbG9iYWxPYmplCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0
aW9uOjpzZXRGaXJzdFN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTI3Miw2ICsyNzgsOCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXphdGlvblNlY29uZExvbmdBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9i
YWxPYmplYwogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlz
dGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5s
b2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6
c2Vjb25kTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5zZWNvbmRMb25nQXR0cmlidXRl
KCkpKSk7CiB9CkBAIC0yODUsNiArMjkzLDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dFNlcmlhbGl6YXRpb25TZWNvbmRMb25nQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqZWMKIHsK
ICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldFNlY29uZExv
bmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzAzLDYgKzMxMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0
aW9uVGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZUdldHRlcihKU0dsCiB7CiAgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNh
bEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjp0aGlyZFVuc2VyaWFsaXphYmxlQXR0
cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExJbnRlcmZhY2U8VGVzdEV4Y2Vw
dGlvbj4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLnRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGUoKSkpKTsKIH0KQEAg
LTMxNiw2ICszMjgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlv
blRoaXJkVW5zZXJpYWxpemFibGVBdHRyaWJ1dGVTZXR0ZXIoSlNHbAogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0VGhpcmRVbnNlcmlhbGl6YWJsZUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdEV4Y2VwdGlvbj4+KGxl
eGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiVGVzdFNlcmlhbGl6YXRpb24iLCAi
dGhpcmRVbnNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0RXhjZXB0aW9uIik7IH0pOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzM0LDYgKzM0OCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRm91cnRoVW5yZXN0
cmljdGVkRG91YmxlQXR0cmlidXRlR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpmb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRyaWJ1dGUiKTsK
ICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFVucmVzdHJpY3RlZERvdWJsZT4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5mb3VydGhVbnJlc3RyaWN0ZWREb3VibGVBdHRy
aWJ1dGUoKSkpKTsKIH0KQEAgLTM0Nyw2ICszNjMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0
SlNUZXN0U2VyaWFsaXphdGlvbkZvdXJ0aFVucmVzdHJpY3RlZERvdWJsZUF0dHJpYnV0ZVNldHRl
cgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0Vu
YWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nl
c3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0Rm91
cnRoVW5yZXN0cmljdGVkRG91YmxlQXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVucmVz
dHJpY3RlZERvdWJsZT4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtMzY1LDYgKzM4Myw4IEBAIHN0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uRmlmdGhMb25nQXR0cmlidXRlR2V0
dGVyKEpTR2xvYmFsT2JqZWN0CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJp
YWxpemF0aW9uOjpmaWZ0aExvbmdBdHRyaWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pT
PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuZmlmdGhMb25n
QXR0cmlidXRlKCkpKSk7CiB9CkBAIC0zNzgsNiArMzk4LDggQEAgc3RhdGljIGlubGluZSBib29s
IHNldEpTVGVzdFNlcmlhbGl6YXRpb25GaWZ0aExvbmdBdHRyaWJ1dGVTZXR0ZXIoSlNHbG9iYWxP
YmplY3QKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3Rp
Y3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9n
QWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNl
dEZpZnRoTG9uZ0F0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0zOTYsNiArNDE4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6YXRpb25TaXh0aFR5cGVkZWZBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYWxPYmoKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNpeHRoVHlwZWRlZkF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMRG91YmxlPihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnNpeHRoVHlwZWRlZkF0dHJpYnV0ZSgpKSkpOwog
fQpAQCAtNDA5LDYgKzQzMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxp
emF0aW9uU2l4dGhUeXBlZGVmQXR0cmlidXRlU2V0dGVyKEpTR2xvYmFsT2JqCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uOjpzZXRTaXh0aFR5cGVkZWZBdHRy
aWJ1dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00
MjcsNiArNDUzLDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25T
ZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWJ1dGVHZXQKIHsKICAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmpl
Y3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuc2V2ZW50aERpcmVjdGx5U2VyaWFs
aXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC00NDAsNiArNDY4LDggQEAgc3RhdGljIGlubGlu
ZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25TZXZlbnRoRGlyZWN0bHlTZXJpYWxpemFibGVB
dHRyaWJ1dGVTZXQKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0
YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6YXRp
b246OnNldFNldmVudGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RTZXJpYWxpemF0aW9uIiwgInNldmVu
dGhEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYnV0ZSIsICJUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbCIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNl
KTsKQEAgLTQ1OCw2ICs0ODgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFs
aXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisg
ICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxl
eGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWlnaHRoSW5kaXJlY3RseUF0
dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBS
RUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RTZXJp
YWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmVpZ2h0aEluZGlyZWN0bHlB
dHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTQ3MSw2ICs1MDMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXphdGlvbkVpZ2h0aEluZGlyZWN0bHlBdHRyaWJ1dGVTZXR0ZXIoSlNH
bG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGlj
c0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dB
Y2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6c2V0
RWlnaHRoSW5kaXJlY3RseUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExJbnRlcmZhY2U8
VGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlPj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUsIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJlaWdodGhJbmRpcmVjdGx5
QXR0cmlidXRlIiwgIlRlc3RTZXJpYWxpemF0aW9uSW5kaXJlY3RJbmhlcml0YW5jZSIpOyB9KTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTQ4OSw2ICs1
MjMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbk5pbnRoT3B0
aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJsZUF0dHJpYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmpl
Y3QsICJUZXN0U2VyaWFsaXphdGlvbjo6bmludGhPcHRpb25hbERpcmVjdGx5U2VyaWFsaXphYmxl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwubmludGhPcHRp
b25hbERpcmVjdGx5U2VyaWFsaXphYmxlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MDIsNiArNTM4
LDggQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25OaW50aE9wdGlv
bmFsRGlyZWN0bHlTZXJpYWxpemFibGVBdHRyaWIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb246OnNldE5pbnRoT3B0aW9uYWxEaXJlY3RseVNlcmlhbGl6YWJs
ZUF0dHJpYnV0ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVz
dFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUs
IFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpIHsgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsICJUZXN0U2VyaWFsaXphdGlvbiIsICJuaW50aE9wdGlvbmFsRGlyZWN0bHlTZXJp
YWxpemFibGVBdHRyaWJ1dGUiLCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWwiKTsgfSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC01MjAsNiAr
NTU4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25UZW50aEZy
b3plbkFycmF5QXR0cmlidXRlR2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6
Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFNlcmlhbGl6YXRpb246OnRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETEZyb3plbkFycmF5PElETEJvb2xlYW4+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1w
bC50ZW50aEZyb3plbkFycmF5QXR0cmlidXRlKCkpKSk7CiB9CkBAIC01MzMsNiArNTczLDggQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25UZW50aEZyb3plbkFycmF5
QXR0cmlidXRlU2V0dGVyKEpTR2xvYmEKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFNlcmlhbGl6YXRpb246OnNldFRlbnRoRnJvemVuQXJyYXlBdHRyaWJ1dGUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRnJvemVuQXJyYXk8SURMQm9vbGVhbj4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTU1
MSw2ICs1OTMsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlvbkVs
ZXZlbnRoU2VxdWVuY2VBdHRyaWJ1dGVHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6ZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VxdWVuY2U8SURMRE9NU3RyaW5nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUs
IGltcGwuZWxldmVudGhTZXF1ZW5jZUF0dHJpYnV0ZSgpKSkpOwogfQpAQCAtNTY0LDYgKzYwOCw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemF0aW9uRWxldmVudGhTZXF1
ZW5jZUF0dHJpYnV0ZVNldHRlcihKU0dsb2JhCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemF0aW9uOjpzZXRFbGV2ZW50aFNlcXVlbmNlQXR0cmlidXRlIik7CiAgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAg
LTU4Miw2ICs2MjgsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXphdGlv
blR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZUdldHRlcgogewogICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbjo6dHdlbGZ0aEludGVyZmFjZVNlcXVlbmNl
QXR0cmlidXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAg
IFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExTZXF1ZW5jZTxJRExJbnRl
cmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVj
dCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwudHdlbGZ0aElu
dGVyZmFjZVNlcXVlbmNlQXR0cmlidXRlKCkpKSk7CiB9CkBAIC01OTUsNiArNjQzLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Ud2VsZnRoSW50ZXJmYWNlU2Vx
dWVuY2VBdHRyaWJ1dGVTZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNl
cmlhbGl6YXRpb246OnNldFR3ZWxmdGhJbnRlcmZhY2VTZXF1ZW5jZUF0dHJpYnV0ZSIpOwogICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8VGVzdFNlcmlhbGl6YXRpb25Jbmhl
cml0RmluYWw+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0
aW9uSW5oZXJpdC5jcHAKaW5kZXggY2EwZWVmMTM1NWUyNDdhMDA4NzY3MjJkODcwZjNlMGU2OTE3
Mjc4OC4uZjE0ZWViMmI3NDEyMzZjYjFkMGVjODg2OGFjYzVlN2QxOTk5ZDUwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAt
MTkwLDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9u
SW5oZXJpdEluaGVyaXRMb25nQXR0cmlidXRlR2V0dGVyKEpTR2xvCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDo6aW5oZXJpdExvbmdBdHRyaWJ1
dGUiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuaW5oZXJpdExvbmdBdHRyaWJ1dGUoKSkpKTsKIH0KQEAgLTIw
Myw2ICsyMDcsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbklu
aGVyaXRJbmhlcml0TG9uZ0F0dHJpYnV0ZVNldHRlcihKU0dsbwogewogICAgIGF1dG8mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9i
YWxPYmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXQ6OnNldEluaGVyaXRMb25nQXR0cmli
dXRlIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emF0aW9uSW5oZXJpdEZpbmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsLmNwcAppbmRleCAzMmFmYzM2
YmM3MzhmNzlkMzAyYTY3YzJjOTcxZmY4YWEyYzVhZDc2Li4zODNjNDNhODNkY2Q4MzA5ODBjODEy
MWE0YzBjMjI5NjZlMjExNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRp
b25Jbmhlcml0RmluYWwuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAi
SlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgor
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgpAQCAtMTkzLDYgKzE5NSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsRmluYWxM
b25nQXR0cmlidXRlRm9vR2V0dGVyCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
ZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFsOjpmaW5hbExvbmdBdHRyaWJ1dGVGb28iKTsKICAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHRocm93U2NvcGUsICh0b0pTPElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2Nv
cGUsIGltcGwuZmluYWxMb25nQXR0cmlidXRlRm9vKCkpKSk7CiB9CkBAIC0yMDYsNiArMjEwLDgg
QEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWxG
aW5hbExvbmdBdHRyaWJ1dGVGb29TZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OnNldEZpbmFsTG9uZ0F0dHJpYnV0ZUZvbyIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExMb25nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMjQsNiArMjMw
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0Rmlu
YWxGaW5hbExvbmdBdHRyaWJ1dGVCYXJHZXR0ZXIKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw6OmZpbmFsTG9uZ0F0dHJpYnV0ZUJhciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgaW1wbC5maW5hbExvbmdBdHRyaWJ1dGVCYXIoKSkpKTsKIH0KQEAgLTIzNyw2
ICsyNDUsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXphdGlvbkluaGVy
aXRGaW5hbEZpbmFsTG9uZ0F0dHJpYnV0ZUJhclNldHRlcgogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5hbDo6c2V0RmluYWxMb25nQXR0cmli
dXRlQmFyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETExvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZh
bHVlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
aW5kZXggYzE1NTY3ZTI0NjMxMjkzNDNkMTkwYjVhYTQ1NDE1NmViODQ2MDEzNC4uNGJlZTJjZGFh
ZjQ4MmZiNWY4MmE5YWFmZTk1MzMyODVhOGYwYzEyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTM3LDYgKzM3LDgg
QEAKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0yMTcsNiArMjE5
LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlR2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmFsdWUiKTsKICAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwg
dGhyb3dTY29wZSwgaW1wbC52YWx1ZSgpKSkpOwogfQpAQCAtMjMwLDYgKzIzNCw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1
ZVNldHRlcihKU0dsb2JhbE9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldFZhbHVlIik7CiAgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBm
YWxzZSk7CkBAIC0yNDgsNiArMjU0LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoSlMKIHsKICAg
ICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkp
IAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElz
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6cmVhZG9ubHlWYWx1ZSIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQo
KTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+KGxleGljYWxHbG9iYWxPYmplY3Qs
ICp0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLnJlYWRvbmx5VmFs
dWUoKSkpKTsKIH0KQEAgLTI2MSw2ICsyNjksOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoSlNHbAog
ewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpjYWNoZWRWYWx1ZSIpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhp
c09iamVjdC5tX2NhY2hlZFZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMjc5LDYgKzI4OSw4
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRWYWx1ZVNldHRlcihKU0dsCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNldENhY2hlZFZhbHVlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yOTcsNiArMzA5LDggQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEpT
R2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRp
c3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
bG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6cG9ydHMiKTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETFNl
cXVlbmNlPElETEludGVyZmFjZTxNZXNzYWdlUG9ydD4+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSwgdGhyb3dTY29wZSwgaW1wbC5wb3J0cygpKSkpOwog
fQpAQCAtMzEwLDYgKzMyNCw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNh
Y2hlZFJlYWRvbmx5VmFsdWUiKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNP
YmplY3QubV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQogICAgICAgICByZXR1cm4gY2FjaGVk
VmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwpAQCAtMzMwLDYg
KzM0Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwog
ICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxH
bG9iYWxPYmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5jdGlv
biIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVO
TElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtMzUyLDYgKzM3MCw4
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpmdW5jdGlvblJldHVy
bmluZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PigqbGV4aWNhbEdsb2JhbE9i
amVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmZ1bmN0aW9uUmV0dXJuaW5n
KCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyLmNwcAppbmRleCAxNTEzZmQ4ZmFkNmViMjNi
YzVhZmRiZmU5MjVmNjFjZmM4NDNlODQ3Li43Y2QwMGEyNWY5YTJiNGY1MWIzZmRlNGNjNTEyN2Zk
YmJkMDEzMGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllci5jcHAKQEAgLTI5LDYgKzI5LDggQEAK
ICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVy
YXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlND
bGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KQEAgLTE5MCw2ICsxOTIsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0U3RyaW5naWZpZXJQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nQm9keQogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxl
ZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2Vk
QVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyOjp0b1N0cmluZyIpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGltcGwudG9TdHJpbmcoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFu
b255bW91c09wZXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb24uY3BwCmluZGV4IGQwMTdk
ZmI0OTY3MWU3ZDdmMGIwYjU5MzMwYmU4NzYwNjMxNTg0NWEuLjU0Y2ZiZjc5NjNjOTY3MjM1YmQ5
NWNhNzZjM2RhZTA2MDVkZGQzNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uLmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTkw
LDYgKzE5Miw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJp
bmdpZmllckFub255bW91c09wZXJhdGlvblByb3RvdHlwZUZ1CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5naWZpZXJBbm9ueW1vdXNPcGVyYXRpb246OnRvU3Ry
aW5nIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmlu
Z2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb24uY3BwCmluZGV4IDNmNjI4
NzYzOWY0MjhiODMwY2JmNDNlMzE2NjA2ZmU4OTZlZjE2NzcuLjUyZmNiNWYxMmQ2NzExNzEwNGEx
ZmQwYzVhYjk3Yjk5MWYyNmRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZp
ZXJOYW1lZE9wZXJhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZpZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIwNyw2ICsyMTEs
OCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJO
YW1lZE9wZXJhdGlvblByb3RvdHlwZUZ1bmN0aQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBV
TlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb246OmlkZW50aWZpZXIiKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JF
VFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9w
ZXJhdGlvbkltcGxlbWVudGVkQXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKaW5k
ZXggYjg2ZjEyZjkxNzUzOWMyZDUzOWQ1MDljOWFhODQ4NDJmOWZhMjZhMy4uMDg2NTI5N2U4OWQ5
NzRhNjFlYWJlOGNiNjhiMDljYTkyNDFlMDA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVtZW50ZWRBcy5jcHAKQEAgLTI5LDYgKzI5
LDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNE
T01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJD
b3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90
b3R5cGUuaD4KQEAgLTE5Miw2ICsxOTQsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzUHJvdG90eQogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNz
RW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0Fj
Y2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
SW1wbGVtZW50ZWRBczo6YWx0ZXJuYXRlSWRlbnRpZmllciIpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUs
IEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGltcGwuYWx0ZXJuYXRlSWRlbnRpZmllcigpKSkpOwogfQpAQCAtMjA3LDYgKzIxMSw4IEBAIHN0
YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllck9wZXJhdGlv
bkltcGxlbWVudGVkQXNQcm90b3R5CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9Q
QVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3Qs
ICJUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzOjphbHRlcm5hdGVJZGVudGlm
aWVyIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxF
QVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3Ry
aW5nPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgaW1wbC5hbHRlcm5hdGVJZGVudGlmaWVyKCkpKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5h
bWVkVG9TdHJpbmcuY3BwCmluZGV4IDY2NmUzNTY3ZWQ0OTg2Mzc2YmM3ZGZhZTRkNGQyZGFjYTli
MDBiNzIuLjE5ZThlNmU3MWFjYmM1ODM4MjBhY2I5YjMzMmRiODc5YzU2ZDRlNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdp
Zmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJp
bmcuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVy
Q2FjaGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CkBAIC0xOTAsNiArMTkyLDggQEAgc3RhdGljIGlu
bGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uTmFtZWRU
b1N0cmluZ1Byb3RvdHkKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNh
bGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RT
dHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmc6OnRvU3RyaW5nIik7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgaW1wbC50b1N0cmluZygpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGUuY3BwCmluZGV4IGM1MDM3ZWYzNTFiOTU2MWZi
MGMwN2YwYjM1YWJmMGRlMTAxMDc3MGMuLmU1NTM0NjE1OGUxNDgzY2FkMzZmZDVkNjYxMmZjNjE3
ZThiODhiZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U3RyaW5naWZpZXJSZWFkT25s
eUF0dHJpYnV0ZS5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKICNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KQEAgLTE5Niw2ICsxOTgsOCBAQCBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUlk
ZW50aWZpZXJHZXR0ZXIoSlNHbG9iYQogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0
U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMSw2ICsyMTUsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0
ZVByb3RvdHlwZUZ1bgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFN0
cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU6OmlkZW50aWZpZXIiKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBKU1ZhbHVlOjplbmNvZGUodG9KUzxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGUuY3BwCmluZGV4IDkwMDI5YmNlNjM4NjJlN2Nm
M2I4NzhmMzM5NjBiM2Q2MGYzZmY5YTQuLmNjZDFjMmViMjBlZDNkMjExYWU4ZjljNWExNjEyNjI1
ZTg2Y2U0YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKKyNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgpAQCAtMTk3LDYgKzE5OSw4IEBA
IHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0
ZUlkZW50aWZpZXJHZXR0ZXIoSlNHbG9iCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhy
b3dTY29wZSwgKHRvSlM8SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Nj
b3BlLCBpbXBsLmlkZW50aWZpZXIoKSkpKTsKIH0KQEAgLTIxMCw2ICsyMTQsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc2V0SlNUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVJZGVudGlm
aWVyU2V0dGVyKEpTR2xvYgogewogICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0U3RyaW5n
aWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGU6OnNldElkZW50aWZpZXIiKTsKICAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0yMzAsNiArMjM2LDggQEAgc3RhdGlj
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0
cmlidXRlUHJvdG90eXBlRnUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFN
KGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZTo6aWRlbnRpZmllciIpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERPTVN0cmluZz4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGltcGwuaWRlbnRpZmllcigpKSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5k
ZXggMWQ2ODlkMjllYTAyOWI2YzZlNDcxN2JhMjFlYzZjOTgyMDUzNmI3NS4uZTMxNTI0ZjEzYjZl
ZTgxNTBmMGFkZmZjZjY1MjAyZjQ1NjRmNDQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC00
NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJKU1Rlc3RFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRh
LmgiCkBAIC0zMDYsNiArMzA4LDggQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVk
ZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGwKIHsKICAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAor
ICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjp1bnNpZ25lZExvbmdMb25nQXR0ciIp
OwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEds
b2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKSkpOwog
fQpAQCAtMzE5LDYgKzMyMyw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsCiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIi
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpA
QCAtMzM3LDYgKzM0Myw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihKU0dsb2JhbE9iamVjdCYKIHsKICAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpzZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHRocm93U2NvcGUsICh0b0pTPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCAqdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSwgdGhyb3dTY29wZSwgaW1wbC5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkpKTsKIH0KQEAg
LTM1MCw2ICszNTgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTZXJp
YWxpemVkU2NyaXB0VmFsdWVTZXR0ZXIoSlNHbG9iYWxPYmplY3QmCiB7CiAgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEds
b2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC0zNjcsNiArMzc3LDggQEAgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
VGVzdFN1Yk9iakdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsK
ICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQo
KSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQ
SXMoJmxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OlRlc3RTdWJPYmoiKTsKICAg
ICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7CiB9CiAKQEAgLTM3OSw2
ICszOTEsOCBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyaWJ1dGVX
aXRoQ2xhbXBHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleAogewogICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMoJmxleGljYWxHbG9iYWxP
YmplY3QsICJUZXN0VHlwZWRlZnM6OmF0dHJpYnV0ZVdpdGhDbGFtcCIpOwogICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKHRvSlM8SURMQ2xhbXBBZGFwdG9yPElETFVuc2lnbmVkTG9uZ0xvbmc+PihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmF0dHJpYnV0ZVdpdGhDbGFtcCgpKSkpOwog
fQpAQCAtMzkyLDYgKzQwNiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJpYnV0ZVdpdGhDbGFtcFNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4CiB7CiAgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAg
ICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4
aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0QXR0cmlidXRlV2l0aENsYW1wIik7
CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETENsYW1wQWRhcHRvcjxJRExVbnNpZ25lZExvbmdMb25nPj4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZmFsc2UpOwpAQCAtNDEwLDYgKzQyNiw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHJpYnV0ZVdpdGhDbGFtcEluVHlwZWRlZkdldHRlcihKU0dsb2JhbE9i
CiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5h
YmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vz
c2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6YXR0cmlidXRlV2l0
aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgp
OwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExDbGFtcEFkYXB0
b3I8SURMTG9uZz4+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGltcGwuYXR0cmli
dXRlV2l0aENsYW1wSW5UeXBlZGVmKCkpKSk7CiB9CkBAIC00MjMsNiArNDQxLDggQEAgc3RhdGlj
IGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cmlidXRlV2l0aENsYW1wSW5UeXBlZGVm
U2V0dGVyKEpTR2xvYmFsT2IKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5cGVk
ZWZzOjpzZXRBdHRyaWJ1dGVXaXRoQ2xhbXBJblR5cGVkZWYiKTsKICAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
Q2xhbXBBZGFwdG9yPElETExvbmc+PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CkBAIC00NDEsNiArNDYxLDgg
QEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQnVmZmVyU291cmNlQXR0ckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAi
VGVzdFR5cGVkZWZzOjpidWZmZXJTb3VyY2VBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3Qud3JhcHBlZCgpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAodG9K
UzxJRExVbmlvbjxJRExBcnJheUJ1ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEds
b2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwu
YnVmZmVyU291cmNlQXR0cigpKSkpOwogfQpAQCAtNDU0LDYgKzQ3Niw4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0J1ZmZlclNvdXJjZUF0dHJTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElT
dGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6
c2V0QnVmZmVyU291cmNlQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExVbmlvbjxJRExBcnJheUJ1
ZmZlclZpZXcsIElETEFycmF5QnVmZmVyPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwpAQCAtNDcyLDYgKzQ5
Niw4IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0RvbVRpbWVTdGFtcEF0
dHJHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgIlRlc3RUeXBlZGVmczo6ZG9tVGltZVN0YW1wQXR0ciIpOwogICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwg
KHRvSlM8SURMVW5zaWduZWRMb25nTG9uZz4obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSwgaW1wbC5kb21UaW1lU3RhbXBBdHRyKCkpKSk7CiB9CkBAIC00ODUsNiArNTExLDggQEAgc3Rh
dGljIGlubGluZSBib29sIHNldEpTVGVzdFR5cGVkZWZzRG9tVGltZVN0YW1wQXR0clNldHRlcihK
U0dsb2JhbE9iamVjdCYgbGV4aWMKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5
cGVkZWZzOjpzZXREb21UaW1lU3RhbXBBdHRyIik7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3Qud3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETFVuc2lnbmVk
TG9uZ0xvbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKQEAgLTUwNSw2ICs1MzMsOCBAQCBzdGF0aWMgaW5s
aW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1
bmNCb2R5KEpTQzo6SgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0oY2Fs
bEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVzdFR5
cGVkZWZzOjpmdW5jIik7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKICAgICBhdXRvIHggPSBhcmd1bWVudDAudmFsdWUoKS5pc1VuZGVmaW5lZCgpID8gQ29u
dmVydGVyPElETFNlcXVlbmNlPElETExvbmc+Pjo6UmV0dXJuVHlwZXsgfSA6IGNvbnZlcnQ8SURM
U2VxdWVuY2U8SURMTG9uZz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUo
KSk7CkBAIC01MjUsNiArNTU1LDggQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3dCb2R5KEoKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJs
ZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3Nl
ZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6c2V0U2hhZG93Iik7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFko
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NTksNiArNTkxLDggQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoU2VxdWUKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwg
IlRlc3RUeXBlZGVmczo6bWV0aG9kV2l0aFNlcXVlbmNlQXJnIik7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0KSk7CkBAIC01NzksNiArNjEzLDggQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNl
cXVlbmMKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVmczo6
bnVsbGFibGVTZXF1ZW5jZUFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjAxLDYgKzYzNyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2VxdWVuY2VPZk51bGxhCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnNlcXVlbmNlT2ZOdWxsYWJs
ZXNBcmciKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTYyMyw2ICs2
NjEsOCBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQ
cm90b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZOdWxsYWJsZXNBcmci
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY0NSw2ICs2ODUsOCBA
QCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5
cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuYwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAiVGVzdFR5cGVkZWZzOjpudWxsYWJsZVNlcXVlbmNlT2ZVbmlvbnNBcmciKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VMWShjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTY2Nyw2ICs3MDksOCBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blVuaW9uQXJnQm9keShKUwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
Y2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0LCAiVGVz
dFR5cGVkZWZzOjp1bmlvbkFyZyIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCkp
OwpAQCAtNjg5LDYgKzczMyw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcEJvCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVk
KCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRB
UElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OmZ1bmNXaXRoQ2xhbXAiKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTcxNCw2ICs3NjAsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvbkZ1bmNXaXRoQ2xhbXBJbgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpmdW5jV2l0aENsYW1wSW5UeXBlZGVmIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC03MzYsNiArNzg0LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25Qb2ludEZ1
bmN0aW9uQm8KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVm
czo6cG9pbnRGdW5jdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0
b0pTPElETEludGVyZmFjZTxTVkdQb2ludD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9pbnRGdW5jdGlvbigpKSkpOwogfQpAQCAtNzUx
LDYgKzgwMSw4IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAg
ICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGlj
YWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRlZnM6OnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24iKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGlmIChVTkxJS0VM
WShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAgLTc3MSw2ICs4MjMsOCBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNQcm90b3R5cGVG
dW5jdGlvblN0cmluZ1NlcXVlbmNlRgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURf
UEFSQU0oY2FsbEZyYW1lKTsKKyAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKSAKKyAgICAgICAgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0FjY2Vzc2VkQVBJcyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCAiVGVzdFR5cGVkZWZzOjpzdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMiIpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwpAQCAtNzkxLDYgKzg0NSw4IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdp
dGhTZXF1ZW5jCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJBTShjYWxsRnJh
bWUpOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpIAorICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkKCkubG9nQWNjZXNzZWRBUElzKGxleGljYWxHbG9iYWxPYmplY3QsICJUZXN0VHlwZWRl
ZnM6OmNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlIik7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC04MTEsNiArODY3LDggQEAgc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXAKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFt
ZSk7CisgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkgCisgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dBY2Nlc3NlZEFQSXMobGV4aWNhbEdsb2JhbE9iamVjdCwgIlRlc3RUeXBlZGVm
czo6bWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLm1ldGhvZFdpdGhFeGNl
cHRpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDQxYzlmZWM2MWUyOGJhYzM4N2NjYzdi
OWIzM2Y1ZmQwZDhmMzQxZTIuLmQzMDAyYzVjOTBkNzUwZjY1YWU4ZThiMTc3YTU1MTBmZTk4MzY1
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC02MzMsNyArNjMzLDExIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyQVhPYmplY3RDYWNoZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8UGFnZUlkZW50aWZpZXI+IHBhZ2VJRCgpIGNvbnN0OworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBm
cmFtZUlEKCkgY29uc3Q7CisjZWxzZQogICAgIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJh
bWVJRCgpIGNvbnN0OworI2VuZGlmCiAKICAgICAvLyB0byBnZXQgdmlzdWFsbHkgb3JkZXJlZCBo
ZWJyZXcgYW5kIGFyYWJpYyBwYWdlcyByaWdodAogICAgIHZvaWQgc2V0VmlzdWFsbHlPcmRlcmVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRXhlY3V0aW9uU3RhY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MmQ1YWQ4MmU2ODljODNmMGU4M2QzN2JiN2EzYjE5MjQ2MjhjNGQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0YWNrLmNwcApAQCAtMCwwICsxLDgy
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZiBF
TkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRXhlY3V0aW9uU3RhY2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgRXhl
Y3V0aW9uU3RhY2s6OnRvSlNPTlN0cmluZyh1aW50NjRfdCBmcmFtZUlEKQoreworICAgIGlmIChk
b2N1bWVudElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgPT0gZG9jdW1lbnRJZFVSTE1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICBhdXRvIGRvY3VtZW50VVJMID0gZG9jdW1l
bnRJZFVSTE1hcC5nZXQoZnJhbWVJRCk7CisKKyAgICBhdXRvIG9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgb2JqZWN0LT5zZXRTdHJpbmcoIlRvcExldmVsRG9tYWluIiwgcmVn
aXN0cmFibGVEb21haW4uc3RyaW5nKCkpOworICAgIG9iamVjdC0+c2V0U3RyaW5nKCJUb3BMZXZl
bFVSTCIsIGRvY3VtZW50VVJMLnN0cmluZygpKTsKKyAgICBvYmplY3QtPnNldEludGVnZXIoIkZy
YW1lSUQiLCBmcmFtZUlEKTsKKyAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbiA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKKyAgICAKKyAgICBpZiAoYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRz
LmZpbmQoZnJhbWVJRCkgPT0gYXBpc0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7
CisgICAgICAgIG9iamVjdC0+c2V0QXJyYXkoIlNjcmlwdEV4ZWN1dGlvbiIsIFdURk1vdmUoc2Ny
aXB0RXhlY3V0aW9uKSk7CisgICAgICAgIHJldHVybiBvYmplY3QtPnRvSlNPTlN0cmluZygpOwor
ICAgIH0KKyAgICAKKyAgICBhdXRvIGFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50ID0gYXBp
c0NhbGxlZEJ5U2NyaXB0c0luRG9jdW1lbnRzLmdldChmcmFtZUlEKTsKKyAgICAKKyAgICBmb3Ig
KGF1dG8gc2NyaXB0V2l0aEFQSXNLZXkgOiBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudC5r
ZXlzKCkpIHsKKyAgICAgICAgYXV0byBzY3JpcHRXaXRoQVBJcyA9IGFwaXNDYWxsZWRCeVNjcmlw
dHNJbkRvY3VtZW50LmdldChzY3JpcHRXaXRoQVBJc0tleSk7CisgICAgICAgIGF1dG8gYWNjZXNz
ZWRBUElzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBmb3IgKGF1dG8gY29uc3Qm
IEFQSU5hbWUgOiBzY3JpcHRXaXRoQVBJcykgeworICAgICAgICAgICAgYXV0byB0ZW1wID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHRlbXAtPnNldEludGVnZXIoQVBJTmFt
ZS5rZXksIEFQSU5hbWUudmFsdWUpOworICAgICAgICAgICAgYWNjZXNzZWRBUElzLT5wdXNoT2Jq
ZWN0KFdURk1vdmUodGVtcCkpOworICAgICAgICB9CisgICAgICAgIGF1dG8gYXBpRXhlY3V0aW9u
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXBpRXhlY3V0aW9uLT5zZXRJbnRl
Z2VyKCJTY3JpcHRJRCIsIHNjcmlwdFdpdGhBUElzS2V5KTsKKyAgICAgICAgCisgICAgICAgIGlm
IChkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXAuZmluZChmcmFtZUlEKSA9PSBkb2N1bWVudElk
QW5kU2NyaXB0SWRVUkxNYXAuZW5kKCkpCisgICAgICAgICAgICBhcGlFeGVjdXRpb24tPnNldFN0
cmluZygiU2NyaXB0VVJMIiwgIlVuYXZhaWxhYmxlIik7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzID0gZG9jdW1lbnRJZEFuZFNjcmlw
dElkVVJMTWFwLmdldChmcmFtZUlEKTsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLmZpbmQoc2NyaXB0V2l0aEFQSXNLZXkpID09IGRvY3VtZW50SWRBbmRTY3JpcHRJ
ZFVSTHMuZW5kKCkpCisgICAgICAgICAgICAgICAgYXBpRXhlY3V0aW9uLT5zZXRTdHJpbmcoIlNj
cmlwdFVSTCIsICJVbmF2YWlsYWJsZSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGFwaUV4ZWN1dGlvbi0+c2V0U3RyaW5nKCJTY3JpcHRVUkwiLCBkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLmdldChzY3JpcHRXaXRoQVBJc0tleSkpOworICAgICAgICB9CisgICAgICAgIGFw
aUV4ZWN1dGlvbi0+c2V0QXJyYXkoIkFjY2Vzc2VkQVBJcyIsIFdURk1vdmUoYWNjZXNzZWRBUElz
KSk7CisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbi0+cHVzaE9iamVjdChXVEZNb3ZlKGFwaUV4ZWN1
dGlvbikpOworICAgIH0KKyAgICAKKyAgICBvYmplY3QtPnNldEFycmF5KCJTY3JpcHRFeGVjdXRp
b24iLCBXVEZNb3ZlKHNjcmlwdEV4ZWN1dGlvbikpOworICAgIHJldHVybiBvYmplY3QtPnRvSlNP
TlN0cmluZygpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9FeGVjdXRpb25TdGFjay5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0V4ZWN1dGlvblN0
YWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjFhNzAxNmU5ZTkyNGY2NmFmMjMwM2VjNTIzOWZkZTUxYTYzMmQ4
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FeGVjdXRpb25TdGFj
ay5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJl
IG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNT
KQorI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
RXhlY3V0aW9uU3RhY2sgeworICAgIGV4cGxpY2l0IEV4ZWN1dGlvblN0YWNrKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCisgICAgICAgIDogcmVnaXN0cmFibGVEb21haW4geyBkb21h
aW4gfQorICAgIHsKKyAgICB9CisKKyAgICBFeGVjdXRpb25TdGFjaygpID0gZGVmYXVsdDsKKyAg
ICBFeGVjdXRpb25TdGFjayhjb25zdCBFeGVjdXRpb25TdGFjayYpID0gZGVsZXRlOworICAgIEV4
ZWN1dGlvblN0YWNrJiBvcGVyYXRvcj0oY29uc3QgRXhlY3V0aW9uU3RhY2smKSA9IGRlbGV0ZTsK
KyAgICBFeGVjdXRpb25TdGFjayhFeGVjdXRpb25TdGFjayYmKSA9IGRlZmF1bHQ7CisgICAgRXhl
Y3V0aW9uU3RhY2smIG9wZXJhdG9yPShFeGVjdXRpb25TdGFjayYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9KU09OU3RyaW5nKHVpbnQ2NF90IC8qIEZyYW1lSUQg
Ki8pOworCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW47CisKKyAgICAv
LyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIHRoZSBtYXBwaW5nIGJldHdlZW4gRnJhbWVJRCBhbmQg
RG9jdW1lbnQgVVJMLgorICAgIEhhc2hNYXA8dWludDY0X3QsIFVSTD4gZG9jdW1lbnRJZFVSTE1h
cDsKKyAgICAKKyAgICAvLyBUaGlzIEhhc2hNYXAgbWFpbnRhaW5zIGEgc3RhY2sgb2YgZXhlY3V0
aW5nIHNjcmlwdHMgaW4gZWFjaCBkb2N1bWVudC4KKyAgICAvLyBDdXJyZW50bHksIGl0IG9ubHkg
Y2FwdHVyZXMgY2xhc3NpYyBzY3JpcHRzLgorICAgIEhhc2hNYXA8dWludDY0X3QsIFZlY3Rvcjx1
aW50NjRfdD4+IGV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50czsKKyAgICAKKyAgICAvLyBUaGlz
IEhhc2hNYXAgbWFpbnRhaW5zIHRoZSBtYXBwaW5nIGJldHdlZW4gRnJhbWVJRCwgU2NyaXB0SUQs
IGFuZCBTY3JpcHQgVVJMcy4KKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNoTWFwPHVpbnQ2NF90
LCBTdHJpbmc+PiBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxNYXA7CisgICAgCisgICAgLy8gVGhp
cyBIYXNoTWFwIG1haW50YWlucyB0aGUgQVBJcyBjYWxsZWQgYnkgYSBzY3JpcHQgaW4gYSBkb2N1
bWVudC4KKyAgICAvLyBIYXNoTWFwPEZyYW1lSUQsIEhhc2hNYXA8U2NyaXB0SUQsIEhhc2hDb3Vu
dGVkU2V0PENvdW50T2ZBUElOYW1lcz4+PgorICAgIEhhc2hNYXA8dWludDY0X3QsIEhhc2hNYXA8
dWludDY0X3QsIEhhc2hDb3VudGVkU2V0PFN0cmluZz4+PiBhcGlzQ2FsbGVkQnlTY3JpcHRzSW5E
b2N1bWVudHM7Cit9OworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZE9ic2VydmVyLmgKaW5kZXggNjdmYmZmYzJkMjBhYjJmZDhiYTU2YThkZmE0ZDRhZTc4
YTk1ZWIyMC4uYzg5NzM2OWU0M2NlYTBkOTRhYmFiMzcyMzZhZWI4YjJhZGU5YWZmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogCkBAIC01Nyw2ICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxvZ1Nj
cmVlbkFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6U2NyZWVuQVBJKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VMb2Fk
aW5nRm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgLyogZmlyc3RQYXJ0eURvbWFp
biAqLywgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIC8qIHRoaXJkUGFydHlEb21haW4gKi8sIGJv
b2wgLyogc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb24gKi8pIHsgfQogCisgICAgdmlydHVhbCB2
b2lkIHB1c2hBY3RpdmVTY3JpcHQoY29uc3QgRG9jdW1lbnQmLCBjb25zdCB1aW50NjRfdCAvKiBz
Y3JpcHRJRCAqLywgY29uc3QgU3RyaW5nJiAvKiBzY3JpcHRVUkwgKi8pIHsgfQorICAgIHZpcnR1
YWwgT3B0aW9uYWw8dWludDY0X3Q+IHBvcEFjdGl2ZVNjcmlwdChjb25zdCBEb2N1bWVudCYpIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIE9wdGlvbmFsPHVpbnQ2NF90PiBwZWVrQWN0aXZlU2Ny
aXB0KGNvbnN0IERvY3VtZW50JikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgT3B0aW9uYWw8
U3RyaW5nPiBwZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29uc3QgRG9jdW1lbnQmKSB7IHJldHVy
biB7IH07IH0KKworICAgIHZpcnR1YWwgdm9pZCBsb2dBY2Nlc3NlZEFQSXMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYgLyogYXBpTmFtZSAqLykgeyB9CisgICAgdmlydHVhbCBP
cHRpb25hbDxTdHJpbmc+IHBlZWtBY2Nlc3NlZEFQSXMoY29uc3QgRG9jdW1lbnQmKSB7IHJldHVy
biB7IH07IH0KKwogICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoY29uc3QgVVJM
JikgeyByZXR1cm4geyB9OyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNlbnRyYWxTdGF0aXN0
aWNzU3RvcmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTdGF0ZSgpIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKaW5kZXggZTIzYzc5MTcyYTU4OWI3ZTY4N2U3
MGE4NjBiNDg1ZWJlZTRmYzRkYy4uZTYzOTNjZTQ2MWQ4ZDg0YWJlOTEwZTcxYmY5NWIyMDZiNDk5
ZjA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC05OCw2ICs5
OCwxNyBAQCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsK
IH0KIAorI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCitFeGVjdXRpb25TdGFjayYgV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVE
b21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVCghaXNFcGhlbWVyYWwoKSk7CisKKyAgICByZXR1cm4gbV9leGVjdXRpb25TdGFja01hcC5l
bnN1cmUoZG9tYWluLCBbJmRvbWFpbl0geworICAgICAgICByZXR1cm4gRXhlY3V0aW9uU3RhY2so
ZG9tYWluKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7Cit9CisjZW5kaWYKKwogdm9pZCBXZWJS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCiB7CiAg
ICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKSkgewpAQCAtMjYxLDYgKzI3
MiwxOTUgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU2NyZWVuQVBJQWNjZXNz
ZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb24KICNlbmRpZgogfQogCit2b2lkIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpwdXNoQWN0aXZlU2NyaXB0KGNvbnN0IERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgdWludDY0X3Qgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgc2NyaXB0VVJMKQor
eworICAgIGlmIChpc0VwaGVtZXJhbCgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorCisgICAgYXV0byBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJ
RCgpLT50b1VJbnQ2NCgpIH07CisgICAgYXV0byYgZXhlY3V0aW9uU3RhY2sgPSBlbnN1cmVFeGVj
dXRpb25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1l
bnQudXJsKCkgfSk7CisgICAgCisgICAgLy8gUmVnaXN0ZXIgc2NyaXB0IGlkIHdpdGggc2NyaXB0
IHVybCBmb3IgZWFjaCBmcmFtZS4KKyAgICBpZiAoZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJZEFu
ZFNjcmlwdElkVVJMTWFwLmZpbmQoZnJhbWVJRCkgIT0gZXhlY3V0aW9uU3RhY2suZG9jdW1lbnRJ
ZEFuZFNjcmlwdElkVVJMTWFwLmVuZCgpKSB7CisgICAgICAgIGF1dG8gZG9jdW1lbnRJZEFuZFNj
cmlwdElkVVJMcyA9IGV4ZWN1dGlvblN0YWNrLmRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTE1hcC5m
aW5kKGZyYW1lSUQpOworICAgICAgICAvLyBXZSB1c2UgSGFzaE1hcC5hZGQoKSBoZXJlIGJlY2F1
c2UgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzY3JpcHQgVVJMIGlzIG5vbmUgKGluIGNhc2Ugb2Yg
bWljcm90YXNrcykuCisgICAgICAgIC8vIEhhc2hNYXAuYWRkKCkgd2lsbCBlbnN1cmUgdGhhdCB0
aGUgZXhpc2l0bmcgc2NyaXB0IFVSTCBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisgICAgICAg
IGRvY3VtZW50SWRBbmRTY3JpcHRJZFVSTHMtPnZhbHVlLmFkZChzY3JpcHRJRCwgc2NyaXB0VVJM
KTsKKyAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgU3Ry
aW5nPiBkb2N1bWVudElkQW5kU2NyaXB0SWRVUkxzOworICAgICAgICBkb2N1bWVudElkQW5kU2Ny
aXB0SWRVUkxzLnNldChzY3JpcHRJRCwgc2NyaXB0VVJMKTsKKyAgICAgICAgZXhlY3V0aW9uU3Rh
Y2suZG9jdW1lbnRJZEFuZFNjcmlwdElkVVJMTWFwLnNldChmcmFtZUlELCBXVEZNb3ZlKGRvY3Vt
ZW50SWRBbmRTY3JpcHRJZFVSTHMpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGV4ZWN1dGlvblN0
YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpICE9IGV4ZWN1dGlv
blN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICBhdXRv
IGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yID0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5n
U2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCk7CisgICAgICAgIGV4ZWN1dGluZ1Njcmlw
dHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc2NyaXB0SUQpOworCisgICAgfSBlbHNlIHsK
KyAgICAgICAgCisgICAgICAgIFZlY3Rvcjx1aW50NjRfdD4gZXhlY3V0aW5nU2NyaXB0c1N0YWNr
OworICAgICAgICBleGVjdXRpbmdTY3JpcHRzU3RhY2suYXBwZW5kKHNjcmlwdElEKTsKKyAgICAg
ICAgZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLnNldChmcmFtZUlE
LCBXVEZNb3ZlKGV4ZWN1dGluZ1NjcmlwdHNTdGFjaykpOworICAgICAgICAKKyAgICAgICAgZXhl
Y3V0aW9uU3RhY2suZG9jdW1lbnRJZFVSTE1hcC5zZXQoZnJhbWVJRCwgZG9jdW1lbnQudXJsKCkp
OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURf
UEFSQU0oc2NyaXB0SUQpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHRVUkwpOworI2VuZGlmCit9
CisKK09wdGlvbmFsPHVpbnQ2NF90PiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cG9wQWN0aXZl
U2NyaXB0KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwo
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NU
QVRJU1RJQ1MpCisgICAgYXV0byBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2
NCgpIH07CisKKyAgICBhdXRvJiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNr
Rm9yUmVnaXN0cmFibGVEb21haW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9
KTsKKyAgICBpZiAoZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZp
bmQoZnJhbWVJRCkgIT0gZXhlY3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRz
LmVuZCgpKSB7CisgICAgICAgIGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3IgPSBl
eGVjdXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKTsK
KworICAgICAgICBpZiAoIWV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5pc0Vt
cHR5KCkpIHsKKworICAgICAgICAgICAgYXV0byBzY3JpcHRJRCA9IGV4ZWN1dGluZ1NjcmlwdHNT
dGFja0l0ZXJhdG9yLT52YWx1ZS5sYXN0KCk7CisKKyAgICAgICAgICAgIGlmIChleGVjdXRpbmdT
Y3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGV4
ZWN1dGlvblN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5yZW1vdmUoZnJhbWVJRCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhlY3V0aW5nU2NyaXB0c1N0YWNr
SXRlcmF0b3ItPnZhbHVlLnJlbW92ZUxhc3QoKTsKKworICAgICAgICAgICAgcmV0dXJuIHNjcmlw
dElEOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQp
OworI2VuZGlmCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8dWludDY0
X3Q+IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVrQWN0aXZlU2NyaXB0KGNvbnN0IERvY3Vt
ZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgYXV0
byBmcmFtZUlEIHsgZG9jdW1lbnQuZnJhbWVJRCgpLT50b1VJbnQ2NCgpIH07CisKKyAgICBhdXRv
JiBleGVjdXRpb25TdGFjayA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21h
aW4oUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9KTsKKyAgICBpZiAoZXhlY3V0
aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmZpbmQoZnJhbWVJRCkgIT0gZXhl
Y3V0aW9uU3RhY2suZXhlY3V0aW5nU2NyaXB0c0luRG9jdW1lbnRzLmVuZCgpKSB7CisgICAgICAg
IGF1dG8gZXhlY3V0aW5nU2NyaXB0c1N0YWNrSXRlcmF0b3IgPSBleGVjdXRpb25TdGFjay5leGVj
dXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKTsKKyAgICAgICAgaWYgKCFleGVj
dXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvci0+dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIGV4ZWN1dGluZ1NjcmlwdHNTdGFja0l0ZXJhdG9yLT52YWx1ZS5sYXN0KCk7CisgICAg
fQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworI2VuZGlmCisgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKK30KKworT3B0aW9uYWw8U3RyaW5nPiBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6cGVla1NjcmlwdEV4ZWN1dGlvblN0YWNrKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
K3sKKyAgICBpZiAoaXNFcGhlbWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgUmVnaXN0cmFibGVEb21haW4g
cmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIGF1dG8mIGV4ZWN1dGlv
blN0YWNrID0gZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihyZWdpc3Ry
YWJsZURvbWFpbik7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJSZWdpc3RyYWJsZSBkb21haW46ICIpOworICAgIGJ1aWxkZXIuYXBwZW5k
KHJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGZvciAoYXV0byBrZXkgOiBleGVj
dXRpb25TdGFjay5leGVjdXRpbmdTY3JpcHRzSW5Eb2N1bWVudHMua2V5cygpKSB7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRnJhbWUgSUQ6ICIpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChTdHJpbmc6Om51bWJlcihrZXkpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgICAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTY3JpcHQgU3RhY2s6IFsi
KTsKKyAgICAgICAgYXV0byBleGVjdXRpbmdTY3JpcHRzU3RhY2tJdGVyYXRvciA9IGV4ZWN1dGlv
blN0YWNrLmV4ZWN1dGluZ1NjcmlwdHNJbkRvY3VtZW50cy5maW5kKGtleSk7CisKKyAgICAgICAg
Zm9yIChhdXRvIGNvbnN0JiBleGVjdXRpbmdTY3JpcHQgOiBleGVjdXRpbmdTY3JpcHRzU3RhY2tJ
dGVyYXRvci0+dmFsdWUpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVt
YmVyKGV4ZWN1dGluZ1NjcmlwdCkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgLCIpOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXSIpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG4iKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworI2VuZGlmCit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ0FjY2Vzc2VkQVBJcyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIGFwaU5hbWUpCit7CisgICAgaWYgKGlzRXBoZW1lcmFsKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IGF1dG8qIGNvbnRleHQgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxH
bG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgCisgICAgaWYgKCFV
TkxJS0VMWSghY29udGV4dCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmICghY29udGV4dC0+aXNE
b2N1bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpOworICAgICAgICBhdXRvIGFj
dGl2ZVNjcmlwdElEID0gcGVla0FjdGl2ZVNjcmlwdChkb2N1bWVudCk7CisKKyAgICAgICAgaWYg
KCFhY3RpdmVTY3JpcHRJRCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGZy
YW1lSUQgeyBkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkgfTsKKyAgICAgICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZUV4ZWN1dGlvblN0YWNrRm9yUmVnaXN0cmFibGVEb21haW4oUmVn
aXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9KTsKKworICAgICAgICBpZiAoc3RhdGlz
dGljcy5hcGlzQ2FsbGVkQnlTY3JpcHRzSW5Eb2N1bWVudHMuZmluZChmcmFtZUlEKSAhPSBzdGF0
aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5lbmQoKSkgeworICAgICAgICAg
ICAgYXV0byBkb2N1bWVudFdpdGhTY3JpcHRzSXRlcmF0b3IgPSBzdGF0aXN0aWNzLmFwaXNDYWxs
ZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5maW5kKGZyYW1lSUQpOworCisgICAgICAgICAgICBpZiAo
ZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5maW5kKCphY3RpdmVTY3JpcHRJRCkg
IT0gZG9jdW1lbnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5lbmQoKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gc2NyaXB0c1dpdGhBUElzSXRlcmF0b3IgPSBkb2N1bWVudFdpdGhTY3JpcHRz
SXRlcmF0b3ItPnZhbHVlLmZpbmQoKmFjdGl2ZVNjcmlwdElEKTsKKyAgICAgICAgICAgICAgICBz
Y3JpcHRzV2l0aEFQSXNJdGVyYXRvci0+dmFsdWUuYWRkKGFwaU5hbWUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IGFwaXM7Cisg
ICAgICAgICAgICAgICAgYXBpcy5hZGQoYXBpTmFtZSk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnRXaXRoU2NyaXB0c0l0ZXJhdG9yLT52YWx1ZS5zZXQoKmFjdGl2ZVNjcmlwdElELCBXVEZNb3Zl
KGFwaXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEhh
c2hNYXA8dWludDY0X3QsIEhhc2hDb3VudGVkU2V0PFN0cmluZz4+IGFwaXNFeGVjdXRpbmdJblNj
cmlwdDsKKyAgICAgICAgICAgIEhhc2hDb3VudGVkU2V0PFN0cmluZz4gYXBpczsKKyAgICAgICAg
ICAgIGFwaXMuYWRkKGFwaU5hbWUpOworCisgICAgICAgICAgICBhcGlzRXhlY3V0aW5nSW5TY3Jp
cHQuc2V0KCphY3RpdmVTY3JpcHRJRCwgV1RGTW92ZShhcGlzKSk7CisgICAgICAgICAgICBzdGF0
aXN0aWNzLmFwaXNDYWxsZWRCeVNjcmlwdHNJbkRvY3VtZW50cy5zZXQoZnJhbWVJRCwgYXBpc0V4
ZWN1dGluZ0luU2NyaXB0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShhcGlOYW1lKTsKKyNl
bmRpZgorfQorCitPcHRpb25hbDxTdHJpbmc+IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpwZWVr
QWNjZXNzZWRBUElzKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoaXNFcGhl
bWVyYWwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyNpZiBFTkFCTEUo
V0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVFeGVjdXRp
b25TdGFja0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQu
dXJsKCkgfSk7CisgICAgU3RyaW5nIEFQSUpTT05TdHJpbmcgPSBzdGF0aXN0aWNzLnRvSlNPTlN0
cmluZyhkb2N1bWVudC5mcmFtZUlEKCktPnRvVUludDY0KCkpOworICAgIHJldHVybiBBUElKU09O
U3RyaW5nOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOworICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisjZW5kaWYKK30KKwogdm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlLCBGZXRjaERlc3RpbmF0aW9uSXNTY3JpcHRMaWtlIGlzU2NyaXB0TGlrZSkKIHsKICAgICBp
ZiAoaXNFcGhlbWVyYWwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKaW5kZXgg
MTg2ZmFhMTNmNjg0MjRkMDIzZmZlNzRiYTk1NzQ4MDNmMjNkN2M4My4uOGEzOTE5MWViNjRjMjlm
ODQ4YzdlYjhmMjFjOTAyMWU5MzMzNDkzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2Vy
dmVyLmgKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
I2luY2x1ZGUgPFdlYkNvcmUvRXhlY3V0aW9uU3RhY2suaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKQEAgLTUyLDYgKzU2LDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSBmaW5hbDsKICAg
ICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZ0ZvclRlc3RpbmcoY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiB0aGlyZFBhcnR5RG9tYWluLCBib29sIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0
aW9uKTsKIAorICAgIHZvaWQgcHVzaEFjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3JlOjpEb2N1bWVu
dCYsIGNvbnN0IHVpbnQ2NF90IHNjcmlwdElELCBjb25zdCBTdHJpbmcmIHNjcmlwdFVSTCkgZmlu
YWw7CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHBvcEFjdGl2ZVNjcmlwdChjb25zdCBXZWJDb3Jl
OjpEb2N1bWVudCYpIGZpbmFsOworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBwZWVrQWN0aXZlU2Ny
aXB0KGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmluYWw7CisgICAgT3B0aW9uYWw8U3RyaW5n
PiBwZWVrU2NyaXB0RXhlY3V0aW9uU3RhY2soY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5h
bDsKKworICAgIHZvaWQgbG9nQWNjZXNzZWRBUElzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIGFwaU5hbWUpIGZpbmFsOworICAgIE9wdGlvbmFsPFN0cmluZz4gcGVla0FjY2Vz
c2VkQVBJcyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOworCiAjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9u
KGJvb2wpOwogI2VuZGlmCkBAIC03OCw2ICs5MCwxMSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwogICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0
cmFibGVEb21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9u
TWFwOwogCisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBXZWJDb3JlOjpFeGVj
dXRpb25TdGFjayYgZW5zdXJlRXhlY3V0aW9uU3RhY2tGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4sIFdlYkNvcmU6OkV4ZWN1dGlvblN0YWNrPiBtX2V4ZWN1dGlvblN0YWNr
TWFwOworI2VuZGlmCisKICAgICBXZWJDb3JlOjpUaW1lciBtX25vdGlmaWNhdGlvblRpbWVyOwog
CiAgICAgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gbV9kb21haW5zV2l0aFVz
ZXJJbnRlcmFjdGlvbjsK
</data>
<flag name="review"
          id="421639"
          type_id="1"
          status="?"
          setter="uiqbal"
    />
          </attachment>
      

    </bug>

</bugzilla>