<?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>80030</bug_id>
          
          <creation_ts>2012-03-01 08:42:44 -0800</creation_ts>
          <short_desc>[GObject bindings] Supplemental interfaces are not disabled with the &quot;Conditional&quot; attribute</short_desc>
          <delta_ts>2012-03-23 15:10:44 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>81451</blocked>
    
    <blocked>82080</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pf</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>568689</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-01 08:42:44 -0800</bug_when>
    <thetext>This is a spin-off from bug #79375 that focuses on the titular problem in the GObject bindings only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568699</commentid>
    <comment_count>1</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-01 09:01:43 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #33)
&gt; &gt; 
&gt; &gt; &gt; If including config.h somewhere along the way is not feasible or practical, maybe we can do an exception for GObject and just check #if defined(ENABLE_XXXX) &amp;&amp; ENABLE_XXXX directly or define just the ENABLE macro somewhere appropriate?
&gt; &gt; 
&gt; &gt; One important consideration, which I hope does not complicate the matter terribly, is that the API should change as little as possible with different configuration flags. For instance, some distributions may compile WebKit with --disable-geolcation. Ideally, the GObject binding API should be the same in either case, even if the geolocation methods are stubs when disabled. The reason for this is that downstream applications need to be able to rely on certain API points being present to use them effectively.
&gt; 
&gt; Thing is, as I said in comment #8, that those API might have references to objects that are not generated. That&apos;s the case of geolocation for example. Maybe we could create empty objects but I&apos;m sure that people will start to complain about non working stuff.

This is a valid concern. Generating bindings for a feature that&apos;s not supported in Gtk port, regardless of that feature being enabled, doesn&apos;t really make sense and can backfire in the shape of confused users. Generating bindings unconditionally for features that are fully supported and are enabled by default in the Gtk port is not as radical, but again, it is possible that some distributions may ship the library with geolocation (or any other feature) support disabled, causing problems.

An alternative, as already mentioned, is to create new API for feature detection, an equivalent to the ENABLE macro, and use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585083</commentid>
    <comment_count>2</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-22 02:39:54 -0700</bug_when>
    <thetext>I&apos;ve tried to fix this in two different ways mentioned, here&apos;s what came out of each:

1) Creating stubs when the feature is not enabled

This seemed to work well, making changes mostly to the CodeGeneratorGObject script. Additionally, when a future is not enabled, warnings could be thrown, telling the feature is not enabled.

For compilation without geolocation support enabled, with this approach, it would also probably make sense to convert methods in WebKitGeolocationPolicyDecision to stubs when necessary.

Using this approach might work better if there&apos;s a decision to push this into the 1.8 branch. There&apos;s no new API additions.

2) Create and use ENABLE-like macro

This would require something like a WEBKIT_HAS_FEATURE macro to be added. This macro would then be used in public headers, while implementation files could use ENABLE macro.

One problem that immediately popped out was that when geolocation is disabled, the documentation could not be properly created - if the feature is disabled, the  gtkdoc tools complain of undefined references to this feature&apos;s methods. I don&apos;t know if this is a showstopper, but it would definitely cause inconvenience to distributions that would like to ship the library with the documented feature disabled.


I&apos;d like some consensus on what&apos;s the right approach so I can start working on a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585267</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-22 07:42:10 -0700</bug_when>
    <thetext>(In reply to comment #2)

&gt; 1) Creating stubs when the feature is not enabled
&gt; 
&gt; This seemed to work well, making changes mostly to the CodeGeneratorGObject script. Additionally, when a future is not enabled, warnings could be thrown, telling the feature is not enabled.
&gt; 
&gt; For compilation without geolocation support enabled, with this approach, it would also probably make sense to convert methods in WebKitGeolocationPolicyDecision to stubs when necessary.
&gt; 
&gt; Using this approach might work better if there&apos;s a decision to push this into the 1.8 branch. There&apos;s no new API additions.

Using stubs sounds like a great approach. We definitely want this for 1.8.\</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586327</commentid>
    <comment_count>4</comment_count>
      <attachid>133481</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 07:27:35 -0700</bug_when>
    <thetext>Created attachment 133481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586330</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 07:33:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=133481) [details]
&gt; Patch

Does some refactoring in the CodeGeneratorGObject.pm and creates proper stubs in case feature is not enabled at compile-time. Also fixes the build when geolocation support is disabled.

Forgot to test this with a WebKit2 build, will update the patch later if there will be need.

There are style issues with the generated test bindings, which were probably showing even before this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586340</commentid>
    <comment_count>6</comment_count>
      <attachid>133485</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 07:45:04 -0700</bug_when>
    <thetext>Created attachment 133485
Patch

Properly applies to the tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586343</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-23 07:49:08 -0700</bug_when>
    <thetext>Attachment 133485 did not pass style-queue:

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:77:  Extra space between return and WEBKIT_DOM_TEST_SERIALIZED_SCRIPT_VALUE_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:222:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:227:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:255:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:260:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:265:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:283:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:302:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:320:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:337:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:356:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:374:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:98:  Extra space between return and WEBKIT_DOM_TEST_OBJ  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:184:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:327:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:581:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:75:  Extra space between return and WEBKIT_DOM_FLOAT64ARRAY  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:162:  LoFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
cal variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:80:  Extra space between return and WEBKIT_DOM_TEST_CALLBACK  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:143:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_CUSTOM_NAMED_GETTER  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_EVENT_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:78:  Extra space between return and WEBKIT_DOM_TEST_EVENT_TARGET  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:191:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:204:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:79:  Extra space between return and WEBKIT_DOM_TEST_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:256:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:261:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:372:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:397:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:72:  Extra space between return and WEBKIT_DOM_TEST_ACTIVE_DOM_OBJECT  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:172:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_MEDIA_QUERY_LIST_LISTENER  [whitespace/declaration] [3]
Total errors found: 36 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586396</commentid>
    <comment_count>8</comment_count>
      <attachid>133485</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-23 09:20:31 -0700</bug_when>
    <thetext>Comment on attachment 133485
Patch

It&apos;s slightly hard for me to follow all of the changes to the code generator, but your approach seems reasonable and the generated files do look better.  Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586463</commentid>
    <comment_count>9</comment_count>
      <attachid>133485</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2012-03-23 10:23:50 -0700</bug_when>
    <thetext>Comment on attachment 133485
Patch

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

This looks generally OK, but all the changes in the geolocation policy decision code seem pretty much unrelated? I think they should go in a different bug &amp; patch, this is complicated enough to review as it is :) There also seems a couple of simple to fix style issues in the generated code that trigger warnings.

&gt; Source/WebCore/ChangeLog:18
&gt; +        but the root conditional feature is.

Yeah, this definitely makes sense.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1081
&gt; +                push(@cBody, &quot;    return NULL;\n&quot;);

NULL here?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1094
&gt;                  push(@cBody, &quot;    return NULL;\n&quot;);

And also here I suppose.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1231
&gt;                                                 &quot;core-object&quot;, coreObject, NULL));

We might as well fix this double space while we are at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586520</commentid>
    <comment_count>10</comment_count>
      <attachid>133485</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 11:26:22 -0700</bug_when>
    <thetext>Comment on attachment 133485
Patch

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

Very well, I&apos;ll put build fixes in WebKit part in bug #81451.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1081
&gt;&gt; +                push(@cBody, &quot;    return NULL;\n&quot;);
&gt; 
&gt; NULL here?

You probably meant 0 ... ?

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1094
&gt;&gt;                  push(@cBody, &quot;    return NULL;\n&quot;);
&gt; 
&gt; And also here I suppose.

Ditto?

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:1231
&gt;&gt;                                                 &quot;core-object&quot;, coreObject, NULL));
&gt; 
&gt; We might as well fix this double space while we are at it.

I&apos;ll also just put this into one line to avoid incorrect indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586536</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 11:32:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 133485 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133485&amp;action=review
&gt; 
&gt; Very well, I&apos;ll put build fixes in WebKit part in bug #81451.

I&apos;m working on a patch that fixes all the style errors in the DOM bindings now. So, if you like, I can handle this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586557</commentid>
    <comment_count>12</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 11:51:01 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 133485 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=133485&amp;action=review
&gt; &gt; 
&gt; &gt; Very well, I&apos;ll put build fixes in WebKit part in bug #81451.
&gt; 
&gt; I&apos;m working on a patch that fixes all the style errors in the DOM bindings now. So, if you like, I can handle this.

Okay, that&apos;d be great.

I&apos;ll be uploading a new patch with only changes to CodeGeneratorGObject.pm and rebaselines for the bindings tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586562</commentid>
    <comment_count>13</comment_count>
      <attachid>133527</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 11:52:52 -0700</bug_when>
    <thetext>Created attachment 133527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586565</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-23 11:58:07 -0700</bug_when>
    <thetext>Attachment 133527 did not pass style-queue:

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:77:  Extra space between return and WEBKIT_DOM_TEST_SERIALIZED_SCRIPT_VALUE_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:222:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:227:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:255:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:260:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:265:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:283:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:302:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:320:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:337:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:356:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:374:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:98:  Extra space between return and WEBKIT_DOM_TEST_OBJ  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:185:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:328:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:587:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:75:  Extra space between return and WEBKIT_DOM_FLOAT64ARRAY  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:162:  LoFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
cal variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:80:  Extra space between return and WEBKIT_DOM_TEST_CALLBACK  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:143:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_CUSTOM_NAMED_GETTER  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_EVENT_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:78:  Extra space between return and WEBKIT_DOM_TEST_EVENT_TARGET  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:191:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:204:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:79:  Extra space between return and WEBKIT_DOM_TEST_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:256:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:261:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:372:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:397:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:72:  Extra space between return and WEBKIT_DOM_TEST_ACTIVE_DOM_OBJECT  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:172:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_MEDIA_QUERY_LIST_LISTENER  [whitespace/declaration] [3]
Total errors found: 36 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586569</commentid>
    <comment_count>15</comment_count>
      <attachid>133527</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 12:00:39 -0700</bug_when>
    <thetext>Comment on attachment 133527
Patch

Urgh, still requires the warn define. Uploading new patch in a moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586619</commentid>
    <comment_count>16</comment_count>
      <attachid>133536</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 12:39:48 -0700</bug_when>
    <thetext>Created attachment 133536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586621</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-23 12:42:10 -0700</bug_when>
    <thetext>Attachment 133536 did not pass style-queue:

Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:77:  Extra space between return and WEBKIT_DOM_TEST_SERIALIZED_SCRIPT_VALUE_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:222:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:227:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:250:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:255:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:260:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:265:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:283:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:302:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:320:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:337:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:356:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:374:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:98:  Extra space between return and WEBKIT_DOM_TEST_OBJ  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:185:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:328:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:587:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:75:  Extra space between return and WEBKIT_DOM_FLOAT64ARRAY  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMFloat64Array.cpp:162:  LoFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
cal variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:80:  Extra space between return and WEBKIT_DOM_TEST_CALLBACK  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:143:  Declaration has space between type name and * in GObjectClass *gobjectClass  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_CUSTOM_NAMED_GETTER  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_EVENT_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:78:  Extra space between return and WEBKIT_DOM_TEST_EVENT_TARGET  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:191:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:204:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:79:  Extra space between return and WEBKIT_DOM_TEST_INTERFACE  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:256:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:261:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:372:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:397:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestNamedConstructor.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_NAMED_CONSTRUCTOR  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:72:  Extra space between return and WEBKIT_DOM_TEST_ACTIVE_DOM_OBJECT  [whitespace/declaration] [3]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.cpp:172:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:70:  Extra space between return and WEBKIT_DOM_TEST_MEDIA_QUERY_LIST_LISTENER  [whitespace/declaration] [3]
Total errors found: 36 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586624</commentid>
    <comment_count>18</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-03-23 12:43:53 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=133536) [details]
&gt; Patch

This should be complete now. Style issues are covered by bug #82080.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586767</commentid>
    <comment_count>19</comment_count>
      <attachid>133536</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 14:46:11 -0700</bug_when>
    <thetext>Comment on attachment 133536
Patch

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

I&apos;ll land this one.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:117
&gt; +sub HumanReadableConditional {

HumanReadableConditional -&gt; humanReadbleConditional?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:362
&gt; +sub GenerateConditionalWarn

GenerateConditionalWarn -&gt; generateConditionalWarning

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:368
&gt; +    if ($conditional) {

This probably deserves an early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586791</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-23 15:10:44 -0700</bug_when>
    <thetext>Committed r111914: &lt;http://trac.webkit.org/changeset/111914&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133481</attachid>
            <date>2012-03-23 07:27:35 -0700</date>
            <delta_ts>2012-03-23 07:44:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80030-20120323152734.patch</filename>
            <type>text/plain</type>
            <size>262691</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZiYjNkMTdhMWQ2YWNi
NmU0YzkzM2NmODUyMTRhOTJmMmVmZjFkMC4uMmJiNWY1ZjU5Y2VjZjdkYmVkYmRhNTBhNWQ0YWM1
ZTZjZDAxZDA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAxMi0wMy0yMyAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJp
bmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVkIHdpdGggdGhl
ICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW4gQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAg
ICAgIC0gZ3JvdXAgaW1wbGVtZW50YXRpb24gb2YgcHJpdmF0ZSBoZWxwZXJzIGFuZCBndWFyZCB0
aGVtIGluc2lkZQorICAgICAgICBhbiBpZmRlZiBpZiBhIHJvb3QgY29uZGl0aW9uYWwgYXR0cmli
dXRlIGlzIHByZXNlbnQuCisgICAgICAgIC0gYWx3YXlzIGRlZmluZSB0aGUgdHlwZSBvZiBhIEdP
YmplY3QgYmluZGluZywgZXZlbiBpZiB0aGUgcm9vdAorICAgICAgICBjb25kaXRpb25hbCBmZWF0
dXJlIGlzIG5vdCBlbmFibGVkCisgICAgICAgIC0gdGhlIG1ldGhvZHMgYXJlIGdlbmVyYXRlZCBh
cyB3ZWxsLCBidXQgYXJlIHNpbXBseSBzdHVicyBpZiB0aGUKKyAgICAgICAgZmVhdHVyZSBpcyBu
b3QgZW5hYmxlZCwgdGhyb3dpbmcgYSB3YXJuaW5nIHVwb24gaW50ZXJhY3Rpb24uCisgICAgICAg
IC0gaWYgdGhlIG1ldGhvZCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsIGF0dHJp
YnV0ZSwKKyAgICAgICAgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24gZ2FpbnMgb25lIG1vcmUgbGV2
ZWwgb2YgZGVwdGgsIHRocm93aW5nCisgICAgICAgIGEgd2FybmluZyBpZiB0aGUgbWV0aG9kJ3Mg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorICAgICAgICBidXQgdGhlIHJvb3Qg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcy4KKyAgICAgICAgLSBzbWFsbCBzdHlsZSBmaXhlcyBpbiBy
YW5kb20gcGxhY2VzLgorCisgICAgICAgIEFsc28gY2hhbmdlZCBhcmUgR09iamVjdCBiYXNlbGlu
ZXMgZm9yIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gbmV3IHRl
c3RhYmxlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG06CisgICAgICAgIChIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25kaXRpb25hbFdhcm4pOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0eSk6CisgICAg
ICAgIChHZW5lcmF0ZVByb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbik6Cisg
ICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5lcmF0ZUNGaWxlKToKKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZSk6Cisg
ICAgICAgIChXcml0ZURhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwRmxvYXQ2NEFycmF5KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9kb21fZmxvYXQ2NGFycmF5X2Zvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdl
YktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3QpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dFByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3Bh
cmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Ns
YXNzMXBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2NsYXNzMnBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxs
YmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Omtp
dCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZmluYWxpemUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3Ry
dWN0b3JfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVj
dG9yX2dldF9hdHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZ2V0X2F0dHIyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0RXZlbnRUYXJnZXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rh
cmdldF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0
ZW0pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChX
ZWJLaXQ6OndyYXBUZXN0SW50ZXJmYWNlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBw
bGVtZW50YWxfbWV0aG9kMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1
cHBsZW1lbnRhbF9tZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2Vi
S2l0Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2ZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdE9iaik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9k
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZCk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfb2JqX21ldGhvZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfc2VxdWVuY2VfYXJnKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9pZGJfa2V5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3Qp
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24pOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24p
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhj
ZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9v
YmpfZXhjZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29w
dGlvbmFsX2FyZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25v
bl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmlu
Z19pc19udWxsX3N0cmluZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9t
ZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9k
Myk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZCk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9jb252ZXJ0Mik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0NSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2Up
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24pOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cik6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cik6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2ludF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9h
dHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF94bWxfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29i
al9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cik6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Ym9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9ib29sZWFuX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3VybF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Y3VzdG9tX2ludGVncmFsX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0
cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0
dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dp
dGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9h
dHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRy
aWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV9hdHRyaWJ1dGUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhf
c3BhY2VzX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9h
dHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRy
MSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMik6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pbW11dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfaW1tdXRhYmxlX3BvaW50KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmljdF9mbG9hdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxv
YXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24pOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
alByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zl
cl9saXN0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRvbmx5X3Zh
bHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
Y2FjaGVkX3JlYWRvbmx5X3ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZS5oOgorCiAyMDEyLTAzLTIyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgTW92ZSBOb3RpZmljYXRpb25zIEFQSXMgZnJvbSBET01XaW5kb3cuaWRsIHRvIERPTVdp
bmRvd05vdGlmaWNhdGlvbnMuaWRsIChQYXJ0IDEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMGM0N2Iw
MjA1YWY5YmM2NDAxMDg1MDY2ODQ3OGQwMmQwZWFiNWYwNy4uMTg0ZTRiY2Y1N2M0NjU1NTJhNjlj
NTQ2NmZkMGI4Zjg1MWZkZWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisy
MDEyLTAzLTIzICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAg
ICAgW0dPYmplY3QgYmluZGluZ3NdIFN1cHBsZW1lbnRhbCBpbnRlcmZhY2VzIGFyZSBub3QgZGlz
YWJsZWQgd2l0aCB0aGUgIkNvbmRpdGlvbmFsIiBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMDMwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgcHJpdmF0ZSBtYWNybyB0aGF0IGNh
biBiZSB1c2VkIHdoZW4gbmVjZXNzYXJ5IHRvIHRocm93IGEgd2FybmluZworICAgICAgICBhYm91
dCBhIGZ1dHVyZSBub3QgZW5hYmxlZCBhdCBjb21waWxlLXRpbWUuCisKKyAgICAgICAgQWRkIHN0
dWIgaW1wbGVtZW50YXRpb25zIGZvciBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIG1l
dGhvZHMKKyAgICAgICAgaWYgdGhlIEdlb2xvY2F0aW9uIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQu
IEFsc28gZ3VhcmQgc29tZSBvY2N1cnJlbmNlcworICAgICAgICBvZiBXZWJDb3JlOjpHZW9sb2Nh
dGlvbiogdXNlcyB0byBwcmV2ZW50IGJ1aWxkIGZhaWx1cmVzLgorCisgICAgICAgICogd2Via2l0
L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwOgorICAgICAgICAoX1dlYktpdEdl
b2xvY2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlKToKKyAgICAgICAgKHdlYmtpdF9nZW9sb2Nh
dGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KToKKyAgICAgICAgKHdlYmtpdF9nZW9sb2NhdGlvbl9w
b2xpY3lfYWxsb3cpOgorICAgICAgICAod2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZW55KToK
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbnByaXZhdGUu
aDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6
CisKIDIwMTItMDMtMjIgIE1hbyBZdWppZSAgPHl1amllLm1hb0BpbnRlbC5jb20+CiAKICAgICAg
ICAgW0dUS10gQWRkIE1lZGlhU3RyZWFtIGZlYXR1cmUgdG8gYXZvaWQgTWVkaWFTdHJlYW0gdGVz
dCBmYWlsdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dO
VW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmls
ZS5hbQppbmRleCBhNTEyODBmOTU4MWQwNzhlNjUwZGQ1ZWExNzljNjM5NmVhYjVlYzUxLi42NjBi
NzhhMzJjMTVmMjhiZjExYTJlNjY1YjA5MDRkYzdmNzA4Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0KQEAgLTY2LDYgKzY2LDggQEAgd2Vi
a2l0Z3RrX2dkb21fYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dl
YktpdERPTUZpbGVMaXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZp
bGVMaXN0UHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRmlsZVBy
aXZhdGUuaCBcCisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uLmNw
cCBcCisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5o
IFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NSGlzdG9yeS5jcHAgXAogCURlcml2
ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01IaXN0b3J5UHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291
cmNlcy93ZWJraXQvV2ViS2l0RE9NSFRNTEFuY2hvckVsZW1lbnQuY3BwIFwKQEAgLTI5Myw2ICsy
OTUsNyBAQCB3ZWJraXRndGtfYnVpbHRfaF9hcGkgKz0gXAogCURlcml2ZWRTb3VyY2VzL3dlYmtp
dC9XZWJLaXRET01CbG9iLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxl
LmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxlTGlzdC5oIFwKKwlEZXJp
dmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NR2VvbG9jYXRpb24uaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvd2Via2l0L1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmggXAogCURlcml2ZWRTb3VyY2Vz
L3dlYmtpdC9XZWJLaXRET01IVE1MQXBwbGV0RWxlbWVudC5oIFwKIAlEZXJpdmVkU291cmNlcy93
ZWJraXQvV2ViS2l0RE9NSFRNTEFyZWFFbGVtZW50LmggXApAQCAtMzg2LDE0ICszODksNiBAQCB3
ZWJraXRndGtfYnVpbHRfaF9hcGkgKz0gXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC93ZWJraXRk
b20uaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaAogCi1pZiBF
TkFCTEVfR0VPTE9DQVRJT04KLXdlYmtpdGd0a19idWlsdF9oX2FwaSArPSBcCi0JJCh0b3BfYnVp
bGRkaXIpL0Rlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01HZW9sb2NhdGlvbi5oCi13ZWJr
aXRndGtfZ2RvbV9idWlsdF9zb3VyY2VzICs9IFwKLQlEZXJpdmVkU291cmNlcy93ZWJraXQvV2Vi
S2l0RE9NR2VvbG9jYXRpb24uY3BwIFwKLQlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9N
R2VvbG9jYXRpb25Qcml2YXRlLmgKLWVuZGlmCi0KIGlmIEVOQUJMRV9WSURFTwogd2Via2l0Z3Rr
X2J1aWx0X2hfYXBpICs9IFwKIAkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvd2Via2l0
L1dlYktpdERPTUhUTUxBdWRpb0VsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQppbmRleCAyMTEzNGQ0
N2I1YzBkYmFjNTcwZDcyMjA4YzdkYWM2ZWJlZWQyZjJkLi44NDRmYWM4YWNlYjkwY2JlNDgwNDY0
MDhlYjZiMzg3ODJhZWRlZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTExNCw2ICsxMTQsMjEgQEAg
c3ViIEZpeFVwRGVjYW1lbGl6ZWROYW1lIHsKICAgICByZXR1cm4gJGNsYXNzbmFtZTsKIH0KIAor
c3ViIEh1bWFuUmVhZGFibGVDb25kaXRpb25hbCB7CisgICAgbXkgQGNvbmRpdGlvbmFsID0gc3Bs
aXQoJ18nLCBzaGlmdCk7CisgICAgbXkgQHVwcGVyQ2FzZUV4Y2VwdGlvbnMgPSAoIlNRTCIsICJB
UEkiKTsKKyAgICBteSBAaHVtYW5SZWFkYWJsZTsKKworICAgIGZvciAkcGFydCAoQGNvbmRpdGlv
bmFsKSB7CisgICAgICAgIGlmICghZ3JlcCB7JF8gZXEgJHBhcnR9IEB1cHBlckNhc2VFeGNlcHRp
b25zKSB7CisgICAgICAgICAgICAkcGFydCA9IGNhbWVsaXplKGxjKCRwYXJ0KSk7CisgICAgICAg
IH0KKyAgICAgICAgcHVzaChAaHVtYW5SZWFkYWJsZSwgJHBhcnQpOworICAgIH0KKworICAgIHJl
dHVybiBqb2luKCcgJywgQGh1bWFuUmVhZGFibGUpOworfQorCiBzdWIgQ2xhc3NOYW1lVG9HT2Jq
ZWN0VHlwZSB7CiAgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRDTEFTU19OQU1F
ID0gdWMoZGVjYW1lbGl6ZSgkY2xhc3NOYW1lKSk7CkBAIC0zNDQsNiArMzU5LDMyIEBAIHN1YiBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nCiAgICAgfQogfQogCitzdWIgR2VuZXJhdGVDb25kaXRp
b25hbFdhcm4KK3sKKyAgICBteSAkbm9kZSA9IHNoaWZ0OworICAgIG15ICRjb25kaXRpb25hbCA9
ICRub2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICBteSBAd2Fy
bjsKKworICAgIGlmICgkY29uZGl0aW9uYWwpIHsKKyAgICAgICAgaWYgKCRjb25kaXRpb25hbCA9
fiAvJi8pIHsKKyAgICAgICAgICAgIG15IEBzcGxpdENvbmRpdGlvbmFscyA9IHNwbGl0KC8mLywg
JGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIGZvcmVhY2ggJGNvbmRpdGlvbiAoQHNwbGl0Q29u
ZGl0aW9uYWxzKSB7CisgICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiNpZiAhRU5BQkxFKCRj
b25kaXRpb24pXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEB3YXJuLCAiICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoXCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRj
b25kaXRpb24pIC4gIlwiKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiNlbmRp
ZlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzaWYgKCRjb25kaXRpb25hbCA9fiAv
XHwvKSB7CisgICAgICAgICAgICBmb3JlYWNoICRjb25kaXRpb24gKHNwbGl0KC9cfC8sICRjb25k
aXRpb25hbCkpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEB3YXJuLCAiICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoXCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25k
aXRpb24pIC4gIlwiKVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwdXNoKEB3YXJuLCAiICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
XCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb25hbCkgLiAiXCIpXG4iKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBAd2FybjsKK30KKwogc3ViIEdlbmVyYXRl
UHJvcGVydHkgewogICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNl
TmFtZSA9IHNoaWZ0OwpAQCAtMzU4LDkgKzM5OSw5IEBAIHN1YiBHZW5lcmF0ZVByb3BlcnR5IHsK
ICAgICBteSAkcHJvcE5hbWVDYXBzID0gdWMoJHByb3BOYW1lKTsKICAgICAkcHJvcE5hbWUgPX4g
cy9fLy0vZzsKICAgICBteSAke3Byb3BFbnVtfSA9ICJQUk9QXyR7cHJvcE5hbWVDYXBzfSI7Ci0g
ICAgcHVzaChAY0JvZHlQcml2LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29u
ZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAY0JvZHlQcml2LCAiICAgICR7cHJvcEVudW19LFxu
Iik7Ci0gICAgcHVzaChAY0JvZHlQcml2LCAiI2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9
ICovXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Cisg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiICAgICR7cHJvcEVudW19LFxuIik7CisgICAgcHVz
aChAY0JvZHlQcm9wZXJ0aWVzLCAiI2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAKICAgICBteSAkcHJvcFR5cGUgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPnR5cGU7CiAgICAgbXkgJHtwcm9wR1R5cGV9ID0gZGVjYW1lbGl6ZSgkcHJv
cFR5cGUpOwpAQCAtNDg2LDYgKzUyNywxNCBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzIHsKICAg
ICBteSAkY2xzQ2FwcyA9IHN1YnN0cihDbGFzc05hbWVUb0dPYmplY3RUeXBlKCRjbGFzc05hbWUp
LCAxMik7CiAgICAgbXkgJGxvd2VyQ2FzZUlmYWNlTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAoRml4
VXBEZWNhbWVsaXplZE5hbWUoZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkpKTsKIAorICAgIG15
ICRjb25kaXRpb25HdWFyZFN0YXJ0ID0gIiI7CisgICAgbXkgJGNvbmRpdGlvbkd1YXJkRW5kID0g
IiI7CisgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmlu
ZygkZGF0YU5vZGUpOworICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKKyAgICAgICAgJGNv
bmRpdGlvbkd1YXJkU3RhcnQgPSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9IjsKKyAgICAgICAg
JGNvbmRpdGlvbkd1YXJkRW5kID0gIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfSI7Cisg
ICAgfQorCiAgICAgIyBQcm9wZXJ0aWVzCiAgICAgbXkgJGltcGxDb250ZW50ID0gIiI7CiAKQEAg
LTQ5NCw3ICs1NDMsNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzIHsKIGVudW0gewogICAgIFBS
T1BfMCwKIEVPRgotICAgIHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKyAgICBwdXNo
KEBjQm9keVByb3BlcnRpZXMsICRpbXBsQ29udGVudCk7CiAKICAgICBteSBAcmVhZGFibGVQcm9w
ZXJ0aWVzID0gR2V0UmVhZGFibGVQcm9wZXJ0aWVzKCRkYXRhTm9kZS0+YXR0cmlidXRlcyk7CiAK
QEAgLTUxMSw3ICs1NjAsNyBAQCBFT0YKICAgICAke2NsYXNzTmFtZX0qIHNlbGYgPSBXRUJLSVRf
RE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTsKICAgICAkcHJpdkZ1bmN0aW9uCiBFT0YKLSAgICBwdXNo
KEB0eHRHZXRQcm9wcywgJHR4dEdldFByb3ApOworICAgICAgICBwdXNoKEB0eHRHZXRQcm9wcywg
JHR4dEdldFByb3ApOwogICAgIH0KIAogICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7CkBAIC01
NDgsNyArNTk3LDcgQEAgRU9GCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXNoKEBjQm9keVBy
aXYsICJ9O1xuXG4iKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJ9O1xuXG4iKTsKIAog
ICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7CiAgICAgZGVmYXVsdDoKQEAgLTU3Miw5ICs2MjEs
OSBAQCBFT0YKICAgICAkIiA9ICIiOwogCiAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci0K
IHN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCiB7CiskY29uZGl0aW9uR3VhcmRTdGFydAogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29i
amVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmpl
Y3QtPmNvcmVPYmplY3QpIHsKQEAgLTU4NSw2ICs2MzQsNyBAQCBzdGF0aWMgdm9pZCAke2xvd2Vy
Q2FzZUlmYWNlTmFtZX1fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogCiAgICAgICAgIGRvbV9v
YmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KKyRjb25kaXRpb25HdWFyZEVuZAogCiAg
ICAgR19PQkpFQ1RfQ0xBU1MoJHtsb3dlckNhc2VJZmFjZU5hbWV9X3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7CiB9CkBAIC01OTYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgJHtsb3dl
ckNhc2VJZmFjZU5hbWV9X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHN0YXRpYyB2b2lkICR7
bG93ZXJDYXNlSWZhY2VOYW1lfV9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiBFT0YK
LSAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisgICAgcHVzaChAY0JvZHlQcm9w
ZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwogCiAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CiBA
dHh0SW5zdGFsbEV2ZW50TGlzdGVuZXJzCkBAIC02MjEsNyArNjcxLDcgQEAgc3RhdGljIHZvaWQg
JHtsb3dlckNhc2VJZmFjZU5hbWV9X2luaXQoJHtjbGFzc05hbWV9KiByZXF1ZXN0KQogfQogCiBF
T0YKLSAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisgICAgcHVzaChAY0JvZHlQ
cm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwogfQogCiBzdWIgR2VuZXJhdGVIZWFkZXIgewpAQCAt
NzI1LDcgKzc3NSw3IEBAIHN1YiBhZGRJbmNsdWRlSW5Cb2R5IHsKIH0KIAogc3ViIEdlbmVyYXRl
RnVuY3Rpb24gewotICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAk
cHJlZml4KSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9u
LCAkcHJlZml4LCAkcGFyZW50Tm9kZSkgPSBAXzsKIAogICAgIG15ICRkZWNhbWVsaXplID0gRml4
VXBEZWNhbWVsaXplZE5hbWUoZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkpOwogCkBAIC03NDIs
NyArNzkyLDExIEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKICAgICBteSAkZnVuY3Rpb25OYW1l
ID0gIndlYmtpdF9kb21fIiAuICRkZWNhbWVsaXplIC4gIl8iIC4gJHByZWZpeCAuIGRlY2FtZWxp
emUoJGZ1bmN0aW9uU2lnTmFtZSk7CiAgICAgbXkgJHJldHVyblR5cGUgPSBHZXRHbGliVHlwZU5h
bWUoJGZ1bmN0aW9uU2lnVHlwZSk7CiAgICAgbXkgJHJldHVyblZhbHVlSXNHRE9NVHlwZSA9IElz
R0RPTUNsYXNzVHlwZSgkZnVuY3Rpb25TaWdUeXBlKTsKKwogICAgIG15ICRjb25kaXRpb25hbFN0
cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwor
ICAgIG15ICRwYXJlbnRDb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJp
bmcoJHBhcmVudE5vZGUpOworICAgIG15IEBjb25kaXRpb25hbFdhcm4gPSBHZW5lcmF0ZUNvbmRp
dGlvbmFsV2FybigkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CisgICAgbXkgQHBhcmVudENvbmRpdGlv
bmFsV2FybiA9IEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuKCRwYXJlbnROb2RlKTsKIAogICAgIG15
ICRmdW5jdGlvblNpZyA9ICIke2NsYXNzTmFtZX0qIHNlbGYiOwogCkBAIC04MTYsNiArODcwLDcg
QEAgc3ViIEdlbmVyYXRlRnVuY3Rpb24gewogICAgIHB1c2goQGhCb2R5LCAiXG4iKTsKIAogICAg
IHB1c2goQGNCb2R5LCAiJHJldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUoJGZ1bmN0aW9uU2lnKVxu
e1xuIik7CisgICAgcHVzaChAY0JvZHksICIjaWYgJHtwYXJlbnRDb25kaXRpb25hbFN0cmluZ31c
biIpIGlmICRwYXJlbnRDb25kaXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBjQm9keSwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgaWYg
KCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgewpAQCAtMTAxNywxNSArMTA3MiwyOSBAQCBFT0YKICAg
ICB9CiAKICAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7CisgICAgICAgIHB1c2goQGNCb2R5
LCAiI2Vsc2VcbiIpOworICAgICAgICBwdXNoKEBjQm9keSwgQGNvbmRpdGlvbmFsV2FybikgaWYg
c2NhbGFyKEBjb25kaXRpb25hbFdhcm4pOworICAgICAgICBpZiAoJHJldHVyblR5cGUgbmUgInZv
aWQiKSB7CisgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUo
JGZ1bmN0aW9uU2lnVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8JHtyZXR1cm5UeXBlfT4oMCk7XG4iKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIE5VTEw7XG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwdXNoKEBjQm9keSwgIiNlbmRp
ZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7CisgICAgfQorCisgICAgaWYgKCRwYXJl
bnRDb25kaXRpb25hbFN0cmluZykgeworICAgICAgICBwdXNoKEBjQm9keSwgIiNlbHNlXG4iKTsK
KyAgICAgICAgcHVzaChAY0JvZHksIEBwYXJlbnRDb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihA
cGFyZW50Q29uZGl0aW9uYWxXYXJuKTsKICAgICAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lk
IikgewotICAgICAgICAgICAgcHVzaChAY0JvZHksICIjZWxzZVxuIik7CiAgICAgICAgICAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkpIHsK
ICAgICAgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHty
ZXR1cm5UeXBlfT4oMCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIE5VTEw7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBwdXNoKEBjQm9keSwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3Ry
aW5nfSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgICAgICBwdXNoKEBjQm9keSwg
IiNlbmRpZiAvKiAke3BhcmVudENvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7CiAgICAgfQogCiAg
ICAgcHVzaChAY0JvZHksICJ9XG5cbiIpOwpAQCAtMTA0Nyw3ICsxMTE2LDcgQEAgc3ViIEdlbmVy
YXRlRnVuY3Rpb25zIHsKICAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZU5hbWUsICRkYXRhTm9k
ZSkgPSBAXzsKIAogICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rp
b25zfSkgewotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VOYW1l
LCAkZnVuY3Rpb24sICIiKTsKKyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50
ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiIiwgJGRhdGFOb2RlKTsKICAgICB9CiAKICAgICBUT1A6
CkBAIC0xMDgwLDcgKzExNDksNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbnMgewogICAgICAgICBt
eSAkZnVuY3Rpb24gPSBuZXcgZG9tRnVuY3Rpb24oKTsKICAgICAgICAgJGZ1bmN0aW9uLT5zaWdu
YXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAgICAgJGZ1bmN0aW9uLT5yYWlzZXNF
eGNlcHRpb25zKCRhdHRyaWJ1dGUtPmdldHRlckV4Y2VwdGlvbnMpOwotICAgICAgICAkb2JqZWN0
LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJnZXRfIik7Cisg
ICAgICAgICRvYmplY3QtPkdlbmVyYXRlRnVuY3Rpb24oJGludGVyZmFjZU5hbWUsICRmdW5jdGlv
biwgImdldF8iLCAkZGF0YU5vZGUpOwogCiAgICAgICAgICMgRklYTUU6IFdlIGFyZSBub3QgZ2Vu
ZXJhdGluZyBzZXR0ZXJzIGZvciAnUmVwbGFjZWFibGUnCiAgICAgICAgICMgYXR0cmlidXRlcyBu
b3csIGJ1dCB3ZSBzaG91bGQgc29tZWhvdy4KQEAgLTExMDgsNyArMTE3Nyw3IEBAIHN1YiBHZW5l
cmF0ZUZ1bmN0aW9ucyB7CiAgICAgICAgIAogICAgICAgICAkZnVuY3Rpb24tPnJhaXNlc0V4Y2Vw
dGlvbnMoJGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9ucyk7CiAgICAgICAgIAotICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJzZXRf
Iik7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlRnVuY3Rpb24oJGludGVyZmFjZU5hbWUsICRm
dW5jdGlvbiwgInNldF8iLCAkZGF0YU5vZGUpOwogICAgIH0KIH0KIApAQCAtMTEyNyw4ICsxMTk2
LDEwIEBAIHN1YiBHZW5lcmF0ZUNGaWxlIHsKICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsK
ICR7ZGVmaW5lVHlwZU1hY3JvfSgke2NsYXNzTmFtZX0sICR7bG93ZXJDYXNlSWZhY2VOYW1lfSwg
JHtwYXJlbnRHT2JqVHlwZX0ke2RlZmluZVR5cGVJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbn0KIAot
bmFtZXNwYWNlIFdlYktpdCB7CitFT0YKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICRpbXBs
Q29udGVudCk7CiAKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKIFdlYkNvcmU6OiR7aW50
ZXJmYWNlTmFtZX0qIGNvcmUoJHtjbGFzc05hbWV9KiByZXF1ZXN0KQogewogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwpAQCAtMTEzOSwxNSArMTIxMCwxMyBAQCBXZWJDb3Jl
Ojoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKICAgICByZXR1
cm4gY29yZU9iamVjdDsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBFT0YKLQogICAgIHB1
c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKwogICAgICRvYmplY3QtPkdlbmVyYXRlUHJv
cGVydGllcygkaW50ZXJmYWNlTmFtZSwgJGRhdGFOb2RlKTsKICAgICAkb2JqZWN0LT5HZW5lcmF0
ZUZ1bmN0aW9ucygkaW50ZXJmYWNlTmFtZSwgJGRhdGFOb2RlKTsKIAogICAgIG15ICR3cmFwTWV0
aG9kID0gPDwgIkVPRiI7Ci1uYW1lc3BhY2UgV2ViS2l0IHsKICR7Y2xhc3NOYW1lfSogd3JhcCR7
aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZU9iamVjdCkKIHsK
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKQEAgLTExNjEsNyArMTIz
MCw3IEBAICR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfSogY29yZU9iamVjdCkKICAgICByZXR1cm4gIFdFQktJVF9ET01fJHtjbHNDYXBz
fShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NXyR7Y2xzQ2Fwc30sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmpl
Y3QsIE5VTEwpKTsKIH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCiBFT0YKICAgICBwdXNoKEBj
Qm9keVByaXYsICR3cmFwTWV0aG9kKTsKIH0KQEAgLTEyMjksNyArMTI5OCw3IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFj
ZSogaWZhY2UpCiAKIEVPRgogCi0gICAgcHVzaChAY0JvZHksICRpbXBsKTsKKyAgICBwdXNoKEBj
Qm9keVByb3BlcnRpZXMsICRpbXBsKTsKIAogICAgICRkZWZpbmVUeXBlTWFjcm8gPSAiR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUiOwogICAgICRkZWZpbmVUeXBlSW50ZXJmYWNlSW1wbGVtZW50YXRp
b24gPSAiLCBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoV0VCS0lUX1RZUEVfRE9NX0VWRU5UX1RBUkdF
VCwgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdCkpIjsKQEAgLTEyNDIsMTEgKzEzMTEsNiBA
QCBzdWIgR2VuZXJhdGUgewogICAgIG15ICRwYXJlbnRHT2JqVHlwZSA9IEdldFBhcmVudEdPYmpU
eXBlKCRkYXRhTm9kZSk7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7
CiAKLSAgICAjIEFkZCB0aGUgZ3VhcmQgaWYgdGhlICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0
cmlidXRlIGV4aXN0cwotICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0
aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKLSAgICBwdXNoKEBjb25kaXRpb25HdWFyZFN0YXJ0LCAi
I2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAg
ICBwdXNoKEBjb25kaXRpb25HdWFyZEVuZCwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5n
fSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotCiAgICAgIyBBZGQgdGhlIGRlZmF1bHQg
aW1wbCBoZWFkZXIgdGVtcGxhdGUKICAgICBAY1ByZWZpeCA9IHNwbGl0KCJcciIsICRsaWNlbmNl
VGVtcGxhdGUpOwogICAgIHB1c2goQGNQcmVmaXgsICJcbiIpOwpAQCAtMTI2Nyw4ICsxMzMxLDYg
QEAgc3ViIEdlbmVyYXRlIHsKIAogICAgIGlmICghVXNlc01hbnVhbEtpdEltcGxlbWVudGF0aW9u
KCRpbnRlcmZhY2VOYW1lKSkgewogICAgICAgICBteSAkY29udmVydGVyID0gPDwgIkVPRiI7Ci1u
YW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKICR7Y2xhc3NOYW1lfSoga2l0KFdlYkNvcmU6OiRpbnRl
cmZhY2VOYW1lKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAg
LTEyNzgsMTEgKzEzNDAsOSBAQCAke2NsYXNzTmFtZX0qIGtpdChXZWJDb3JlOjokaW50ZXJmYWNl
TmFtZSogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7Y2xhc3NOYW1lfSo+KERPTU9i
amVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXAke2ludGVyZmFjZU5hbWV9KG9iaikpKTsK
IH0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwogCiBFT0YKLSAgICBwdXNoKEBjQm9k
eSwgJGNvbnZlcnRlcik7CisgICAgcHVzaChAY0JvZHlQcml2LCAkY29udmVydGVyKTsKICAgICB9
CiAKICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlTmFtZSwgJHBhcmVudENs
YXNzTmFtZSk7CkBAIC0xMzAxLDYgKzEzNjEsOSBAQCBzdWIgV3JpdGVEYXRhIHsKICAgICBteSAk
Z3VhcmQgPSB1YyhkZWNhbWVsaXplKCRjbGFzc05hbWUpKSAuICJfUFJJVkFURV9IIjsKICAgICBt
eSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7CiAKKyAg
ICAjIEFkZCB0aGUgZ3VhcmQgaWYgdGhlICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRl
IGV4aXN0cworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxT
dHJpbmcoJGRhdGFOb2RlKTsKKwogICAgIG9wZW4oUFJJVkhFQURFUiwgIj4kZmlsZW5hbWUiKSBv
ciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkZmlsZW5hbWUgZm9yIHdyaXRpbmciOwogCiAgICAg
cHJpbnQgUFJJVkhFQURFUiBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKQEAgLTEzMTMs
MTIgKzEzNzYsMTUgQEAgc3ViIFdyaXRlRGF0YSB7CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvJHtwYXJlbnRDbGFzc05hbWV9Lmg+CiAjaW5jbHVkZSAiJHtpbnRl
cmZhY2VOYW1lfS5oIgorCiBFT0YKIAogICAgIHByaW50IFBSSVZIRUFERVIgJHRleHQ7CisgICAg
cHJpbnQgUFJJVkhFQURFUiAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iIGlmICRjb25kaXRp
b25hbFN0cmluZzsKICAgICBwcmludCBQUklWSEVBREVSIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJc
biIgfSBzb3J0IGtleXMoJWhkclByb3BJbmNsdWRlcyk7CiAgICAgcHJpbnQgUFJJVkhFQURFUiAi
XG4iIGlmIGtleXMoJWhkclByb3BJbmNsdWRlcyk7CiAgICAgJHRleHQgPSA8PCAiRU9GIjsKKwog
bmFtZXNwYWNlIFdlYktpdCB7CiAgICAgJHtjbGFzc05hbWV9ICoKICAgICB3cmFwJHtpbnRlcmZh
Y2VOYW1lfShXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICpjb3JlT2JqZWN0KTsKQEAgLTEzNDIs
OSArMTQwOCwxMCBAQCBFT0YKICAgICAkdGV4dCA9IDw8ICJFT0YiOwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKLSNlbmRpZiAvKiAke2d1YXJkfSAqLwogRU9GCiAgICAgcHJpbnQgUFJJVkhFQURF
UiAkdGV4dDsKKyAgICBwcmludCBQUklWSEVBREVSICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0
cmluZ30gKi9cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHJpbnQgUFJJVkhFQURF
UiAiI2VuZGlmIC8qICR7Z3VhcmR9ICovXG4iOwogCiAgICAgY2xvc2UoUFJJVkhFQURFUik7CiAK
QEAgLTEzNzYsMTYgKzE0NDMsMTkgQEAgRU9GCiAgICAgcHJpbnQgSU1QTCBAY1ByZWZpeDsKICAg
ICBwcmludCBJTVBMICIjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD5cbiI7CiAgICAgcHJpbnQgSU1Q
TCAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG5cbiI7Ci0gICAgcHJpbnQgSU1QTCBAY29uZGl0aW9u
R3VhcmRTdGFydDsKICAgICBwcmludCBJTVBMICIjaW5jbHVkZSA8d3RmL0dldFB0ci5oPlxuIjsK
ICAgICBwcmludCBJTVBMICIjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPlxuIjsKICAgICBwcmludCBJ
TVBMIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWltcGxJbmNsdWRlcyk7
CiAgICAgcHJpbnQgSU1QTCAiXG4iIGlmIGtleXMoJWltcGxJbmNsdWRlcyk7Ci0gICAgcHJpbnQg
SU1QTCBAY0JvZHk7CisgICAgcHJpbnQgSU1QTCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5c
biIgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCi0gICAgcHJpbnQgSU1QTCAiXG4iOworICAgIHBy
aW50IElNUEwgIm5hbWVzcGFjZSBXZWJLaXQge1xuXG4iOwogICAgIHByaW50IElNUEwgQGNCb2R5
UHJpdjsKLSAgICBwcmludCBJTVBMIEBjb25kaXRpb25HdWFyZEVuZDsKKyAgICBwcmludCBJTVBM
ICJ9IC8vIG5hbWVzcGFjZSBXZWJLaXRcblxuIjsKKyAgICBwcmludCBJTVBMICIjZW5kaWYgLy8g
JHtjb25kaXRpb25hbFN0cmluZ31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICBw
cmludCBJTVBMIEBjQm9keVByb3BlcnRpZXM7CisgICAgcHJpbnQgSU1QTCBAY0JvZHk7CiAKICAg
ICBjbG9zZShJTVBMKTsKIApAQCAtMTM5Nyw2ICsxNDY3LDcgQEAgRU9GCiAgICAgQGNQcmVmaXgg
PSAoKTsKICAgICBAY0JvZHkgPSAoKTsKICAgICBAY0JvZHlQcml2ID0gKCk7CisgICAgQGNCb2R5
UHJvcGVydGllcyA9ICgpOwogfQogCiBzdWIgR2VuZXJhdGVJbnRlcmZhY2UgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAKaW5kZXggMzQwMzNkZTYyNWJjMjY4NDFl
YTgyZjcwMDY2Y2Y2YTlkYmM3ZTMyMy4uMmI2ZDA2ZjdjYWZhNTY5OTFhYWNmZmEyNDIzZGU1ODVj
Mjc1YzRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuY3BwCkBA
IC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBraXQoV2ViQ29yZTo6Rmxv
YXQ2NEFycmF5KiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAg
LTUxLDMwICs1MSw2IEBAIFdlYktpdERPTUZsb2F0NjRBcnJheSoga2l0KFdlYkNvcmU6OkZsb2F0
NjRBcnJheSogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTUZsb2F0NjRB
cnJheSo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBGbG9hdDY0QXJyYXko
b2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLVdlYktpdERPTUlu
dDMyQXJyYXkqCi13ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0RE9NRmxvYXQ2NEFy
cmF5KiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5KQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpGbG9hdDY0QXJyYXkgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGFycmF5LCAwKTsKLSAgICBXZWJDb3Jl
OjpGbG9hdDMyQXJyYXkgKiBjb252ZXJ0ZWRfYXJyYXkgPSBOVUxMOwotICAgIGlmIChhcnJheSAh
PSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9hcnJheSA9IFdlYktpdDo6Y29yZShhcnJheSk7
Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9hcnJheSwgMCk7Ci0gICAg
fQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJheT4gZ19yZXMgPSBXVEY6OmdldFB0
cihpdGVtLT5mb28oY29udmVydGVkX2FycmF5KSk7Ci0gICAgV2ViS2l0RE9NSW50MzJBcnJheSog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLQot
R19ERUZJTkVfVFlQRShXZWJLaXRET01GbG9hdDY0QXJyYXksIHdlYmtpdF9kb21fZmxvYXQ2NGFy
cmF5LCBXRUJLSVRfVFlQRV9ET01fQVJSQVlfQlVGRkVSX1ZJRVcpCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewogCiBXZWJDb3JlOjpGbG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5
KiByZXF1ZXN0KQogewpAQCAtODYsMTQgKzYyLDMxIEBAIFdlYkNvcmU6OkZsb2F0NjRBcnJheSog
Y29yZShXZWJLaXRET01GbG9hdDY0QXJyYXkqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmpl
Y3Q7CiB9CiAKK1dlYktpdERPTUZsb2F0NjRBcnJheSogd3JhcEZsb2F0NjRBcnJheShXZWJDb3Jl
OjpGbG9hdDY0QXJyYXkqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5n
IGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QK
KyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5h
bGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisg
ICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fRkxPQVQ2NEFS
UkFZKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fRkxPQVQ2NEFSUkFZLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBOVUxMKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9U
WVBFKFdlYktpdERPTUZsb2F0NjRBcnJheSwgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXksIFdFQktJ
VF9UWVBFX0RPTV9BUlJBWV9CVUZGRVJfVklFVykKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsK
IAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCiB7CisKICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRf
RE9NX09CSkVDVChvYmplY3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0
KSB7CkBAIC0xMDUsNiArOTgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Zsb2F0NjRhcnJh
eV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmpl
Y3QgPSBOVUxMOwogICAgIH0KIAorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9mbG9h
dDY0YXJyYXlfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTUzLDE4
ICsxNDcsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfaW5pdChXZWJL
aXRET01GbG9hdDY0QXJyYXkqIHJlcXVlc3QpCiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewot
V2ViS2l0RE9NRmxvYXQ2NEFycmF5KiB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZsb2F0NjRB
cnJheSogY29yZU9iamVjdCkKK1dlYktpdERPTUludDMyQXJyYXkqCit3ZWJraXRfZG9tX2Zsb2F0
NjRhcnJheV9mb28oV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBzZWxmLCBXZWJLaXRET01GbG9hdDMy
QXJyYXkqIGFycmF5KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDAp
OwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBw
b2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0gICAgICogaW4gYSBD
LWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZv
ciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwotICAgIGNvcmVPYmplY3Qt
PnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX0ZMT0FUNjRBUlJBWShnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRE9NX0ZMT0FUNjRBUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpGbG9hdDY0QXJyYXkgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGFycmF5LCAw
KTsKKyAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkgKiBjb252ZXJ0ZWRfYXJyYXkgPSBOVUxMOwor
ICAgIGlmIChhcnJheSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9hcnJheSA9IFdlYktp
dDo6Y29yZShhcnJheSk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9h
cnJheSwgMCk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJheT4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT5mb28oY29udmVydGVkX2FycmF5KSk7CisgICAgV2ViS2l0
RE9NSW50MzJBcnJheSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVy
biByZXM7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oCmluZGV4IGIwZWM2MTRmMmJjZjFlZjlhNjBk
ZDM2YjA4Y2EzYTNhOTgxNTZlNWUuLmMyYTdmNzc3MDU0MjkwZmQ5YmE1MTllZTg3MTYzYWY1ZGUw
NzQ1ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2
YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1
ZGUgPHdlYmtpdC9XZWJLaXRET01BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlICJGbG9hdDY0
QXJyYXkuaCIKKworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01GbG9hdDY0QXJy
YXkgKgogICAgIHdyYXBGbG9hdDY0QXJyYXkoV2ViQ29yZTo6RmxvYXQ2NEFycmF5ICpjb3JlT2Jq
ZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAKaW5kZXggYzkzYTkyY2Q5ZjRmODFkODc4MDZlOWQ1MDMwZjFjMDdlZDA1ZTMwMS4uNzE1
MDJjNThmZDlmM2IzNjEzNTAzMWJjYjNmNzJjOWMyODRiMDFmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM4LDcgKzM4LDcg
QEAKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotICAg
IAorCiBXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBraXQoV2ViQ29yZTo6VGVzdEFjdGl2
ZURPTU9iamVjdCogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBA
IC00OCw0OSArNDgsNiBAQCBXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBraXQoV2ViQ29y
ZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2Vi
S2l0Ojp3cmFwVGVzdEFjdGl2ZURPTU9iamVjdChvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQgLy8KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0
X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdl
YktpdERPTU5vZGUqIG5leHRfY2hpbGQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChuZXh0X2NoaWxkKTsKLSAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVk
X25leHRfY2hpbGQgPSBOVUxMOwotICAgIGlmIChuZXh0X2NoaWxkICE9IE5VTEwpIHsKLSAgICAg
ICAgY29udmVydGVkX25leHRfY2hpbGQgPSBXZWJLaXQ6OmNvcmUobmV4dF9jaGlsZCk7Ci0gICAg
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX25leHRfY2hpbGQpOwotICAgIH0KLSAgICBp
dGVtLT5leGNpdGluZ0Z1bmN0aW9uKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKLX0KLQotdm9pZAot
d2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01U
ZXN0QWN0aXZlRE9NT2JqZWN0KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSkKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG1lc3NhZ2UpOwotICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZF9tZXNzYWdlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2Up
OwotICAgIGl0ZW0tPnBvc3RNZXNzYWdlKGNvbnZlcnRlZF9tZXNzYWdlKTsKLX0KLQotZ2xvbmcK
LXdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJL
aXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5leGNpdGluZ0F0dHIoKTsKLSAgICByZXR1cm4g
cmVzOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCwg
d2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNU
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCog
Y29yZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQogewpAQCAtMTAyLDE1
ICs1OSwzMiBAQCBXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3JlKFdlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3QqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAK
K1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdl
YkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhl
ciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBh
IEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAg
U2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCku
CisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9E
T01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RF
U1RfQUNUSVZFX0RPTV9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEFjdGl2ZURP
TU9iamVjdCwgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0LCBXRUJLSVRfVFlQRV9E
T01fT0JKRUNUKQorCiBlbnVtIHsKICAgICBQUk9QXzAsCiAgICAgUFJPUF9FWENJVElOR19BVFRS
LAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3Rf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21f
b2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29i
amVjdC0+Y29yZU9iamVjdCkgewpAQCAtMTIyLDYgKzk2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAg
ICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQogCisKICAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTg2LDE4ICsxNjEsMzkgQEAgc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2luaXQoV2ViS2l0RE9NVGVzdEFj
dGl2ZURPTU9iamVjdCoKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0KiB3cmFwVGVzdEFjdGl2ZURPTU9iamVjdChXZWJDb3JlOjpUZXN0QWN0
aXZlRE9NT2JqZWN0KiBjb3JlT2JqZWN0KQordm9pZAord2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRfY2hpbGQpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29yZU9iamVjdCwgMCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEFj
dGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChuZXh0X2NoaWxkKTsKKyAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVkX25leHRf
Y2hpbGQgPSBOVUxMOworICAgIGlmIChuZXh0X2NoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgY29u
dmVydGVkX25leHRfY2hpbGQgPSBXZWJLaXQ6OmNvcmUobmV4dF9jaGlsZCk7CisgICAgICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX25leHRfY2hpbGQpOworICAgIH0KKyAgICBpdGVtLT5l
eGNpdGluZ0Z1bmN0aW9uKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKK30KIAotICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2UoV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRfbWVzc2FnZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKTsK
KyAgICBpdGVtLT5wb3N0TWVzc2FnZShjb252ZXJ0ZWRfbWVzc2FnZSk7Cit9CiAKLSAgICByZXR1
cm4gIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9NX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwp
KTsKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X2V4Y2l0aW5n
X2F0dHIoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+ZXhjaXRpbmdBdHRyKCk7Cisg
ICAgcmV0dXJuIHJlczsKIH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaAppbmRl
eCBmMjhjN2Y5ZDFlMDA2YmJhYWIyZjcxOGJjZjY2NDE1OTA0MGY3MGQ3Li4yNWI1NDU1OGQwY2Vi
YmY4YjFiNTlhMGM5ZDcyYWNlY2NiYTEyNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDgg
QEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01P
YmplY3QuaD4KICNpbmNsdWRlICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCisKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAgICAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCAqCiAgICAgd3JhcFRl
c3RBY3RpdmVET01PYmplY3QoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqY29yZU9iamVj
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAppbmRleCA3MjQx
MmY2Zjc0YTU0NTQ0ZTQ5MWI2M2VhYzlhM2Q2MWJlODExNWY0Li44YTU4MzBlN2Y5YjMxZGMyODdl
ZWIyNTE4MjU3YTUwNWIxODAxMDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
YWxsYmFjay5jcHAKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSAiRE9N
T2JqZWN0Q2FjaGUuaCIKQEAgLTQ1LDggKzQzLDEwIEBACiAjaW5jbHVkZSAid2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKKyNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBvYmopCiB7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTU2LDEwOCArNTYsNDQgQEAgV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiBraXQoV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBvYmopCiAKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViS2l0RE9NVGVzdENhbGxiYWNrKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmos
IFdlYktpdDo6d3JhcFRlc3RDYWxsYmFjayhvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQgLy8KIAotZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFj
a193aXRoX25vX3BhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZikKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhOb1BhcmFt
KCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2Vs
ZiwgV2ViS2l0RE9NQ2xhc3MxKiBjbGFzczFwYXJhbSkKK1dlYkNvcmU6OlRlc3RDYWxsYmFjayog
Y29yZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHJlcXVlc3QpCiB7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY2xhc3MxcGFyYW0sIDApOwotICAgIFdlYkNv
cmU6OkNsYXNzMSAqIGNvbnZlcnRlZF9jbGFzczFwYXJhbSA9IE5VTEw7Ci0gICAgaWYgKGNsYXNz
MXBhcmFtICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2NsYXNzMXBhcmFtID0gV2ViS2l0
Ojpjb3JlKGNsYXNzMXBhcmFtKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVy
dGVkX2NsYXNzMXBhcmFtLCAwKTsKLSAgICB9Ci0gICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2Fs
bGJhY2tXaXRoQ2xhc3MxUGFyYW0oY29udmVydGVkX2NsYXNzMXBhcmFtKTsKLSAgICByZXR1cm4g
cmVzOwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwogCi1nYm9vbGVh
bgotd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xhc3MycGFyYW0oV2Vi
S2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczIqIGNsYXNzMnBhcmFtLCBj
b25zdCBnY2hhciogc3RyX2FyZykKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjbGFzczJwYXJhbSwgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c3RyX2FyZywgMCk7Ci0gICAgV2ViQ29yZTo6Q2xhc3MyICogY29udmVydGVkX2NsYXNzMnBhcmFt
ID0gTlVMTDsKLSAgICBpZiAoY2xhc3MycGFyYW0gIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0
ZWRfY2xhc3MycGFyYW0gPSBXZWJLaXQ6OmNvcmUoY2xhc3MycGFyYW0pOwotICAgICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfY2xhc3MycGFyYW0sIDApOwotICAgIH0KLSAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJf
YXJnKTsKLSAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhDbGFzczJQYXJhbShj
b252ZXJ0ZWRfY2xhc3MycGFyYW0sIGNvbnZlcnRlZF9zdHJfYXJnKTsKLSAgICByZXR1cm4gcmVz
OwotfQorICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlRlc3RDYWxsYmFjayo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3Jl
T2JqZWN0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotZ2xv
bmcKLXdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVy
bl90eXBlKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MzKiBjbGFz
czNwYXJhbSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxi
YWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjbGFzczNwYXJhbSwgMCk7Ci0gICAgV2ViQ29yZTo6Q2xhc3MzICogY29udmVydGVkX2NsYXNz
M3BhcmFtID0gTlVMTDsKLSAgICBpZiAoY2xhc3MzcGFyYW0gIT0gTlVMTCkgewotICAgICAgICBj
b252ZXJ0ZWRfY2xhc3MzcGFyYW0gPSBXZWJLaXQ6OmNvcmUoY2xhc3MzcGFyYW0pOwotICAgICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfY2xhc3MzcGFyYW0sIDApOwotICAgIH0K
LSAgICBnbG9uZyByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhOb25Cb29sUmV0dXJuVHlwZShjb252
ZXJ0ZWRfY2xhc3MzcGFyYW0pOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIGNvcmVPYmpl
Y3Q7CiB9CiAKLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0
aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTURPTVN0
cmluZ0xpc3QqIGxpc3RfcGFyYW0pCitXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHdyYXBUZXN0Q2Fs
bGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0KQogewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxpc3RfcGFyYW0sIDApOwotICAgIFdl
YkNvcmU6OkRPTVN0cmluZ0xpc3QgKiBjb252ZXJ0ZWRfbGlzdF9wYXJhbSA9IE5VTEw7Ci0gICAg
aWYgKGxpc3RfcGFyYW0gIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfbGlzdF9wYXJhbSA9
IFdlYktpdDo6Y29yZShsaXN0X3BhcmFtKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29udmVydGVkX2xpc3RfcGFyYW0sIDApOwotICAgIH0KLSAgICBnYm9vbGVhbiByZXMgPSBpdGVt
LT5jYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnZlcnRlZF9saXN0X3BhcmFtKTsKLSAgICByZXR1
cm4gcmVzOwotfQotCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CiAK
LUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2Fs
bGJhY2ssIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRo
ZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUg
YSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4g
IFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigp
LgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOwogCi1uYW1lc3BhY2UgV2ViS2l0IHsK
KyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KIAot
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlKFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVz
dCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAogCi0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVz
dCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDAp
OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKLSAgICByZXR1cm4gY29yZU9iamVj
dDsKLX0KK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2ssIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCiAKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RP
TV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkg
ewpAQCAtMTY4LDYgKzEwNCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9i
amVjdCA9IE5VTEw7CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAKICAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTIxNywxOSArMTU0LDEwNCBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfaW5pdChXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHJlcXVl
c3QpCiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdENhbGxiYWNrKiB3
cmFwVGVzdENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9iamVjdCkKK2dib29s
ZWFuCit3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub19wYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2sqIHNlbGYpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29y
ZU9iamVjdCwgMCk7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhOb1BhcmFtKCk7CisgICAg
cmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
U1FMIERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2Vu
ZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigp
IHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBz
dG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0
dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRl
cmVmKCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7CitnYm9vbGVhbgord2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfY2xhc3MxcGFyYW0oV2ViS2l0RE9NVGVz
dENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczEqIGNsYXNzMXBhcmFtKQoreworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY2xhc3MxcGFyYW0sIDApOworICAgIFdlYkNvcmU6OkNsYXNzMSAqIGNvbnZlcnRl
ZF9jbGFzczFwYXJhbSA9IE5VTEw7CisgICAgaWYgKGNsYXNzMXBhcmFtICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX2NsYXNzMXBhcmFtID0gV2ViS2l0Ojpjb3JlKGNsYXNzMXBhcmFtKTsK
KyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX2NsYXNzMXBhcmFtLCAwKTsK
KyAgICB9CisgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0o
Y29udmVydGVkX2NsYXNzMXBhcmFtKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkg
Ki8KK30KIAotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9ET01fVEVTVF9DQUxMQkFDSywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkp
OworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2NsYXNz
MnBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MyKiBjbGFz
czJwYXJhbSwgY29uc3QgZ2NoYXIqIHN0cl9hcmcpCit7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjbGFzczJw
YXJhbSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CisgICAgV2Vi
Q29yZTo6Q2xhc3MyICogY29udmVydGVkX2NsYXNzMnBhcmFtID0gTlVMTDsKKyAgICBpZiAoY2xh
c3MycGFyYW0gIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfY2xhc3MycGFyYW0gPSBXZWJL
aXQ6OmNvcmUoY2xhc3MycGFyYW0pOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252
ZXJ0ZWRfY2xhc3MycGFyYW0sIDApOworICAgIH0KKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
c3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAgICBnYm9vbGVhbiBy
ZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhDbGFzczJQYXJhbShjb252ZXJ0ZWRfY2xhc3MycGFyYW0s
IGNvbnZlcnRlZF9zdHJfYXJnKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8K
IH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitnbG9uZword2Via2l0X2RvbV90ZXN0X2NhbGxi
YWNrX2NhbGxiYWNrX3dpdGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENhbGxi
YWNrKiBzZWxmLCBXZWJLaXRET01DbGFzczMqIGNsYXNzM3BhcmFtKQoreworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RDYWxs
YmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY2xhc3MzcGFyYW0sIDApOworICAgIFdlYkNvcmU6OkNsYXNzMyAqIGNvbnZlcnRlZF9jbGFz
czNwYXJhbSA9IE5VTEw7CisgICAgaWYgKGNsYXNzM3BhcmFtICE9IE5VTEwpIHsKKyAgICAgICAg
Y29udmVydGVkX2NsYXNzM3BhcmFtID0gV2ViS2l0Ojpjb3JlKGNsYXNzM3BhcmFtKTsKKyAgICAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX2NsYXNzM3BhcmFtLCAwKTsKKyAgICB9
CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29u
dmVydGVkX2NsYXNzM3BhcmFtKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KK30K
KworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmlu
Z19saXN0KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlz
dCogbGlzdF9wYXJhbSkKK3sKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxpc3RfcGFyYW0sIDApOworICAgIFdl
YkNvcmU6OkRPTVN0cmluZ0xpc3QgKiBjb252ZXJ0ZWRfbGlzdF9wYXJhbSA9IE5VTEw7CisgICAg
aWYgKGxpc3RfcGFyYW0gIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfbGlzdF9wYXJhbSA9
IFdlYktpdDo6Y29yZShsaXN0X3BhcmFtKTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29udmVydGVkX2xpc3RfcGFyYW0sIDApOworICAgIH0KKyAgICBnYm9vbGVhbiByZXMgPSBpdGVt
LT5jYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnZlcnRlZF9saXN0X3BhcmFtKTsKKyAgICByZXR1
cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwg
RGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CiAjZW5kaWYg
LyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJp
dmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5oCmluZGV4IDNhZDZmZjQ0NDFhOWMwNGI2Y2E1MDIw
YTQ3YjVkZjMwYzk2YTUwN2UuLjg5N2Q2NjRlNTk5NzQwZjI5NjE2M2YwM2MyYmI0MTE1ZTkwYTgw
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRl
LmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUg
PHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKKwor
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktp
dERPTVRlc3RDYWxsYmFjayAqCiAgICAgd3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2Fs
bGJhY2sgKmNvcmVPYmplY3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNF
KSAqLworCiAjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9DQUxMQkFDS19QUklWQVRFX0ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
Y3BwCmluZGV4IGVhNjQ4ZjU2NDY3MTVhNDg2NmQzZDMwNzg2MzI2ODFjZjE4MWJiMzQuLjFmYjYy
N2M0MDQ3MDRhOTM0ZjQzYThiYzE5M2NjNThlNmQ1MmU1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21O
YW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0g
ICAgCisKIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcioga2l0KFdlYkNvcmU6OlRlc3RD
dXN0b21OYW1lZEdldHRlciogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwg
MCk7CkBAIC00NiwyNCArNDYsNiBAQCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGtp
dChXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG9iaikKIAogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihET01PYmplY3RDYWNoZTo6
cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKG9iaikpKTsKIH0KLSAg
ICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3RfY3Vz
dG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
c3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+YW5vdGhlckZ1bmN0
aW9uKGNvbnZlcnRlZF9zdHIpOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlciwgV0VC
S0lUX1RZUEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRl
c3RDdXN0b21OYW1lZEdldHRlciogY29yZShXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIq
IHJlcXVlc3QpCiB7CkBAIC03NSwxNCArNTcsMzEgQEAgV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogcmVxdWVzdCkKICAg
ICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRl
ciogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAw
KTsKKworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQg
cG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEg
Qy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBm
b3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0
LT5yZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRU
RVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9i
amVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLCB3ZWJraXRfZG9t
X3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlciwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwogZW51
bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3Vz
dG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAgICBXZWJL
aXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAg
IAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC05NCw2ICs5Myw3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAg
ICAgfQogCisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVk
X2dldHRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0xNDIsMTgg
KzE0MiwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRl
cl9pbml0KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldAogewogfQogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLVdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogd3JhcFRlc3RDdXN0b21OYW1l
ZEdldHRlcihXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmVPYmplY3QpCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdl
YktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKIHsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAgIHJl
dHVybiAgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IE5VTEwpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3Ry
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cik7CisgICAgaXRlbS0+YW5vdGhlckZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIpOwogfQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaAppbmRleCBmZWRkMTRhZmMxMjJhZDcw
MDYwZmQ0ZTBmNzI0ZWY0NWUxMTVhYWRhLi41NDgzNWE0MzA1MWUzNTIxMmM3ODJmNmU5NmZjODVl
NTYxYThhZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5j
bHVkZSAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyICoKICAgICB3cmFwVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciAqY29yZU9iamVjdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggMzc4OGYxODQ0NjQ4NDBiMjJmMzM4NTdkMDE5MTc1OGZkNjY2YTBhNy4uN2Y2MjM2MmE2
NzU4MmYwZGEwYjU5YzAzMmE2MDZkM2Q0MGU5Y2JkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisK
IFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50Q29u
c3RydWN0b3IqIG9iaikKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAt
NDYsMzMgKzQ2LDYgQEAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIGtpdChXZWJDb3Jl
OjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdl
YktpdDo6d3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdCAvLwotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1
Y3Rvcl9nZXRfYXR0cjEoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCi17Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nY2hhcioKLXdl
YmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0RE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKLSAgICBy
ZXR1cm4gcmVzOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3IsIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZUEVfRE9N
X09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQogewpA
QCAtODQsMTYgKzU3LDMzIEBAIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlKFdl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQogICAgIHJldHVybiBjb3JlT2Jq
ZWN0OwogfQogCitXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogd3JhcFRlc3RFdmVudENv
bnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2Fs
bCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2Ug
Y2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0
IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRj
aGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0
dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxM
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3Is
IFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCisKIGVudW0gewogICAgIFBST1BfMCwKICAgICBQUk9Q
X0FUVFIxLAogICAgIFBST1BfQVRUUjIsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAg
ICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
OwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0xMDUsNiArOTUs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVM
TDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9j
b25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0xNzks
MTggKzE3MCwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfaW5pdChXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgogewogfQogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiB3cmFwVGVzdEV2ZW50Q29u
c3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmVPYmplY3QpCitnY2hh
cioKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjEoV2ViS2l0RE9N
VGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29yZU9iamVjdCwgMCk7Ci0KLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5n
IGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QK
LSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5h
bGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0g
ICAgY29yZU9iamVjdC0+cmVmKCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMSgpKTsKKyAgICByZXR1
cm4gcmVzOworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNU
T1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9j
b25zdHJ1Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVj
dG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKKyAgICByZXR1cm4gcmVzOwogfQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKaW5kZXggYmMwZTg1Mjg5MDBlMzdmYzZiMzYz
NWRjZDdjZjEyNjRiZmUxZmRkNS4uMjUwYWJjNTMwYTlkODdhZjhiYmE2MTU3MTQ5NDEwNGVmNzQz
YTgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yICoKICAgICB3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3Io
V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggYzZhZDg2ZTQzNGQ5YzFi
MjQ0NTEyNTAwYTdiNDdiZTNiNDYyOTBhMC4uMWEyZTVlM2Y1ODQ5ZjdmOTk5MzJhYjA0ZGJmZmY1
Y2UyMWIzOTYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXQuY3BwCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQo
V2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwob2JqLCAwKTsKQEAgLTU0LDggKzU0LDMyIEBAIFdlYktpdERPTVRlc3RFdmVudFRhcmdldCog
a2l0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYktpdERPTVRlc3RFdmVudFRhcmdldCo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBX
ZWJLaXQ6OndyYXBUZXN0RXZlbnRUYXJnZXQob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0IC8vCisKK1dlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01U
ZXN0RXZlbnRUYXJnZXQqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVx
dWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVj
dCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworV2ViS2l0RE9NVGVzdEV2ZW50
VGFyZ2V0KiB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29y
ZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKwor
ICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRl
ciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxv
Y2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhl
CisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYo
KTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBO
VUxMKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0
KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCiB7CkBAIC04
OSw2MSArMTEzLDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQo
V2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPnJlbW92ZV9ldmVu
dF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xp
c3RlbmVyOwogfQogCi1XZWJLaXRET01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rhcmdl
dF9pdGVtKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgZ3Vsb25nIGluZGV4KQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7Ci0gICAgV2ViS2l0RE9NTm9kZSog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLWdi
b29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yICoq
ZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoZXZ0LCAwKTsKLSAgICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQgPSBOVUxMOwot
ICAgIGlmIChldnQgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0gV2ViS2l0Ojpj
b3JlKGV2dCk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9ldnQsIDAp
OwotICAgIH0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnYm9vbGVh
biByZXMgPSBpdGVtLT5kaXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotCiBHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXN0
RXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXQsIFdFQktJVF9UWVBFX0RP
TV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfVFlQRV9ET01fRVZFTlRfVEFS
R0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKIAotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXQqIHJlcXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7Ci0K
LSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAg
ICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBlbnVtIHsK
ICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90
YXJnZXRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0
KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAo
ZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpAQCAtMTU1LDYgKzEzMyw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQog
ICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMjAzLDE4ICsxODIsMzUgQEAgc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTVRlc3RFdmVudFRhcmdl
dCogcmVxdWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0RXZl
bnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBj
b3JlT2JqZWN0KQorV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRf
aXRlbShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIGd1bG9uZyBpbmRleCkKIHsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwg
cmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNh
bid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBz
dHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hp
bmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0ICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIFdlYktpdERPTU5vZGUqIHJlcyA9IFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQogCi0gICAgcmV0dXJuICBX
RUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01f
VEVTVF9FVkVOVF9UQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK2dib29sZWFuCit3
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTVRlc3RF
dmVudFRhcmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yICoqZXJyb3IpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZ0LCAw
KTsKKyAgICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQgPSBOVUxMOworICAgIGlmIChl
dnQgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0gV2ViS2l0Ojpjb3JlKGV2dCk7
CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9ldnQsIDApOworICAgIH0K
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXMgPSBp
dGVtLT5kaXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
czsKIH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmgKaW5kZXggZTU2MTZlM2RmZDY1NzhjYjhm
Yzc0ZGE0MGE1NTEyYmNlM2IxMDA0YS4uMDkwOGNlMTUxMDRhMzg2NGJkZGQ0NWE2ZWZmZjRkMGUw
NTdhYTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRh
cmdldFByaXZhdGUuaApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RFdmVu
dFRhcmdldC5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RFdmVu
dFRhcmdldCAqCiAgICAgd3JhcFRlc3RFdmVudFRhcmdldChXZWJDb3JlOjpUZXN0RXZlbnRUYXJn
ZXQgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNl
LmNwcAppbmRleCBlNmI1YWMyM2M3ZjFkZGEzZGEzNDc0MGQ0NDZiMDVjN2RjZWM4OWIyLi4wODJm
OGYyZWE4YmYzZTE0NzEzZDViYjIyMzE2ZmYxMTc4YTgyMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJm
YWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCkBAIC00
NCw4ICs0MiwxMCBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVk
ZSAid2Via2l0bWFyc2hhbC5oIgogCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIG9iaikKIHsKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNTUsMTQ4ICs1NSwzNyBAQCBXZWJLaXRET01UZXN0
SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqKQogCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RJbnRlcmZhY2UqPihET01PYmplY3RDYWNoZTo6cHV0
KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEludGVyZmFjZShvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQgLy8KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBw
bGVtZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaXRlbSk7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICov
Ci19CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBs
ZW1lbnRhbF9tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnLCBHRXJyb3IgKiplcnJvcikKK1dl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVz
dCkKIHsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7Ci0gICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKLSAgICBpZiAob2Jq
X2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3Jl
KG9ial9hcmcpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2Fy
ZywgMCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGl0ZW0sIGNvbnZlcnRlZF9zdHJf
YXJnLCBjb252ZXJ0ZWRfb2JqX2FyZywgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQot
ICAgIHJldHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKSAqLwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDAp
OwogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2Q0
KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKLSNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAgICBXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdElu
dGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotZ2NoYXIqCi13ZWJraXRfZG9t
X3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMShXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGl0ZW0p
KTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gTlVMTDsKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyAgICByZXR1cm4g
Y29yZU9iamVjdDsKIH0KIAotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9z
dXBwbGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQorV2ViS2l0RE9N
VGVzdEludGVyZmFjZSogd3JhcFRlc3RJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdEludGVyZmFjZSog
Y29yZU9iamVjdCkKIHsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpdGVt
KSk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2Uq
IHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50
ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBs
ZW1lbnRhbFN0cjIoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAgICAvKiBXZSBjYWxsIHJl
ZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4n
dCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3Ry
dWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5n
IGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdlYktpdERPTU5v
ZGUqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfbm9kZShXZWJL
aXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c3VwcGxlbWVudGFsTm9kZShpdGVtKSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJl
dHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKSAqLworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFDRShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBO
VUxMKSk7CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1l
bnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZh
bHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6
Ok5vZGUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7
Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsTm9kZShpdGVtLCBjb252ZXJ0ZWRfdmFs
dWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KSAqLwotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVz
dEludGVyZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZSwgV0VCS0lUX1RZUEVfRE9NX09C
SkVDVCkKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNv
cmUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVPYmplY3QsIDApOwotCi0gICAgcmV0dXJuIGNvcmVPYmplY3Q7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAogZW51bSB7CiAgICAgUFJPUF8wLAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQpAQCAtMjEwLDkgKzk5LDkgQEAgZW51bSB7CiAjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCiB9OwogCi0K
IHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQogeworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
ICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0yMjMsNiAr
MTEyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCiAKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7
CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKIAogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTMzMiwxOSArMjIyLDE5MCBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSogcmVxdWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0
SW50ZXJmYWNlKiB3cmFwVGVzdEludGVyZmFjZShXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3Jl
T2JqZWN0KQordm9pZAord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0
aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQogewotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVt
ZW50YWxNZXRob2QxKGl0ZW0pOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMTIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEg
QysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAg
ICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6
ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAg
Y29yZU9iamVjdC0+cmVmKCk7CitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxm
LCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZywgR0Vycm9y
ICoqZXJyb3IpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQorI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlmIChvYmpfYXJn
ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2Jq
X2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAw
KTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDIoaXRlbSwgY29udmVydGVkX3N0cl9hcmcs
IGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMg
PSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICByZXR1cm4gTlVM
TDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikg
Ki8KKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9u
MSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisg
ICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNF
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIE5VTEwpKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVu
dGFsX21ldGhvZDQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKKyNlbHNlCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0
cjEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RJ
bnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0cjEoaXRlbSkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCisjZWxzZQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBOVUxM
OwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
K30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxf
c3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9
IGNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVu
dGFsU3RyMihpdGVtKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0dXJuIE5V
TEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAq
LworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxf
c3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7
CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpdGVtLCBjb252ZXJ0ZWRfdmFsdWUpOworI2Vs
c2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorI2VuZGlm
IC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK1dlYktpdERP
TU5vZGUqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfbm9kZShX
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpOb2RlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbE5vZGUoaXRlbSkpOworICAgIFdlYktpdERPTU5vZGUqIHJlcyA9IFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlm
IC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4g
TlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRh
bF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVl
KQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpOb2RlICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnNldFN1cHBsZW1lbnRhbE5vZGUoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsKKyNlbHNlCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
SW50ZXJmYWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaAppbmRleCAwYTRlM2EyMDdj
NjA2NmNlYjBmMjA0NjJmNDRjZDE0MGIxY2JlMTA5Li4xMDIwZTAyZTdmZDRiNDNiYTZjMzQzNTM4
MzVjZjkyM2UwOWNiOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJ
bnRlcmZhY2VQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0
SW50ZXJmYWNlLmgiCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RJbnRlcmZhY2UgKgog
ICAgIHdyYXBUZXN0SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKmNvcmVPYmplY3Qp
OwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpICovCisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9QUklWQVRFX0gg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcAppbmRleCA1OTQ2ZWMwYzAwY2U3M2VmNWQzMDE1Y2Q5NzhkMzEyMmRk
ZGFlMGEwLi5iNTE2ODYzYzYxM2MxOTQ4MWUxZDVjNTU5MDFkYWY4NTY2NWYwYTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogb2JqKQog
ewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwxMyArNDYsNiBAQCBX
ZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcioga2l0KFdlYkNvcmU6OlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBvYgogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERP
TVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdl
YktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKG9iaikpKTsKIH0KLSAgICAKLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIsIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xp
c3RlbmVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAog
V2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHJlcXVlc3QpCiB7CkBAIC02NCwxNCArNTcsMzEgQEAgV2Vi
Q29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqIHIKICAgICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZU9iamVjdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKworICAgIHJl
dHVybiAgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIsIHdlYmtpdF9kb21f
dGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQor
CiBlbnVtIHsKICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsK
KwogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9i
amVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKQEAgLTgzLDYg
KzkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlz
dGVuZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3Jl
T2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7CiB9CiAKQEAgLTEzMSwxOCArMTQyLDMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWUK
IHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciogd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1
c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2Jq
ZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUg
ZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAq
LwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1Rf
TUVESUFfUVVFUllfTElTVF9MSVNURU5FUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RF
U1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOwot
fQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oCmluZGV4IDVm
YzY1MmYzZTEwYWZjNmUwZWY5OWFiOWUxOWE4NjJlODE5MmI0MDEuLmFjMjcwODhlODM0ZGE4Mjc5
NTM2NzY5MGZhOTJmOTU3MTRjNmQ1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oCkBAIC0y
NCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
V2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCIKKworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciAqCiAgICAgd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6
OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA2MDQxNzI5
NzkwMWY4ZjU4ZGU2ZTk4ZGQ2MmYzY2YzYzVlYzZjMjlmLi5lZmQ1MjhmOTQ5YmU3ZjE5MDEyM2Ux
MzMxOTdhMmFjYzQ3YjM5ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Vi
a2l0bWFyc2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciogb2Jq
KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwxMyArNDYsNiBA
QCBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3ROYW1lZENv
bnN0cnVjdG9yKiBvYmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVz
dE5hbWVkQ29uc3RydWN0b3Iob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
IC8vCi0KLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciwgd2Vi
a2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNv
cmUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCiB7CkBAIC02NCwxNCAr
NTcsMzEgQEAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAK
K1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3Io
V2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJh
dGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9y
ZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJl
LiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVm
KCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJ
VF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZ
UEVfRE9NX09CSkVDVCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9P
QkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpA
QCAtODMsNiArOTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3Ry
dWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3Jl
T2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21f
dGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwog
fQogCkBAIC0xMzEsMTggKzE0MiwzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1l
ZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yCiB7CiB9CiAK
LW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHdyYXBU
ZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZU9i
amVjdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0g
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
LQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgTlVMTCkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFt
ZWRDb25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCmluZGV4
IGI1ODUxNzFjMjBlOTZhOTAyODg3ZmM5NjhjOWU5NjU5ZjM5OTMyM2UuLjViYWQ3MGIwMWRjMTJl
Mjc1YzMwNDgzNDA3ZWViZWNjMzNlMTc5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9y
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4
IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9N
T2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKworCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqCiAgICAgd3Jh
cFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yICpjb3Jl
T2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggMjI3YWM5ZjA2
MmQ4ODg1NmU2ZTJhZjkxYzY1MDUzNjYyNDc2MTg4Yy4uMjI0ZDMyODI0ZjgwZjJlZTdjMzA3YWVj
OTAzNGYwMDI2ZmFhZDg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAg
LTY0LDcgKzY0LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewotICAgIAorCiBXZWJLaXRET01UZXN0T2JqKiBraXQoV2ViQ29yZTo6VGVzdE9iaiog
b2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC03NCwxOTU0ICs3
NCw1MTUgQEAgV2ViS2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikKIAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oRE9NT2JqZWN0Q2FjaGU6
OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RPYmoob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0IC8vCiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Qo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK1dlYkNvcmU6OlRlc3RPYmoqIGNvcmUoV2ViS2l0RE9N
VGVzdE9iaiogcmVxdWVzdCkKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT52b2lkTWV0aG9kKCk7Ci19
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CiAKLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBv
YmpfYXJnKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyX2FyZyk7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChvYmpfYXJnKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3Ry
X2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwp
IHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0g
ICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcpOwotICAgIH0KLSAgICBp
dGVtLT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVkX3N0cl9hcmcsIGNvbnZl
cnRlZF9vYmpfYXJnKTsKLX0KKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5j
b3JlT2JqZWN0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAot
Z2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRob2Qo
KTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCi1nbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVz
dE9iaiogb2JqX2FyZykKK1dlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0T2JqKFdlYkNvcmU6OlRl
c3RPYmoqIGNvcmVPYmplY3QpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHN0cl9hcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDAp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHN0cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2FyZyA9
IE5VTEw7Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb2Jq
X2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY29udmVydGVkX29ial9hcmcsIDApOwotICAgIH0KLSAgICBnbG9uZyByZXMgPSBpdGVtLT5p
bnRNZXRob2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29i
al9hcmcpOwotICAgIHJldHVybiByZXM7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29y
ZU9iamVjdCwgMCk7CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9i
ak1ldGhvZCgpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhl
ciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBh
IEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAg
U2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCku
CisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdlYktpdERPTVRlc3RPYmoqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0
T2JqKiBvYmpfYXJnKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzdHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChz
dHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxM
OwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcg
PSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
bnZlcnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0
T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhvZFdpdGhBcmdzKGludF9hcmcs
IGNvbnZlcnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZykpOwotICAgIFdlYktpdERPTVRl
c3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwor
ICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
RE9NX1RFU1RfT0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9CiAKLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfc2VxdWVuY2VfYXJnKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTXNlcXVlbmNlKiApCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbCgpOwotICAgIFdlYkNvcmU6OnNlcXVlbmNlICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAg
aWYgKCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKLSAgICB9Ci0gICAgaXRlbS0+bWV0
aG9kV2l0aFNlcXVlbmNlQXJnKGNvbnZlcnRlZF8pOwotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3Jl
cXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdFcnJvciAqKmVycm9y
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAw
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAgIGlmIChv
YmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNv
cmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpf
YXJnLCAwKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29udmVydGVkX3N0cl9hcmcsIGNvbnZl
cnRlZF9vYmpfYXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KK0dfREVGSU5FX1RZUEUo
V2ViS2l0RE9NVGVzdE9iaiwgd2Via2l0X2RvbV90ZXN0X29iaiwgV0VCS0lUX1RZUEVfRE9NX09C
SkVDVCkKIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFs
aXplZF9hcmcpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2Fy
Zyk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3Nlcmlh
bGl6ZWRfYXJnID0gTlVMTDsKLSAgICBpZiAoc2VyaWFsaXplZF9hcmcgIT0gTlVMTCkgewotICAg
ICAgICBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9h
cmcpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7
Ci0gICAgfQotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9h
cmcpOwotfQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRS
LAorICAgIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAorICAgIFBST1BfUkVBRF9PTkxZX1RF
U1RfT0JKX0FUVFIsCisgICAgUFJPUF9TSE9SVF9BVFRSLAorICAgIFBST1BfVU5TSUdORURfU0hP
UlRfQVRUUiwKKyAgICBQUk9QX0lOVF9BVFRSLAorICAgIFBST1BfTE9OR19MT05HX0FUVFIsCisg
ICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKKyAgICBQUk9QX1NUUklOR19BVFRSLAor
ICAgIFBST1BfVEVTVF9PQkpfQVRUUiwKKyAgICBQUk9QX1hNTF9PQkpfQVRUUiwKKyAgICBQUk9Q
X0NSRUFURSwKKyAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKKyAgICBQUk9QX1JFRkxF
Q1RFRF9JTlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFM
X0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSLAorICAgIFBST1BfUkVGTEVD
VEVEX1VSTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAorICAgIFBST1Bf
UkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX0NVU1RP
TV9CT09MRUFOX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX1VSTF9BVFRSLAorICAg
IFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCisgICAgUFJPUF9BVFRSX1dJVEhfU0VU
VEVSX0VYQ0VQVElPTiwKKyAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TiwKKyAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKKyAgICBQUk9Q
X1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNV
VElPTl9DT05URVhUX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJ
QlVURV9SQUlTRVMsCisgICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRS
SUJVVEVfUkFJU0VTLAorICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5E
X1NDUklQVF9TVEFURV9BVFRSSUJVVEUsCisgICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05f
Q09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCisgICAgUFJPUF9XSVRI
X1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FU
VFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19B
VFRSSUJVVEUsCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgUFJPUF9DT05ESVRJT05BTF9B
VFRSMSwKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMiwK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCisj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIFBST1BfQ09O
RElUSU9OQUxfQVRUUjMsCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLworICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICBQUk9QX01VVEFC
TEVfUE9JTlQsCisgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCisgICAgUFJPUF9TVFJJQ1RfRkxP
QVQsCisgICAgUFJPUF9ERVNDUklQVElPTiwKKyAgICBQUk9QX0lELAorICAgIFBST1BfSEFTSCwK
K307CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoa2V5KTsKLSAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRfa2V5ID0gTlVM
TDsKLSAgICBpZiAoa2V5ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2tleSA9IFdlYktp
dDo6Y29yZShrZXkpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9rZXkpOwot
ICAgIH0KLSAgICBpdGVtLT5pZGJLZXkoY29udmVydGVkX2tleSk7Ci19CiAKLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NRGljdGlvbmFyeSogb28sIFdlYktpdERPTURpY3Rpb25hcnkqIG9vbykKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9vKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7
Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7Ci0gICAgaWYg
KG9vICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsK
LSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28pOwotICAgIH0KLSAgICBXZWJD
b3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vbyA9IE5VTEw7Ci0gICAgaWYgKG9vbyAhPSBO
VUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKLSAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKLSAgICB9Ci0gICAgaXRlbS0+b3B0
aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9vb28pOwotfQorICAgIFdlYktpdERP
TU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisg
ICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdE9i
aiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmogKj4oZG9tX29iamVj
dC0+Y29yZU9iamVjdCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQo
Y29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAgICAgICAgZG9t
X29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQorCisKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9
CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQorc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwog
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0
U3RhdGVWb2lkKCk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9u
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPndpdGhTY3JpcHRTdGF0
ZVZvaWRFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9N
X1RFU1RfT0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1VO
U0lHTkVEX1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRT
aG9ydEF0dHIoKGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOwogICAg
IH0KLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKipl
cnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihlYykpOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIGNhc2UgUFJPUF9JTlRf
QVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJbnRBdHRyKChnX3ZhbHVlX2dldF9s
b25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9i
aiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhf
c2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlKCk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2Jq
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsKLSAg
ICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICBj
YXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2Vs
Zi0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoKGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7
CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdURjo6U3RyaW5nOjpmcm9tVVRGOChn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFBST1BfQ1JFQVRFOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldENyZWF0ZSgoZ192
YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+
c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIs
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFI6
CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfbG9uZyh2
YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURf
VU5TSUdORURfSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRVbnNp
Z25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWdu
ZWRpbnRlZ3JhbGF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUjoKKyAg
ICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1
ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVVJM
X0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVH
UkFMX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgKGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFOX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2Vs
Zi0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRC
b29sZWFuQXR0ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6Cisg
ICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9Q
X0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbigoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046CisgICAgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYt
PnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSksIGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRI
X0dFVFRFUl9FWENFUFRJT046CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYtPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhf
U0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24oV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVf
QVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFdpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZSgoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRS
MToKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIxKChnX3ZhbHVl
X2dldF9sb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKKyAgICB7CisgICAgICAg
IGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkp
OworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKSAqLworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKKyAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6CisgICAgeworICAg
ICAgICBjb3JlU2VsZi0+c2V0Q29uZGl0aW9uYWxBdHRyMygoZ192YWx1ZV9nZXRfbG9uZyh2YWx1
ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyAgICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgor
ICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFN0cmljdEZsb2F0KChnX3ZhbHVlX2dldF9mbG9h
dCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9JRDoKKyAg
ICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJZCgoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Vi
a2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0
X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0
cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
cygpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQo
KSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgb3B0KQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5k
X29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9u
ZyBvcHQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5k
T3B0aW9uYWxBcmcobm9uX29wdCwgb3B0KTsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29fb3B0aW9uYWxfYXJncyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQxLCBnbG9uZyBvcHQy
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJncyhub25fb3B0LCBvcHQxLCBvcHQyKTsKLX0KIAotdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cikKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCiB7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKICAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoY29udmVydGVkX3N0cik7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3Ry
aW5nX2lzX3VuZGVmaW5lZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+
bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoY29udmVydGVkX3N0cik7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lz
X251bGxfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoY29udmVydGVkX3N0cik7Ci19Ci0KLWdj
aGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNvbmRpdGlvbmFsTWV0
aG9kMSgpKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gTlVMTDsKLSNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9jb25kaXRpb25hbF9tZXRob2QyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
PmNvbmRpdGlvbmFsTWV0aG9kMigpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb25k
aXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmNvbmRp
dGlvbmFsTWV0aG9kMygpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRo
b2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5jbGFzc01l
dGhvZCgpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Rfd2l0
aF9vcHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCi17Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFy
Zyk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9vdmVy
bG9hZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgYXJnKQotewotI2lm
IEVOQUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm92ZXJsb2FkZWRNZXRob2Qx
KGFyZyk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiB0eXBlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3R5
cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7Ci0gICAgaXRlbS0+b3ZlcmxvYWRlZE1l
dGhvZDEoY29udmVydGVkX3R5cGUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwot
fQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTWEqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7
Ci0gICAgV2ViQ29yZTo6YSAqIGNvbnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICggIT0gTlVMTCkg
ewotICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogc2VsZiA9IFdFQktJ
VF9ET01fVEVTVF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlU2VsZiA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBS
T1BfUkVBRF9PTkxZX0lOVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2
YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5SW50QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGl0ZW0tPmNvbnZlcnQxKGNvbnZlcnRlZF8pOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2NvbnZlcnQyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWIqICkK
LXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6YiAqIGNv
bnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICggIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRf
ID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7
CisgICAgY2FzZSBQUk9QX1JFQURfT05MWV9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnJl
YWRPbmx5U3RyaW5nQXR0cigpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVtLT5j
b252ZXJ0Mihjb252ZXJ0ZWRfKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252
ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01jKiApCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OmMgKiBjb252ZXJ0ZWRfID0gTlVM
TDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29y
ZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAgIGNhc2UgUFJP
UF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUjoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3Jl
OjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+cmVhZE9ubHlUZXN0T2JqQXR0cigpOworICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgaXRlbS0+Y29udmVydDMoY29udmVydGVkXyk7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NZCogKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKLSAg
ICBXZWJDb3JlOjpkICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7Ci0g
ICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19yZXR1cm5faWZf
ZmFpbChjb252ZXJ0ZWRfKTsKKyAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKKyAgICB7CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0cigpKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIGl0ZW0tPmNvbnZlcnQ0KGNvbnZlcnRlZF8pOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ1KFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTWUqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAg
V2ViQ29yZTo6ZSAqIGNvbnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICggIT0gTlVMTCkgewotICAg
ICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkXyk7CisgICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6CisgICAg
eworICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBjb3JlU2VsZi0+dW5zaWduZWRTaG9y
dEF0dHIoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVtLT5jb252ZXJ0NShjb252
ZXJ0ZWRfKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX211
dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKLSAgICBXZWJLaXRET01TVkdQb2lu
dCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LVdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5p
bW11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBX
ZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5vcmFuZ2UoKTsKLX0KLQotV2ViS2l0RE9NYm9vbCoKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiBzdHIsIGdmbG9hdCBhLCBnaW50IGIsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHIsIDApOwotICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OmJvb2w+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c3RyaWN0RnVuY3Rpb24oY29udmVydGVkX3N0ciwgYSwg
YiwgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICBjYXNlIFBST1BfSU5UX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Nl
dF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aW50QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgUFJPUF9MT05HX0xPTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVf
c2V0X2ludDY0KHZhbHVlLCBjb3JlU2VsZi0+bG9uZ0xvbmdBdHRyKCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgorICAgIHsK
KyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCBjb3JlU2VsZi0+dW5zaWduZWRMb25n
TG9uZ0F0dHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5H
X0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0
VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUFJPUF9URVNUX09CSl9BVFRSOgorICAgIHsKKyAgICAgICAgUmVmUHRy
PFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT50ZXN0T2JqQXR0cigpOworICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1hNTF9PQkpfQVRUUjoKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+eG1sT2JqQXR0
cigpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5n
ZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0NSRUFURToKKyAg
ICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvcmVTZWxmLT5pc0NyZWF0
ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RS
SU5HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252
ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFs
dWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUjoK
KyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCBjb3JlU2VsZi0+Z2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2ln
bmVkaW50ZWdyYWxhdHRyQXR0cikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
Uk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0VVJMQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgorICAg
IHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmlu
Zyhjb3JlU2VsZi0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFN0cmluZ0F0dHJBdHRyKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9Q
X1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFOX0FUVFI6Cisg
ICAgeworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aGFzQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252
ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046CisgICAgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9u
Zyh2YWx1ZSwgY29yZVNlbGYtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046
CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+YXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmco
dmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKGVjKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NU
UklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6CisgICAgeworICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNV
VElPTl9DT05URVhUX0FUVFJJQlVURToKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpU
ZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIu
Z2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQ
VF9TVEFURV9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBj
b3JlU2VsZi0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKTsKKyAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVY
VF9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2Vs
Zi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoZWMpOworICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9D
T05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgUmVmUHRy
PFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9T
VEFURV9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3Jl
U2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcyhlYyk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQo
cHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9T
Q1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9XSVRIX1NQQUNFU19BVFRS
SUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29y
ZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0Ojpr
aXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lU
SF9TQ1JJUFRfQVJHVU1FTlRTX0FORF9DQUxMX1NUQUNLX0FUVFJJQlVURToKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIx
OgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmNvbmRp
dGlvbmFsQXR0cjEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlv
bjIpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIyOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmNvbmRpdGlvbmFsQXR0cjIoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMzoKKyAgICB7CisgICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIzKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKSAqLworICAgIGNhc2UgUFJPUF9DT05URU5UX0RPQ1VNRU5UOgorICAgIHsK
KyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBwdHIgPSBjb3JlU2VsZi0+Y29udGVu
dERvY3VtZW50KCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0Ojpr
aXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfTVVU
QUJMRV9QT0lOVDoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gcHRy
ID0gY29yZVNlbGYtPm11dGFibGVQb2ludCgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQUk9QX0lNTVVUQUJMRV9QT0lOVDoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJD
b3JlOjpTVkdQb2ludD4gcHRyID0gY29yZVNlbGYtPmltbXV0YWJsZVBvaW50KCk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgorICAgIHsKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGNvcmVTZWxmLT5zdHJpY3RGbG9hdCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9ERVNDUklQVElPTjoKKyAgICB7
CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5kZXNjcmlwdGlvbigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9JRDoKKyAgICB7CisgICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pZCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9IQVNIOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+aGFzaCgpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBXZWJLaXRET01ib29sKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5yZWFkT25seUludEF0dHIoKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRf
b25seV9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5yZWFkT25seVN0
cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJlczsKIH0KIAotV2ViS2l0RE9NVGVzdE9iaioKLXdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV90ZXN0X29ial9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFkT25seVRlc3RPYmpBdHRyKCkp
OwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsK
LSAgICByZXR1cm4gcmVzOwotfQogCi1nc2hvcnQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3No
b3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9vYmpfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hvcnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0K
IAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0U2hvcnRB
dHRyKHZhbHVlKTsKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9w
YXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwogfQogCi1n
dXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNz
X2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCiB7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGd1c2hvcnQgcmVzID0gaXRlbS0+dW5zaWduZWRTaG9ydEF0dHIoKTsKLSAgICBy
ZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9z
aG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1c2hvcnQgdmFsdWUpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFsdWUpOwotfQotCi1nbG9uZwot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50QXR0cigpOwotICAg
IHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldEludEF0dHIodmFsdWUpOwotfQotCi1naW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdpbnQ2NCByZXMgPSBpdGVtLT5sb25nTG9uZ0F0dHIoKTsKLSAgICByZXR1cm4g
cmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRl
bS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVlKTsKLX0KLQotZ3VpbnQ2NAotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXMgPSBpdGVtLT51bnNpZ25lZExvbmdM
b25nQXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1
aW50NjQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0
dHIodmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFy
KiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5n
QXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1
ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3Zh
bHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252
ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRUZXN0T2JqQXR0cihjb252ZXJ0ZWRf
dmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
eG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT54bWxPYmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdE9iaiogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYg
KHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3Jl
KHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAg
IH0KLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdib29s
ZWFuCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aXNDcmVhdGUo
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9j
cmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0
ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkc3RyaW5nYXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRl
Z3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0
dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZh
bHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1ndWxv
bmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGd1bG9u
ZyByZXMgPSBpdGVtLT5nZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKTsKLSAgICByZXR1cm4gcmVz
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRf
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpCi17Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQot
Ci1nYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVh
biByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRi
b29sZWFuYXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgdmFsdWUp
OwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsK
LX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIq
IHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlczsK
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
dmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgY29u
dmVydGVkX3ZhbHVlKTsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKTsKLSAgICBy
ZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
Y3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9v
bGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xl
YW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEJvb2xlYW5BdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFu
QXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdl
dFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0
cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2
YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+YXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24odmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhf
Z2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRl
bS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVydGVkX3ZhbHVlLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0g
ICAgfQotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dp
dGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJv
cikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKGNvbnZlcnRlZF92YWx1ZSwgZWMpOwotICAgIGlmIChlYykgewot
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ2xvbmcK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBp
dGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRl
bS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKHZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVz
dE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRl
bS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSk7Ci0gICAgV2ViS2l0RE9N
VGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlv
bl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0
T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFs
dWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFs
dWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQot
ICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKGNvbnZlcnRl
ZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0g
ICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93
aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhjb252
ZXJ0ZWRfdmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFp
c2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9NVGVz
dE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19
Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9j
b250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
VGVzdE9iaiogdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUg
PSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1
ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVy
dGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoY29u
dmVydGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9z
dGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSk7
Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwot
ICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhf
c2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252
ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNv
bnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOwot
fQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwotICAgIGlmIChlYykg
ewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
LSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICBXZWJL
aXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhl
Y3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikK
LXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkg
ewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0g
ICAgfQotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
KCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93
aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2Vz
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1
ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVM
TCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0t
PnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0
cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVO
QUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5j
b25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0K
LQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEp
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2YWx1ZSk7Ci0jZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOwotICAgIHJldHVybiByZXM7
Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1ZSk7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwot
fQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRp
dGlvbmFsQXR0cjMoKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0
aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPnNldENvbmRpdGlvbmFsQXR0cjModmFsdWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotV2ViS2l0RE9NRG9jdW1lbnQqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1l
bnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudERvY3VtZW50KCkpOwotICAgIFdl
YktpdERPTURvY3VtZW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIo
aXRlbS0+bXV0YWJsZVBvaW50KCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01TVkdQb2ludCogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6U1ZHUG9pbnQgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxM
OwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdl
YktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3Zh
bHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0TXV0YWJsZVBvaW50KGNvbnZlcnRlZF92YWx1ZSk7
Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW1tdXRh
YmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
aW1tdXRhYmxlUG9pbnQoKSk7Ci0gICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdlYkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsK
LSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJL
aXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1
ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRlZF92YWx1ZSk7
Ci19Ci0KLWdmbG9hdAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaWN0X2Zsb2F0KFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdmbG9hdCByZXMgPSBp
dGVtLT5zdHJpY3RGbG9hdCgpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxv
YXQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQodmFsdWUpOwot
fQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+
ZGVzY3JpcHRpb24oKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJZCh2YWx1ZSk7Ci19Ci0KLWdjaGFy
Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5oYXNoKCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLQotR19ERUZJTkVfVFlQRShXZWJL
aXRET01UZXN0T2JqLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNU
KQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6VGVzdE9iaiogY29yZShXZWJLaXRE
T01UZXN0T2JqKiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3Qs
IDApOwotCi0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OlRlc3RPYmoqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1cm4g
Y29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci1lbnVtIHsKLSAgICBQUk9Q
XzAsCi0gICAgUFJPUF9SRUFEX09OTFlfSU5UX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfU1RS
SU5HX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAgICBQUk9QX1NI
T1JUX0FUVFIsCi0gICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgIFBST1BfSU5UX0FU
VFIsCi0gICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9O
R19BVFRSLAotICAgIFBST1BfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9URVNUX09CSl9BVFRSLAot
ICAgIFBST1BfWE1MX09CSl9BVFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBST1BfUkVGTEVD
VEVEX1NUUklOR19BVFRSLAotICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCi0gICAg
UFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RF
RF9CT09MRUFOX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0gICAgUFJPUF9S
RUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFM
X0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9Q
X1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFIsCi0gICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VY
Q0VQVElPTiwKLSAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1Bf
U1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfU1RSSU5HX0FUVFJf
V0lUSF9TRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklC
VVRFLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFLAot
ICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywKLSAgICBQUk9QX1dJ
VEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVMsCi0gICAgUFJPUF9X
SVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwK
LSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVf
QVRUUklCVVRFX1JBSVNFUywKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhU
X0FORF9TQ1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFLAotICAgIFBST1BfV0lUSF9T
Q1JJUFRfQVJHVU1FTlRTX0FORF9DQUxMX1NUQUNLX0FUVFJJQlVURSwKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCi0gICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMywKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi0gICAgUFJPUF9D
T05URU5UX0RPQ1VNRU5ULAotICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKLSAgICBQUk9QX0lNTVVU
QUJMRV9QT0lOVCwKLSAgICBQUk9QX1NUUklDVF9GTE9BVCwKLSAgICBQUk9QX0RFU0NSSVBUSU9O
LAotICAgIFBST1BfSUQsCi0gICAgUFJPUF9IQVNILAotfTsKLQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRE
T01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwotICAgIAot
ICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRlc3RP
YmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0T2JqICo+KGRvbV9vYmpl
Y3QtPmNvcmVPYmplY3QpOwotCi0gICAgICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdl
dChjb3JlT2JqZWN0KTsKLSAgICAgICAgY29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAgICBk
b21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
c3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6Ci0g
ICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRTaG9ydEF0dHIoKGdfdmFsdWVfZ2V0
X3VpbnQodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSU5U
X0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0SW50QXR0cigoZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VTlNJ
R05FRF9MT05HX0xPTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRVbnNpZ25l
ZExvbmdMb25nQXR0cigoZ192YWx1ZV9nZXRfdWludDY0KHZhbHVlKSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgY29y
ZVNlbGYtPnNldFN0cmluZ0F0dHIoV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DUkVB
VEU6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0Q3JlYXRlKChnX3ZhbHVlX2dldF9ib29s
ZWFuKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxF
Q1RFRF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RGOjpTdHJpbmc6
OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAgICB7Ci0gICAg
ICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRF
R1JBTF9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVkSW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0
ckF0dHIsIChnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAg
Y29yZVNlbGYtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWRib29sZWFuYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICB7
Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1cmxhdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmlu
Zyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNU
RURfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxfQVRUUjoKLSAg
ICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfbG9uZyh2
YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURf
Q1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRCb29sZWFu
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0
ciwgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAg
IGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
VVJMQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dF
VFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKChnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSwgZWMpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQ
VElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGOjpTdHJp
bmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBU
SU9OOgotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
ICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6Ci0g
ICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKChnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jaWYgRU5BQkxF
KENvbmRpdGlvbjEpCi0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIxOgotICAgIHsKLSAg
ICAgICAgY29yZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjEoKGdfdmFsdWVfZ2V0X2xvbmcodmFs
dWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgKi8KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAg
Y2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIyOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNl
dENvbmRpdGlvbmFsQXR0cjIoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRp
dGlvbjIpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQot
ICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMzoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxm
LT5zZXRDb25kaXRpb25hbEF0dHIzKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLwotICAgIGNhc2UgUFJPUF9TVFJJQ1RfRkxPQVQ6Ci0gICAgewotICAgICAg
ICBjb3JlU2VsZi0+c2V0U3RyaWN0RmxvYXQoKGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0lEOgotICAgIHsKLSAgICAgICAg
Y29yZVNlbGYtPnNldElkKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2JqZWN0KTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBz
d2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSOgotICAg
IHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5SW50
QXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUFEX09OTFlf
U1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBj
b252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5yZWFkT25seVN0cmluZ0F0dHIoKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFQURfT05MWV9URVNUX09CSl9BVFRS
OgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxm
LT5yZWFkT25seVRlc3RPYmpBdHRyKCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFBST1BfU0hPUlRfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY29yZVNlbGYtPnNob3J0QXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRf
dWludCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkU2hvcnRBdHRyKCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0lOVF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1
ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmludEF0dHIoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFBST1BfTE9OR19MT05HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3Zh
bHVlX3NldF9pbnQ2NCh2YWx1ZSwgY29yZVNlbGYtPmxvbmdMb25nQXR0cigpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUjoKLSAg
ICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVk
TG9uZ0xvbmdBdHRyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NU
UklOR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29u
dmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cigpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfVEVTVF9PQkpfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+dGVzdE9iakF0dHIoKTsKLSAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FUVFI6Ci0gICAg
ewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9i
akF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChw
dHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DUkVBVEU6
Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aXND
cmVhdGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVE
X1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
Y29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FU
VFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdl
dFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1
bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVf
dGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhT
dHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRTdHJpbmdBdHRyQXR0cikpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRS
OgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhh
c0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0
dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VT
VE9NX1VSTF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
Y29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBU
SU9OOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3Ry
aW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihlYykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJP
UF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9F
WEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEU6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlKCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQo
cHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9T
Q1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRy
ID0gY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYyk7Ci0gICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NP
TlRFWFRfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29y
ZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKTsKLSAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJ
T05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpOwotICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0g
Y29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoZWMpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6
a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJ
VEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNf
QVRUUklCVVRFOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9
IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZSgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktp
dDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9Q
X1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEU6Ci0gICAgewot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9B
VFRSMToKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5j
b25kaXRpb25hbEF0dHIxKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKLSAgICB7Ci0gICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIyKCkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6Ci0gICAgewotICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxBdHRyMygpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikgKi8KLSAgICBjYXNlIFBST1BfQ09OVEVOVF9ET0NVTUVOVDoKLSAg
ICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gcHRyID0gY29yZVNlbGYtPmNv
bnRlbnREb2N1bWVudCgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktp
dDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9Q
X01VVEFCTEVfUE9JTlQ6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+
IHB0ciA9IGNvcmVTZWxmLT5tdXRhYmxlUG9pbnQoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9JTlQ6Ci0gICAgewotICAgICAgICBSZWZQdHI8
V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0ciA9IGNvcmVTZWxmLT5pbW11dGFibGVQb2ludCgpOwotICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklDVF9GTE9BVDoKLSAgICB7
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+c3RyaWN0RmxvYXQo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVTQ1JJUFRJT046Ci0g
ICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+ZGVzY3JpcHRp
b24oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSUQ6Ci0gICAgewot
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aWQoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSEFTSDoKLSAgICB7Ci0gICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmhhc2go
KSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29i
al9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCi17Ci0KLSAgICBpZiAoR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLSAgICAg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3RlZChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAgR09i
amVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwot
ICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXpl
OwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0g
d2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RlZDsKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxpemU7CisgICAgZ29iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2NvbnN0cnVjdGVkOwogCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1JF
QURfT05MWV9JTlRfQVRUUiwKQEAgLTIyNzksMTEzICs4NDAsMTU4NCBAQCBHX01BWExPTkcsIC8q
IG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAqLwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNvbmRpdGlv
bmFsLWF0dHIxIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0cjEiLCAv
KiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5jb25k
aXRpb25hbC1hdHRyMSIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mg
c3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXgg
Ki8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRpb25h
bC1hdHRyMSIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIxIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29uZGl0
aW9uYWwtYXR0cjEiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KK0dfTUFYTE9ORywgLyogbWF4ICov
CiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElP
TkFMX0FUVFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIyIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29u
ZGl0aW9uYWwtYXR0cjIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAg
Z2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdp
dGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwor
R19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNvbmRp
dGlvbmFsLWF0dHIzIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0cjMi
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5j
b25kaXRpb25hbC1hdHRyMyIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBt
YXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImNvbnRlbnQt
ZG9jdW1lbnQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jb250ZW50LWRvY3VtZW50IiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NRG9jdW1lbnQqIFRl
c3RPYmouY29udGVudC1kb2N1bWVudCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBl
eHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fRE9DVU1FTlQsIC8qIGdv
YmplY3QgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIm11dGFibGUtcG9pbnQiLCAvKiBu
YW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0ZXN0X29ial9tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24g
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLm11dGFibGUtcG9p
bnQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfRE9NX1NWR19QT0lOVCwgLyogZ29iamVjdCB0eXBlICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfSU1NVVRBQkxFX1BPSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgiaW1tdXRhYmxlLXBvaW50IiwgLyogbmFtZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dF9vYmpfaW1tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQt
d3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLmltbXV0YWJsZS1wb2ludCIsIC8qIGxv
bmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJJQ1Rf
RkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxvYXQoInN0cmljdC1mbG9hdCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmljdC1mbG9h
dCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnZmxvYXQgVGVzdE9i
ai5zdHJpY3QtZmxvYXQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9j
IHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsIC8qIG1pbiAqLworR19NQVhGTE9BVCwgLyog
bWF4ICovCiswLjAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9ERVNDUklQVElPTiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJkZXNjcmlwdGlv
biIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2Rlc2NyaXB0aW9uIiwgLyogc2hvcnQgZGVzY3Jp
cHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlYWQtb25seSAgZ2xvbmcgVGVzdE9iai5kZXNjcmlwdGlvbiIsIC8qIGxv
bmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01J
TkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoImlkIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaWQiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5pZCIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcs
IC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9IQVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygiaGFzaCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2hhc2giLCAvKiBzaG9ydCBk
ZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnY2hhciogVGVzdE9iai5oYXNoIiwgLyogbG9u
Z2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAv
KiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9pbml0KFdlYktpdERPTVRlc3RPYmoqIHJlcXVlc3Qp
Cit7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2QoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT52b2lkTWV0aG9kKCk7Cit9CisK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJL
aXRET01UZXN0T2JqKiBvYmpfYXJnKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c3RyX2FyZyk7CisgICAgZ19yZXR1cm5faWZfZmFpbChvYmpfYXJnKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlmIChv
YmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNv
cmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcp
OworICAgIH0KKyAgICBpdGVtLT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVk
X3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnKTsKK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVz
dF9vYmpfaW50X21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRob2QoKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhfYXJncyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywg
V2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2Jq
X2FyZywgMCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgoc3RyX2FyZyk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9v
YmpfYXJnID0gTlVMTDsKKyAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOworICAgICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7CisgICAgfQorICAgIGdsb25nIHJlcyA9
IGl0ZW0tPmludE1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZlcnRlZF9zdHJfYXJnLCBjb252
ZXJ0ZWRfb2JqX2FyZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViS2l0RE9NVGVzdE9iaioK
K3dlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitX
ZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9kX3dpdGhfYXJn
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3Ry
X2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwob2JqX2FyZywgMCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZl
cnRlZF9vYmpfYXJnID0gTlVMTDsKKyAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7CisgICAgICAg
IGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOworICAgICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7CisgICAgfQorICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5vYmpNZXRo
b2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcp
KTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVu
Y2UqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7CisgICAgV2ViQ29yZTo6
c2VxdWVuY2UgKiBjb252ZXJ0ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAg
ICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF8pOworICAgIH0KKyAgICBpdGVtLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoY29u
dmVydGVkXyk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdF
cnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzdHJfYXJnLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChz
dHJfYXJnKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxM
OworICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcg
PSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
bnZlcnRlZF9vYmpfYXJnLCAwKTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29udmVydGVkX3N0
cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2Jq
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwor
dm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZF9hcmcp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7CisgICAg
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRfYXJn
ID0gTlVMTDsKKyAgICBpZiAoc2VyaWFsaXplZF9hcmcgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOworICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7CisgICAgfQor
ICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFp
bChrZXkpOworICAgIFdlYkNvcmU6OklEQktleSAqIGNvbnZlcnRlZF9rZXkgPSBOVUxMOworICAg
IGlmIChrZXkgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfa2V5ID0gV2ViS2l0Ojpjb3Jl
KGtleSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2tleSk7CisgICAgfQor
ICAgIGl0ZW0tPmlkYktleShjb252ZXJ0ZWRfa2V5KTsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01E
aWN0aW9uYXJ5KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29vKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwob28pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob29vKTsKKyAgICBX
ZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vID0gTlVMTDsKKyAgICBpZiAob28gIT0g
TlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUob28pOworICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vbyk7CisgICAgfQorICAgIFdlYkNvcmU6OkRp
Y3Rpb25hcnkgKiBjb252ZXJ0ZWRfb29vID0gTlVMTDsKKyAgICBpZiAob29vICE9IE5VTEwpIHsK
KyAgICAgICAgY29udmVydGVkX29vbyA9IFdlYktpdDo6Y29yZShvb28pOworICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vb28pOworICAgIH0KKyAgICBpdGVtLT5vcHRpb25zT2Jq
ZWN0KGNvbnZlcnRlZF9vbywgY29udmVydGVkX29vbyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdF
cnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKwordm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwor
fQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9z
dGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndp
dGhTY3JpcHRTdGF0ZU9iaigpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT53aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9u
KGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICB9Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dp
dGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vy
cm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6
OmdldFB0cihpdGVtLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
V2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJl
dHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhl
Y3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGUo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKCk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoq
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9z
Y3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3Ig
KiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24oZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfd2l0aF9zcGFjZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3Bh
Y2VzKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdl
dCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF93aXRoX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Cit9CisK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19h
bmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGds
b25nIG9wdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZyhub25fb3B0LCBvcHQpOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25nIG9wdDEsIGdsb25nIG9w
dDIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzKG5vbl9vcHQsIG9wdDEsIG9wdDIpOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBjb25zdCBnY2hhciogc3RyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c3RyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHN0cik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKGNvbnZlcnRlZF9z
dHIpOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFs
X3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHN0cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOworICAgIGl0
ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKGNvbnZlcnRlZF9zdHIpOwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmlu
Z19pc19udWxsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7CisgICAgaXRlbS0+
bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKGNvbnZlcnRlZF9zdHIpOworfQor
CitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5jb25kaXRpb25h
bE1ldGhvZDEoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworI2lmIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5j
b25kaXRpb25hbE1ldGhvZDIoKTsKKyNlbHNlCisjaWYgIUVOQUJMRShDb25kaXRpb24xKQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorI2VuZGlmCisj
aWYgIUVOQUJMRShDb25kaXRpb24yKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2Nv
bmRpdGlvbmFsX21ldGhvZDMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y29u
ZGl0aW9uYWxNZXRob2QzKCk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Qo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGFzc01ldGhv
ZCgpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Rfd2l0aF9v
cHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKGFyZyk7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vdmVybG9h
ZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgYXJnKQoreworI2lmIEVO
QUJMRShDb25kaXRpb24xKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPm92ZXJsb2FkZWRNZXRob2QxKGFy
Zyk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlv
bjEiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBj
b25zdCBnY2hhciogdHlwZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHR5cGUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF90eXBl
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHR5cGUpOworICAgIGl0ZW0tPm92ZXJsb2FkZWRNZXRo
b2QxKGNvbnZlcnRlZF90eXBlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiQ29uZGl0aW9uMSIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NYSogKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsK
KyAgICBXZWJDb3JlOjphICogY29udmVydGVkXyA9IE5VTEw7CisgICAgaWYgKCAhPSBOVUxMKSB7
CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+Y29udmVydDEoY29udmVydGVk
Xyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NYiogKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoKTsKKyAgICBXZWJDb3JlOjpiICogY29udmVydGVkXyA9IE5VTEw7CisgICAgaWYgKCAhPSBO
VUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+Y29udmVydDIoY29u
dmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDMoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYyogKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpjICogY29udmVydGVkXyA9IE5VTEw7CisgICAgaWYg
KCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+Y29udmVy
dDMoY29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NZCogKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpkICogY29udmVydGVkXyA9IE5VTEw7Cisg
ICAgaWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsK
KyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+
Y29udmVydDQoY29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29u
dmVydDUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NZSogKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjplICogY29udmVydGVkXyA9IE5V
TEw7CisgICAgaWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNv
cmUoKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAg
aXRlbS0+Y29udmVydDUoY29udmVydGVkXyk7Cit9CisKK1dlYktpdERPTVNWR1BvaW50Kgord2Vi
a2l0X2RvbV90ZXN0X29ial9tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9p
bnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7Cisg
ICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9v
YmpfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKKyAgICBXZWJLaXRE
T01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiBy
ZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+b3JhbmdlKCk7Cit9CisKK1dlYktpdERP
TWJvb2wqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3N0cmljdF9mdW5jdGlvbihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyLCBnZmxvYXQgYSwgZ2ludCBiLCBHRXJyb3IgKipl
cnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyLCAw
KTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHN0cik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpib29sPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnN0cmljdEZ1bmN0aW9u
KGNvbnZlcnRlZF9zdHIsIGEsIGIsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTWJvb2wqIHJlcyA9
IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnbG9uZwor
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPnJlYWRP
bmx5SW50QXR0cigpOworICAgIHJldHVybiByZXM7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJL
aXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3Rlc3Rfb2Jq
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnJlYWRP
bmx5VGVzdE9iakF0dHIoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0Ojpr
aXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK2dzaG9ydAord2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hvcnRBdHRyKCk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRl
bS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKK30KKworZ3VzaG9ydAord2Via2l0X2RvbV90ZXN0X29i
al9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkU2hvcnRBdHRyKCk7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5z
aWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndXNob3J0IHZhbHVlKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkU2hvcnRBdHRyKHZhbHVlKTsKK30KKwor
Z2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludEF0dHIo
KTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9p
bnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRJbnRBdHRyKHZhbHVlKTsKK30KKworZ2ludDY0Cit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnaW50NjQgcmVzID0gaXRlbS0+bG9uZ0xvbmdBdHRyKCk7CisgICAg
cmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19sb25n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0IHZhbHVlKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldExvbmdMb25nQXR0cih2YWx1ZSk7Cit9CisKK2d1aW50NjQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzID0gaXRlbS0+dW5zaWdu
ZWRMb25nTG9uZ0F0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBndWludDY0IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkTG9u
Z0xvbmdBdHRyKHZhbHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOwor
ICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmlu
Z19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNl
dFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBn
X3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRlc3RPYmpBdHRyKCkpOworICAgIFdlYktpdERPTVRl
c3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0
ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0VGVzdE9iakF0dHIoY29u
dmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQ
dHIoaXRlbS0+eG1sT2JqQXR0cigpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0
X2RvbV90ZXN0X29ial9zZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwor
ICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktp
dDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVl
KTsKKyAgICB9CisgICAgaXRlbS0+c2V0WE1MT2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOworfQor
CitnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmlz
Q3JlYXRlKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldENyZWF0ZSh2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0
X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0
cmluZ2F0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOworfQorCitnbG9uZwor
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+
Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3Jh
bGF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
bG9uZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKK30K
KworZ3Vsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndWxvbmcgcmVzID0gaXRlbS0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cik7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3Vu
c2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vsb25nIHZhbHVl
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIsIHZhbHVl
KTsKK30KKworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29s
ZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkYm9vbGVhbmF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEJvb2xl
YW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIs
IHZhbHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVz
OworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIGNvbnZlcnRlZF92
YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0
cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOworICAgIHJldHVy
biByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJp
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0
dHIsIGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cik7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVm
bGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIHZhbHVlKTsKK30K
KworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9v
bGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
Qm9vbGVhbkF0dHJBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJM
QXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKK30KKworZ2xvbmcK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5h
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2xvbmcKK3dlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldEF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhcioKK3dlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0
cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2No
YXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGNvbnZlcnRlZF92YWx1
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdf
YXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+
c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwor
dm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9y
ICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisK
K2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcg
cmVzID0gaXRlbS0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCk7CisgICAgcmV0dXJuIHJlczsK
K30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0
cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSh2YWx1ZSk7Cit9CisKK1dlYktp
dERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRp
b25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCkpOworICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1
cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9NVGVzdE9iaiogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAg
aWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpj
b3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwor
ICAgIH0KKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShj
b252ZXJ0ZWRfdmFsdWUpOworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0
X29ial9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cyhlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAg
ICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJv
cl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVz
Yy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01UZXN0T2JqKgord2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmli
dXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKSk7CisgICAgaWYgKGVjKSB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwor
ICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJX
RUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktp
dERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4g
cmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVj
dXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVk
X3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0
ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzKGNvbnZlcnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9z
Y3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdl
dCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0
ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAg
ICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoY29udmVydGVkX3Zh
bHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dp
dGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3Jh
aXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cisg
ICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAg
IHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoq
ZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9
IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
KyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGNvbnZlcnRlZF92YWx1
ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfd2l0aF9z
cGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihp
dGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZSgpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRo
X3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9i
aiogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVl
ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVl
KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAg
ICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90
ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sK
KyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0g
aXRlbS0+Y29uZGl0aW9uYWxBdHRyMSgpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworI2lmIEVOQUJMRShDb25kaXRpb24x
KQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjEodmFsdWUpOworI2Vsc2UK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKICNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRpb25hbC1hdHRyMiIs
IC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIyIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29uZGl0aW9uYWwtYXR0
cjIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KLUdfTUFYTE9ORywgLyogbWF4ICovCi0wLCAvKiBk
ZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOworICAgIHJldHVybiByZXM7
CisjZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgorI2lmICFFTkFCTEUoQ29uZGl0aW9u
MikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNl
bmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CiAjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRp
dGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1ZSk7Cisj
ZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgorI2lmICFFTkFCTEUoQ29uZGl0aW9uMikK
KyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRp
ZgorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
K30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCit7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJ
T05BTF9BVFRSMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKCJjb25kaXRpb25hbC1hdHRyMyIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2Nv
bmRpdGlvbmFsLWF0dHIzIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUg
IGdsb25nIFRlc3RPYmouY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3
aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8K
LUdfTUFYTE9ORywgLyogbWF4ICovCi0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0
aW9uYWxBdHRyMygpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4o
MCk7CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAq
LwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgi
Y29udGVudC1kb2N1bWVudCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbnRlbnQtZG9jdW1l
bnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBXZWJLaXRET01Eb2N1
bWVudCogVGVzdE9iai5jb250ZW50LWRvY3VtZW50IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0
aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9ET0NVTUVO
VCwgLyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5ULAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgibXV0YWJsZS1wb2lu
dCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX211dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmoubXV0
YWJsZS1wb2ludCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1
ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUg
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJpbW11dGFibGUtcG9pbnQiLCAvKiBuYW1lICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0X29ial9pbW11dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmouaW1tdXRhYmxlLXBvaW50
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX0RPTV9TVkdfUE9JTlQsIC8qIGdvYmplY3QgdHlwZSAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1NUUklDVF9GTE9BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19mbG9hdCgic3RyaWN0LWZsb2F0IiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfc3Ry
aWN0LWZsb2F0IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdmbG9h
dCBUZXN0T2JqLnN0cmljdC1mbG9hdCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBl
eHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwgLyogbWluICovCi1HX01BWEZM
T0FULCAvKiBtYXggKi8KLTAuMCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU0NSSVBUSU9OLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImRl
c2NyaXB0aW9uIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfZGVzY3JpcHRpb24iLCAvKiBzaG9y
dCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnbG9uZyBUZXN0T2JqLmRlc2NyaXB0aW9u
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVm
YXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfbG9uZygiaWQiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9pZCIsIC8qIHNo
b3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmlkIiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0hBU0gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKCJoYXNoIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaGFzaCIsIC8q
IHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdjaGFyKiBUZXN0T2JqLmhhc2gi
LCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiIsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Cit9CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIz
KHZhbHVlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29u
ZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9u
MiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAq
LworfQogCitXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRl
bnRfZG9jdW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIHJlcyA9IFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQogCitXZWJLaXRET01TVkdQ
b2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
VkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5tdXRhYmxlUG9pbnQoKSk7CisgICAg
V2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICBy
ZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2luaXQoV2Vi
S2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X211
dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZh
bHVlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNv
cmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0g
TlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwor
ICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0
ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOwogfQogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLVdlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0T2JqKFdlYkNvcmU6OlRlc3RPYmoqIGNv
cmVPYmplY3QpCitXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2lt
bXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmltbXV0YWJsZVBv
aW50KCkpOworICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5n
ZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KIAotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVy
IHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEg
QysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBT
ZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYoKS4K
LSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01T
VkdQb2ludCogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6U1ZHUG9pbnQgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlm
ICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29y
ZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAg
ICB9CisgICAgaXRlbS0+c2V0SW1tdXRhYmxlUG9pbnQoY29udmVydGVkX3ZhbHVlKTsKK30KIAot
ICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
RE9NX1RFU1RfT0JKLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitnZmxvYXQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+c3RyaWN0RmxvYXQoKTsKKyAg
ICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3ZvaWQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxv
YXQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQodmFsdWUpOwor
fQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+
ZGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnbG9uZword2Via2l0X2RvbV90
ZXN0X29ial9nZXRfaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJZCh2YWx1ZSk7Cit9CisKK2djaGFy
Kgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5oYXNoKCkpOworICAgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqUHJpdmF0ZS5oCmluZGV4IDk2NzIyZjc5NzUzYzM5ZDJkMWFjZDJlYTcwNGJh
NzdkZmJiYzU1NjEuLjJmN2FlMmFlYTg3ZThmMTcwNTZiMmZkNjhlYzU5NTRkZWVmNTRiNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmpQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaApAQCAtMjQsNiArMjQs
OCBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERP
TU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RPYmouaCIKKworCiBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICBXZWJLaXRET01UZXN0T2JqICoKICAgICB3cmFwVGVzdE9iaihXZWJDb3JlOjpUZXN0T2Jq
ICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggODQ1YTM3
MzdjMWExMmNhYTQ3YTBmMmEwYTE2ZDk0ZjU2YjhlMjAzMC4uZGE5NTlkZGRiOGNkMjM3MzU0MzY4
NGEyMjZmODEyNzM4NzQyZTViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAg
LTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgImNvbmZp
Zy5oIgogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgpAQCAtNDIsOCArNDAsMTAgQEAKICNpbmNsdWRlICJ3ZWJraXRn
bG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAorI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKwogbmFtZXNwYWNlIFdlYktpdCB7
Ci0gICAgCisKIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGtp
dChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBvYmopCiB7CiAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTUzLDE1MyArNTMsMzcgQEAgV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRl
c3RTZXJpYWxpemVkU2NyaXB0VmEKIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChv
YmosIFdlYktpdDo6d3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uob2JqKSkp
OwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xp
c3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNm
ZXJfbGlzdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKGRhdGEpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodHJhbnNmZXJfbGlzdCk7
Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX2RhdGEgPSBO
VUxMOwotICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2RhdGEgPSBX
ZWJLaXQ6OmNvcmUoZGF0YSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2Rh
dGEpOwotICAgIH0KLSAgICBXZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0
ID0gTlVMTDsKLSAgICBpZiAodHJhbnNmZXJfbGlzdCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZl
cnRlZF90cmFuc2Zlcl9saXN0ID0gV2ViS2l0Ojpjb3JlKHRyYW5zZmVyX2xpc3QpOwotICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0KTsKLSAgICB9Ci0gICAg
aXRlbS0+YWNjZXB0VHJhbnNmZXJMaXN0KGNvbnZlcnRlZF9kYXRhLCBjb252ZXJ0ZWRfdHJhbnNm
ZXJfbGlzdCk7Ci19CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2VfbXVsdGlfdHJhbnNmZXJfbGlzdChXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqIGZpcnN0LCBXZWJLaXRET01BcnJheSogdHgsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogc2Vjb25kLCBXZWJLaXRET01BcnJheSogdHh4KQorV2ViQ29yZTo6VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlyc3QpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwodHgpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vjb25kKTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHR4eCk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVk
X2ZpcnN0ID0gTlVMTDsKLSAgICBpZiAoZmlyc3QgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0
ZWRfZmlyc3QgPSBXZWJLaXQ6OmNvcmUoZmlyc3QpOwotICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF9maXJzdCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVydGVk
X3R4ID0gTlVMTDsKLSAgICBpZiAodHggIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdHgg
PSBXZWJLaXQ6OmNvcmUodHgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90
eCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRl
ZF9zZWNvbmQgPSBOVUxMOwotICAgIGlmIChzZWNvbmQgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfc2Vjb25kID0gV2ViS2l0Ojpjb3JlKHNlY29uZCk7Ci0gICAgICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY29udmVydGVkX3NlY29uZCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkFycmF5ICogY29u
dmVydGVkX3R4eCA9IE5VTEw7Ci0gICAgaWYgKHR4eCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZl
cnRlZF90eHggPSBXZWJLaXQ6OmNvcmUodHh4KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfdHh4KTsKLSAgICB9Ci0gICAgaXRlbS0+bXVsdGlUcmFuc2Zlckxpc3QoY29udmVy
dGVkX2ZpcnN0LCBjb252ZXJ0ZWRfdHgsIGNvbnZlcnRlZF9zZWNvbmQsIGNvbnZlcnRlZF90eHgp
OwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwogCi1XZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRf
dmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
Z19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT52YWx1ZSgpKTsKLSAgICBXZWJLaXRET01TZXJpYWxp
emVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1
cm4gcmVzOwotfQorICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3Qp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwogCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF92YWx1ZShX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRE
T01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYg
KHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3Jl
KHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAg
IH0KLSAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworICAgIHJldHVybiBjb3Jl
T2JqZWN0OwogfQogCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1
ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQorV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogd3JhcFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogY29yZU9iamVjdCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZG9ubHlWYWx1ZSgpKTsKLSAgICBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzOwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmpl
Y3QsIDApOwogCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfdmFsdWUoV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2Fj
aGVkVmFsdWUoKSk7Ci0gICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBX
ZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAgICAvKiBXZSBj
YWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3
ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmpl
Y3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1h
dGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2Nh
Y2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBz
ZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwot
ICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5V
TEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0g
V2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRf
dmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRDYWNoZWRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUp
OworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJ
UFRfVkFMVUVfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9CiAKLVdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jYWNoZWRSZWFk
b25seVZhbHVlKCkpOwotICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKIAorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKIAogR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZShXZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwotCi0gICAgV2ViQ29yZTo6VGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVD
VChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9i
amVjdCwgMCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiBlbnVtIHsKICAgICBQUk9QXzAsCiAgICAgUFJPUF9WQUxVRSwKQEAgLTIwOCw5ICs5
Miw5IEBAIGVudW0gewogICAgIFBST1BfQ0FDSEVEX1JFQURPTkxZX1ZBTFVFLAogfTsKIAotCiBz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0g
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29y
ZU9iamVjdCkgewpAQCAtMjIxLDYgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCoKIAog
ICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCiAgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtMzI0LDE5ICsyMDksMTc1IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfaW5pdChXZWJLaXRET01UZXN0CiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogd3JhcFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogY29yZU9iamVjdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNmZXJfbGlzdCkKIHsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKyNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHRyYW5zZmVyX2xpc3QpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNv
bnZlcnRlZF9kYXRhID0gTlVMTDsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIGNv
bnZlcnRlZF9kYXRhID0gV2ViS2l0Ojpjb3JlKGRhdGEpOworICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF9kYXRhKTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0
ZWRfdHJhbnNmZXJfbGlzdCA9IE5VTEw7CisgICAgaWYgKHRyYW5zZmVyX2xpc3QgIT0gTlVMTCkg
eworICAgICAgICBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IFdlYktpdDo6Y29yZSh0cmFuc2Zl
cl9saXN0KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdHJhbnNmZXJfbGlz
dCk7CisgICAgfQorICAgIGl0ZW0tPmFjY2VwdFRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZGF0YSwg
Y29udmVydGVkX3RyYW5zZmVyX2xpc3QpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFu
IHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBv
YmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRo
ZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAg
ICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX211bHRpX3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBmaXJzdCwgV2ViS2l0RE9NQXJyYXkqIHR4LCBXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqIHNlY29uZCwgV2ViS2l0RE9NQXJyYXkqIHR4eCkKK3sKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChmaXJzdCk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbCh0eCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWNvbmQpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwodHh4KTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUg
KiBjb252ZXJ0ZWRfZmlyc3QgPSBOVUxMOworICAgIGlmIChmaXJzdCAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF9maXJzdCA9IFdlYktpdDo6Y29yZShmaXJzdCk7CisgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX2ZpcnN0KTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkg
KiBjb252ZXJ0ZWRfdHggPSBOVUxMOworICAgIGlmICh0eCAhPSBOVUxMKSB7CisgICAgICAgIGNv
bnZlcnRlZF90eCA9IFdlYktpdDo6Y29yZSh0eCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29udmVydGVkX3R4KTsKKyAgICB9CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
ICogY29udmVydGVkX3NlY29uZCA9IE5VTEw7CisgICAgaWYgKHNlY29uZCAhPSBOVUxMKSB7Cisg
ICAgICAgIGNvbnZlcnRlZF9zZWNvbmQgPSBXZWJLaXQ6OmNvcmUoc2Vjb25kKTsKKyAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2Vjb25kKTsKKyAgICB9CisgICAgV2ViQ29yZTo6
QXJyYXkgKiBjb252ZXJ0ZWRfdHh4ID0gTlVMTDsKKyAgICBpZiAodHh4ICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX3R4eCA9IFdlYktpdDo6Y29yZSh0eHgpOworICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF90eHgpOworICAgIH0KKyAgICBpdGVtLT5tdWx0aVRyYW5zZmVy
TGlzdChjb252ZXJ0ZWRfZmlyc3QsIGNvbnZlcnRlZF90eCwgY29udmVydGVkX3NlY29uZCwgY29u
dmVydGVkX3R4eCk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRp
dGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikgKi8KK30KIAotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBU
X1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFM
SVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitX
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsdWUoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJu
IHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0
aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIp
CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKSAqLwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3ZvaWQKK3dlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERP
TVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5V
TEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVt
LT5zZXRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X3JlYWRvbmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24y
KQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihp
dGVtLT5yZWFkb25seVZhbHVlKCkpOworICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7CisjZWxz
ZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVy
biBOVUxMOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikgKi8KK30KKworV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgord2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlKFdl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCit7CisjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jYWNoZWRWYWx1ZSgp
KTsKKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hl
ZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxm
LCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQoreworI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2
YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2
YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9
CisgICAgaXRlbS0+c2V0Q2FjaGVkVmFsdWUoY29udmVydGVkX3ZhbHVlKTsKKyNlbHNlCisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCiAjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCitXZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNhY2hlZFJlYWRvbmx5VmFsdWUoKSk7CisgICAg
V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5n
ZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByaXZhdGUuaAppbmRleCA4MmU3OWEyNmYxN2Y3Y2U2YjYzNWMzN2Q5ZjI1
ZDI3MjQ0ZjNmYjdkLi4zNTMzYzI2ODFjNWE1M2M2MmExMTc1M2FkZWM1OGU1YTc1YTc4ZTFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkg
QEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01P
YmplY3QuaD4KICNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgi
CisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisKIG5hbWVz
cGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgKgogICAgIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKmNvcmVPYmplY3QpOwpAQCAt
MzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
CisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lO
VEVSRkFDRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcAppbmRleCAyNTIzYzli
NzM5ZTFjMDc5ODBkYTI4YjgxMzBmOTAyNjViM2RlOTZlLi45MzBiNjg3OTJkOTk0NDU3Njk3NTk4
OWIwMzI1NGM0NjNlYTUyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwCkBAIC0yMiw4ICsy
Miw3IEBACiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xv
Y2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAKIC8qKgogICogU0VDVElPTjp3
ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uCkBAIC0zOSw3ICszOCw5IEBAIEdfREVGSU5F
X1RZUEUoV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiwgd2Via2l0X2dlb2xvY2F0aW9u
X3BvbGljeV9kZWNpc2lvCiAKIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lv
blByaXZhdGUgewogICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKLSAgICBHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb247CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFdlYkNvcmU6Okdlb2xv
Y2F0aW9uKiBnZW9sb2NhdGlvbjsKKyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQgd2Via2l0X2dl
b2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9jbGFzc19pbml0KFdlYktpdEdlb2xvY2F0aW9uUG9s
aWN5RGVjaXNpb25DbGFzcyogZGVjaXNpb25DbGFzcykKQEAgLTUyLDcgKzUzLDggQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9pbml0KFdlYktpdEdlb2xv
Y2F0aW9uUG9saWN5RGVjaXMKICAgICBkZWNpc2lvbi0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShkZWNpc2lvbiwgV0VCS0lUX1RZUEVfR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lT
SU9OLCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSk7CiB9CiAKLVdlYktp
dEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVj
aXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9u
KQorI2lmIEVOQUJMRShHRU9MT0NBVElPTikKK1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNp
b24qIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1l
KiBmcmFtZSwgV2ViQ29yZTo6R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewogICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGZyYW1lLCBOVUxMKTsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGlj
eURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9HRU9MT0NBVElPTl9QT0xJQ1lfREVDSVNJT04o
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0dFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTiwgTlVM
TCkpOwpAQCAtNjIsNiArNjQsNyBAQCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKiB3
ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX25ldyhXZWJLaXRXZQogICAgIHByaXYt
Pmdlb2xvY2F0aW9uID0gZ2VvbG9jYXRpb247CiAgICAgcmV0dXJuIGRlY2lzaW9uOwogfQorI2Vu
ZGlmCiAKIC8qKgogICogd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9hbGxvdwpAQCAtNzMsMTAg
Kzc2LDE0IEBAIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qIHdlYmtpdF9nZW9sb2Nh
dGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlCiAgKi8KIHZvaWQgd2Via2l0X2dlb2xv
Y2F0aW9uX3BvbGljeV9hbGxvdyhXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKiBkZWNp
c2lvbikKIHsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSk7CiAKICAgICBX
ZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSogcHJpdiA9IGRlY2lzaW9uLT5w
cml2OwogICAgIHByaXYtPmdlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoVFJVRSk7CisjZWxzZQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkdlb2xvY2F0aW9uIikKKyNlbmRp
ZgogfQogCiAvKioKQEAgLTg5LDkgKzk2LDEzIEBAIHZvaWQgd2Via2l0X2dlb2xvY2F0aW9uX3Bv
bGljeV9hbGxvdyhXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbikKICAq
Lwogdm9pZCB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlbnkoV2ViS2l0R2VvbG9jYXRpb25Q
b2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCiB7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0dFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTihk
ZWNpc2lvbikpOwogCiAgICAgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvblByaXZhdGUq
IHByaXYgPSBkZWNpc2lvbi0+cHJpdjsKICAgICBwcml2LT5nZW9sb2NhdGlvbi0+c2V0SXNBbGxv
d2VkKEZBTFNFKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
R2VvbG9jYXRpb24iKQorI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9ucHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRl
LmgKaW5kZXggZDI1MDA0NGU0NzcwNWI0ZDEzY2E0N2E4OWNlMTAzNmJmMGQ1ODkyZi4uMTc3MTU0
Y2QyZTEyYzdjNDY1NjU0NDZkZGUwNmI4MTYzZDlhYjdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVj
aXNpb25wcml2YXRlLmgKQEAgLTI1LDEwICsyNSwxNCBAQAogCiAjaW5jbHVkZSAid2Via2l0Z2Vv
bG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorCiBl
eHRlcm4gIkMiIHsKIAogV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiogd2Via2l0X2dl
b2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9uZXcoV2ViS2l0V2ViRnJhbWUqLCBXZWJDb3JlOjpH
ZW9sb2NhdGlvbiopOwogCiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdsb2JhbHNw
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUu
aAppbmRleCBhMjIyN2I1OGZlZDk4NWIwYTM1NTgwZjUwZGI1NmY5MWQ0ZDQyMDMwLi44MGNjNDAy
Y2ViNWE1MDg0YmI1ZTk2MTYwYzI1NWE5OTcyNmM4MTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaApAQCAtMjgsNiArMjgsOCBAQAogI2Rl
ZmluZSBXRUJLSVRfUEFSQU1fUkVBREFCTEUgKChHUGFyYW1GbGFncykoR19QQVJBTV9SRUFEQUJM
RXxHX1BBUkFNX1NUQVRJQ19OQU1FfEdfUEFSQU1fU1RBVElDX05JQ0t8R19QQVJBTV9TVEFUSUNf
QkxVUkIpKQogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFICgoR1BhcmFtRmxhZ3MpKEdf
UEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElDX05BTUV8R19QQVJBTV9TVEFUSUNfTklDS3xH
X1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKKyNkZWZpbmUgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVChGZWF0dXJlKSBnX3dhcm5pbmcoIldlYktpdEdUSysgd2FzIG5vdCBjb21waWxlZCB3
aXRoIHN1cHBvcnQgZm9yICIgRmVhdHVyZSk7CisKIGV4dGVybiAiQyIgewogCiB2b2lkIHdlYmtp
dEluaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRl
eCA1ODZmNjc3NmI1NTIwOGM4ODY2OGY1NzhmOWI2MmUyNWIzOWI0YTQyLi40NzY1ZjdlOTA0OWJl
NjJhNWVkYzBhNjY3ZjRjY2FlZmZlMmEzZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0zNTI5LDcgKzM1MjksOSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogI2VuZGlmCiAKICAgICBp
ZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wUmVuZGVyVHJlZU1vZGVFbmFibGVkKCkp
IHsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAgICAgIHN0YXRpY19jYXN0PEdlb2xvY2F0
aW9uQ2xpZW50TW9jayo+KHBhZ2VDbGllbnRzLmdlb2xvY2F0aW9uQ2xpZW50KS0+c2V0Q29udHJv
bGxlcihwcml2LT5jb3JlUGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCkpOworI2VuZGlmCiAg
ICAgICAgIC8vIFNldCBzb21lIHRlc3Rpbmctc3BlY2lmaWMgc2V0dGluZ3MKICAgICAgICAgcHJp
di0+Y29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFi
bGVkKHRydWUpOwogICAgICAgICBwcml2LT5jb3JlUGFnZS0+c2V0dGluZ3MoKS0+c2V0VmFsaWRh
dGlvbk1lc3NhZ2VUaW1lck1hZ25pZmljYXRpb24oLTEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133485</attachid>
            <date>2012-03-23 07:45:04 -0700</date>
            <delta_ts>2012-03-23 11:52:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80030-20120323154502.patch</filename>
            <type>text/plain</type>
            <size>263042</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5NDQ2Y2QzZWE4OWRj
ZjcyNThjYTZkN2RhYjVlNDBhZGJjNTE3OC4uY2U2OGNkZjE0NmJhNWM5ZjU4MTY2Y2RmYTQ3NTg3
ZWE1OGIzM2Q3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAxMi0wMy0yMyAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJp
bmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVkIHdpdGggdGhl
ICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW4gQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAg
ICAgIC0gZ3JvdXAgaW1wbGVtZW50YXRpb24gb2YgcHJpdmF0ZSBoZWxwZXJzIGFuZCBndWFyZCB0
aGVtIGluc2lkZQorICAgICAgICBhbiBpZmRlZiBpZiBhIHJvb3QgY29uZGl0aW9uYWwgYXR0cmli
dXRlIGlzIHByZXNlbnQuCisgICAgICAgIC0gYWx3YXlzIGRlZmluZSB0aGUgdHlwZSBvZiBhIEdP
YmplY3QgYmluZGluZywgZXZlbiBpZiB0aGUgcm9vdAorICAgICAgICBjb25kaXRpb25hbCBmZWF0
dXJlIGlzIG5vdCBlbmFibGVkCisgICAgICAgIC0gdGhlIG1ldGhvZHMgYXJlIGdlbmVyYXRlZCBh
cyB3ZWxsLCBidXQgYXJlIHNpbXBseSBzdHVicyBpZiB0aGUKKyAgICAgICAgZmVhdHVyZSBpcyBu
b3QgZW5hYmxlZCwgdGhyb3dpbmcgYSB3YXJuaW5nIHVwb24gaW50ZXJhY3Rpb24uCisgICAgICAg
IC0gaWYgdGhlIG1ldGhvZCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsIGF0dHJp
YnV0ZSwKKyAgICAgICAgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24gZ2FpbnMgb25lIG1vcmUgbGV2
ZWwgb2YgZGVwdGgsIHRocm93aW5nCisgICAgICAgIGEgd2FybmluZyBpZiB0aGUgbWV0aG9kJ3Mg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorICAgICAgICBidXQgdGhlIHJvb3Qg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcy4KKyAgICAgICAgLSBzbWFsbCBzdHlsZSBmaXhlcyBpbiBy
YW5kb20gcGxhY2VzLgorCisgICAgICAgIEFsc28gY2hhbmdlZCBhcmUgR09iamVjdCBiYXNlbGlu
ZXMgZm9yIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gbmV3IHRl
c3RhYmxlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG06CisgICAgICAgIChIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25kaXRpb25hbFdhcm4pOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0eSk6CisgICAg
ICAgIChHZW5lcmF0ZVByb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbik6Cisg
ICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5lcmF0ZUNGaWxlKToKKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZSk6Cisg
ICAgICAgIChXcml0ZURhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwRmxvYXQ2NEFycmF5KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9kb21fZmxvYXQ2NGFycmF5X2Zvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdl
YktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3QpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dFByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3Bh
cmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Ns
YXNzMXBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2NsYXNzMnBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxs
YmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Omtp
dCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZmluYWxpemUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3Ry
dWN0b3JfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVj
dG9yX2dldF9hdHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZ2V0X2F0dHIyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0RXZlbnRUYXJnZXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rh
cmdldF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0
ZW0pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChX
ZWJLaXQ6OndyYXBUZXN0SW50ZXJmYWNlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBw
bGVtZW50YWxfbWV0aG9kMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1
cHBsZW1lbnRhbF9tZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2Vi
S2l0Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2ZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdE9iaik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9k
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZCk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfb2JqX21ldGhvZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfc2VxdWVuY2VfYXJnKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9pZGJfa2V5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3Qp
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24pOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24p
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhj
ZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9v
YmpfZXhjZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29w
dGlvbmFsX2FyZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25v
bl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmlu
Z19pc19udWxsX3N0cmluZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9t
ZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9k
Myk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZCk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9jb252ZXJ0Mik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0NSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2Up
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24pOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cik6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cik6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2ludF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9h
dHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF94bWxfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29i
al9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cik6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Ym9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9ib29sZWFuX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3VybF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Y3VzdG9tX2ludGVncmFsX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0
cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0
dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dp
dGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9h
dHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRy
aWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV9hdHRyaWJ1dGUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhf
c3BhY2VzX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9h
dHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRy
MSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMik6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pbW11dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfaW1tdXRhYmxlX3BvaW50KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmljdF9mbG9hdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxv
YXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24pOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
alByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zl
cl9saXN0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRvbmx5X3Zh
bHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
Y2FjaGVkX3JlYWRvbmx5X3ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZS5oOgorCiAyMDEyLTAzLTIzICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29t
PgogCiAgICAgICAgIFRoZSBKU0MgY29kZSBnZW5lcmF0b3IgZG9lc24ndCBnZW5lcmF0ZSBjb3Jy
ZWN0IGNvZGUgZm9yIENvbnN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDg5ZjNhOWFhMzg5
YzI2YzI5MzhjNjNlZDc4OTc4NzNmOThjNjEzZTAuLjc5NzQ3MWFiYjBlNDczZjU2NWEwNjAwZTJi
MWZjZmIyOGFlMjZiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMi0w
My0yMyAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtH
T2JqZWN0IGJpbmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVk
IHdpdGggdGhlICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHByaXZhdGUgbWFjcm8gdGhhdCBjYW4gYmUg
dXNlZCB3aGVuIG5lY2Vzc2FyeSB0byB0aHJvdyBhIHdhcm5pbmcKKyAgICAgICAgYWJvdXQgYSBm
dXR1cmUgbm90IGVuYWJsZWQgYXQgY29tcGlsZS10aW1lLgorCisgICAgICAgIEFkZCBzdHViIGlt
cGxlbWVudGF0aW9ucyBmb3IgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiBtZXRob2Rz
CisgICAgICAgIGlmIHRoZSBHZW9sb2NhdGlvbiBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLiBBbHNv
IGd1YXJkIHNvbWUgb2NjdXJyZW5jZXMKKyAgICAgICAgb2YgV2ViQ29yZTo6R2VvbG9jYXRpb24q
IHVzZXMgdG8gcHJldmVudCBidWlsZCBmYWlsdXJlcy4KKworICAgICAgICAqIHdlYmtpdC93ZWJr
aXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcDoKKyAgICAgICAgKF9XZWJLaXRHZW9sb2Nh
dGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfZ2VvbG9jYXRpb25f
cG9saWN5X2RlY2lzaW9uX25ldyk6CisgICAgICAgICh3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5
X2FsbG93KToKKyAgICAgICAgKHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVueSk6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmg6CisgICAgICAgICogd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorCiAy
MDEyLTAzLTIzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBBZGQgYSB3YXkgdG8gZXhwb3NlIHdlbGwga25vd24gbmFtZXMgZm9yIGl0
ZW1zIGluIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvR05VbWFrZWZpbGUuYW0KaW5kZXggYTUxMjgwZjk1ODFkMDc4ZTY1MGRkNWVh
MTc5YzYzOTZlYWI1ZWM1MS4uNjYwYjc4YTMyYzE1ZjI4YmYxMWEyZTY2NWIwOTA0ZGM3ZjcwOGY4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmls
ZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFt
CkBAIC02Niw2ICs2Niw4IEBAIHdlYmtpdGd0a19nZG9tX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxlTGlzdC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL3dlYmtpdC9XZWJLaXRET01GaWxlTGlzdFByaXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
d2Via2l0L1dlYktpdERPTUZpbGVQcml2YXRlLmggXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9X
ZWJLaXRET01HZW9sb2NhdGlvbi5jcHAgXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRE
T01HZW9sb2NhdGlvblByaXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERP
TUhpc3RvcnkuY3BwIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NSGlzdG9yeVBy
aXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUhUTUxBbmNob3JFbGVt
ZW50LmNwcCBcCkBAIC0yOTMsNiArMjk1LDcgQEAgd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwK
IAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NQmxvYi5oIFwKIAlEZXJpdmVkU291cmNl
cy93ZWJraXQvV2ViS2l0RE9NRmlsZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0
RE9NRmlsZUxpc3QuaCBcCisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0
aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVu
dC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQu
aCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oIFwK
QEAgLTM4NiwxNCArMzg5LDYgQEAgd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlEZXJpdmVk
U291cmNlcy93ZWJraXQvd2Via2l0ZG9tLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC93ZWJr
aXRkb21kZWZpbmVzLmgKIAotaWYgRU5BQkxFX0dFT0xPQ0FUSU9OCi13ZWJraXRndGtfYnVpbHRf
aF9hcGkgKz0gXAotCSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0
RE9NR2VvbG9jYXRpb24uaAotd2Via2l0Z3RrX2dkb21fYnVpbHRfc291cmNlcyArPSBcCi0JRGVy
aXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcCBcCi0JRGVyaXZlZFNv
dXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5oCi1lbmRpZgotCiBpZiBF
TkFCTEVfVklERU8KIHdlYmtpdGd0a19idWlsdF9oX2FwaSArPSBcCiAJJCh0b3BfYnVpbGRkaXIp
L0Rlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50LmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09i
amVjdC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdP
YmplY3QucG0KaW5kZXggMjExMzRkNDdiNWMwZGJhYzU3MGQ3MjIwOGM3ZGFjNmViZWVkMmYyZC4u
ODQ0ZmFjOGFjZWI5MGNiZTQ4MDQ2NDA4ZWI2YjM4NzgyYWVkZWQ2YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBt
CkBAIC0xMTQsNiArMTE0LDIxIEBAIHN1YiBGaXhVcERlY2FtZWxpemVkTmFtZSB7CiAgICAgcmV0
dXJuICRjbGFzc25hbWU7CiB9CiAKK3N1YiBIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwgeworICAg
IG15IEBjb25kaXRpb25hbCA9IHNwbGl0KCdfJywgc2hpZnQpOworICAgIG15IEB1cHBlckNhc2VF
eGNlcHRpb25zID0gKCJTUUwiLCAiQVBJIik7CisgICAgbXkgQGh1bWFuUmVhZGFibGU7CisKKyAg
ICBmb3IgJHBhcnQgKEBjb25kaXRpb25hbCkgeworICAgICAgICBpZiAoIWdyZXAgeyRfIGVxICRw
YXJ0fSBAdXBwZXJDYXNlRXhjZXB0aW9ucykgeworICAgICAgICAgICAgJHBhcnQgPSBjYW1lbGl6
ZShsYygkcGFydCkpOworICAgICAgICB9CisgICAgICAgIHB1c2goQGh1bWFuUmVhZGFibGUsICRw
YXJ0KTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbignICcsIEBodW1hblJlYWRhYmxlKTsKK30K
Kwogc3ViIENsYXNzTmFtZVRvR09iamVjdFR5cGUgewogICAgIG15ICRjbGFzc05hbWUgPSBzaGlm
dDsKICAgICBteSAkQ0xBU1NfTkFNRSA9IHVjKGRlY2FtZWxpemUoJGNsYXNzTmFtZSkpOwpAQCAt
MzQ0LDYgKzM1OSwzMiBAQCBzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZwogICAgIH0KIH0K
IAorc3ViIEdlbmVyYXRlQ29uZGl0aW9uYWxXYXJuCit7CisgICAgbXkgJG5vZGUgPSBzaGlmdDsK
KyAgICBteSAkY29uZGl0aW9uYWwgPSAkbm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRp
dGlvbmFsIn07CisgICAgbXkgQHdhcm47CisKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAg
ICAgIGlmICgkY29uZGl0aW9uYWwgPX4gLyYvKSB7CisgICAgICAgICAgICBteSBAc3BsaXRDb25k
aXRpb25hbHMgPSBzcGxpdCgvJi8sICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICBmb3JlYWNo
ICRjb25kaXRpb24gKEBzcGxpdENvbmRpdGlvbmFscykgeworICAgICAgICAgICAgICAgIHB1c2go
QHdhcm4sICIjaWYgIUVOQUJMRSgkY29uZGl0aW9uKVxuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAd2FybiwgIiAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFu
UmVhZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQHdhcm4sICIjZW5kaWZcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2lmICgkY29uZGl0aW9uYWwgPX4gL1x8LykgeworICAgICAgICAgICAgZm9yZWFjaCAkY29uZGl0
aW9uIChzcGxpdCgvXHwvLCAkY29uZGl0aW9uYWwpKSB7CisgICAgICAgICAgICAgICAgcHVzaChA
d2FybiwgIiAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVh
ZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAd2FybiwgIiAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVhZGFibGVDb25kaXRpb25hbCgkY29u
ZGl0aW9uYWwpIC4gIlwiKVxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQHdh
cm47Cit9CisKIHN1YiBHZW5lcmF0ZVByb3BlcnR5IHsKICAgICBteSAkYXR0cmlidXRlID0gc2hp
ZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKQEAgLTM1OCw5ICszOTksOSBAQCBz
dWIgR2VuZXJhdGVQcm9wZXJ0eSB7CiAgICAgbXkgJHByb3BOYW1lQ2FwcyA9IHVjKCRwcm9wTmFt
ZSk7CiAgICAgJHByb3BOYW1lID1+IHMvXy8tL2c7CiAgICAgbXkgJHtwcm9wRW51bX0gPSAiUFJP
UF8ke3Byb3BOYW1lQ2Fwc30iOwotICAgIHB1c2goQGNCb2R5UHJpdiwgIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgIHB1c2goQGNCb2R5UHJp
diwgIiAgICAke3Byb3BFbnVtfSxcbiIpOwotICAgIHB1c2goQGNCb2R5UHJpdiwgIiNlbmRpZiAv
KiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAg
IHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYg
JGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICAke3By
b3BFbnVtfSxcbiIpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbmRpZiAvKiAke2Nv
bmRpdGlvbmFsU3RyaW5nfSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgbXkg
JHByb3BUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwogICAgIG15ICR7cHJvcEdU
eXBlfSA9IGRlY2FtZWxpemUoJHByb3BUeXBlKTsKQEAgLTQ4Niw2ICs1MjcsMTQgQEAgc3ViIEdl
bmVyYXRlUHJvcGVydGllcyB7CiAgICAgbXkgJGNsc0NhcHMgPSBzdWJzdHIoQ2xhc3NOYW1lVG9H
T2JqZWN0VHlwZSgkY2xhc3NOYW1lKSwgMTIpOwogICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUg
PSAid2Via2l0X2RvbV8iIC4gKEZpeFVwRGVjYW1lbGl6ZWROYW1lKGRlY2FtZWxpemUoJGludGVy
ZmFjZU5hbWUpKSk7CiAKKyAgICBteSAkY29uZGl0aW9uR3VhcmRTdGFydCA9ICIiOworICAgIG15
ICRjb25kaXRpb25HdWFyZEVuZCA9ICIiOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdl
bmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBpZiAoJGNvbmRpdGlvbmFs
U3RyaW5nKSB7CisgICAgICAgICRjb25kaXRpb25HdWFyZFN0YXJ0ID0gIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfSI7CisgICAgICAgICRjb25kaXRpb25HdWFyZEVuZCA9ICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ30iOworICAgIH0KKwogICAgICMgUHJvcGVydGllcwogICAgIG15ICRp
bXBsQ29udGVudCA9ICIiOwogCkBAIC00OTQsNyArNTQzLDcgQEAgc3ViIEdlbmVyYXRlUHJvcGVy
dGllcyB7CiBlbnVtIHsKICAgICBQUk9QXzAsCiBFT0YKLSAgICBwdXNoKEBjQm9keVByaXYsICRp
bXBsQ29udGVudCk7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwog
CiAgICAgbXkgQHJlYWRhYmxlUHJvcGVydGllcyA9IEdldFJlYWRhYmxlUHJvcGVydGllcygkZGF0
YU5vZGUtPmF0dHJpYnV0ZXMpOwogCkBAIC01MTEsNyArNTYwLDcgQEAgRU9GCiAgICAgJHtjbGFz
c05hbWV9KiBzZWxmID0gV0VCS0lUX0RPTV8ke2Nsc0NhcHN9KG9iamVjdCk7CiAgICAgJHByaXZG
dW5jdGlvbgogRU9GCi0gICAgcHVzaChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKKyAgICAg
ICAgcHVzaChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKICAgICB9CiAKICAgICAkdHh0R2V0
UHJvcCA9IDw8ICJFT0YiOwpAQCAtNTQ4LDcgKzU5Nyw3IEBAIEVPRgogICAgICAgICB9CiAgICAg
fQogCi0gICAgcHVzaChAY0JvZHlQcml2LCAifTtcblxuIik7CisgICAgcHVzaChAY0JvZHlQcm9w
ZXJ0aWVzLCAifTtcblxuIik7CiAKICAgICAkdHh0R2V0UHJvcCA9IDw8ICJFT0YiOwogICAgIGRl
ZmF1bHQ6CkBAIC01NzIsOSArNjIxLDkgQEAgRU9GCiAgICAgJCIgPSAiIjsKIAogICAgICRpbXBs
Q29udGVudCA9IDw8ICJFT0YiOwotCiBzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1f
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworJGNvbmRpdGlvbkd1YXJkU3RhcnQKICAgICBX
ZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwog
ICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC01ODUsNiArNjM0LDcg
QEAgc3RhdGljIHZvaWQgJHtsb3dlckNhc2VJZmFjZU5hbWV9X2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKIAogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9Cisk
Y29uZGl0aW9uR3VhcmRFbmQKIAogICAgIEdfT0JKRUNUX0NMQVNTKCR7bG93ZXJDYXNlSWZhY2VO
YW1lfV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtNTk2LDcgKzY0Niw3
IEBAIHN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCiBzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQogewogRU9GCi0gICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQp
OworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKIAogICAgICRpbXBs
Q29udGVudCA9IDw8ICJFT0YiOwogQHR4dEluc3RhbGxFdmVudExpc3RlbmVycwpAQCAtNjIxLDcg
KzY3MSw3IEBAIHN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9pbml0KCR7Y2xhc3NO
YW1lfSogcmVxdWVzdCkKIH0KIAogRU9GCi0gICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRl
bnQpOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKIH0KIAogc3Vi
IEdlbmVyYXRlSGVhZGVyIHsKQEAgLTcyNSw3ICs3NzUsNyBAQCBzdWIgYWRkSW5jbHVkZUluQm9k
eSB7CiB9CiAKIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVy
ZmFjZU5hbWUsICRmdW5jdGlvbiwgJHByZWZpeCkgPSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGlu
dGVyZmFjZU5hbWUsICRmdW5jdGlvbiwgJHByZWZpeCwgJHBhcmVudE5vZGUpID0gQF87CiAKICAg
ICBteSAkZGVjYW1lbGl6ZSA9IEZpeFVwRGVjYW1lbGl6ZWROYW1lKGRlY2FtZWxpemUoJGludGVy
ZmFjZU5hbWUpKTsKIApAQCAtNzQyLDcgKzc5MiwxMSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbiB7
CiAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1lbGl6ZSAuICJf
IiAuICRwcmVmaXggLiBkZWNhbWVsaXplKCRmdW5jdGlvblNpZ05hbWUpOwogICAgIG15ICRyZXR1
cm5UeXBlID0gR2V0R2xpYlR5cGVOYW1lKCRmdW5jdGlvblNpZ1R5cGUpOwogICAgIG15ICRyZXR1
cm5WYWx1ZUlzR0RPTVR5cGUgPSBJc0dET01DbGFzc1R5cGUoJGZ1bmN0aW9uU2lnVHlwZSk7CisK
ICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRm
dW5jdGlvbi0+c2lnbmF0dXJlKTsKKyAgICBteSAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcgPSBH
ZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRwYXJlbnROb2RlKTsKKyAgICBteSBAY29uZGl0aW9u
YWxXYXJuID0gR2VuZXJhdGVDb25kaXRpb25hbFdhcm4oJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwor
ICAgIG15IEBwYXJlbnRDb25kaXRpb25hbFdhcm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2Fybigk
cGFyZW50Tm9kZSk7CiAKICAgICBteSAkZnVuY3Rpb25TaWcgPSAiJHtjbGFzc05hbWV9KiBzZWxm
IjsKIApAQCAtODE2LDYgKzg3MCw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKICAgICBwdXNo
KEBoQm9keSwgIlxuIik7CiAKICAgICBwdXNoKEBjQm9keSwgIiRyZXR1cm5UeXBlXG4kZnVuY3Rp
b25OYW1lKCRmdW5jdGlvblNpZylcbntcbiIpOworICAgIHB1c2goQGNCb2R5LCAiI2lmICR7cGFy
ZW50Q29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmc7CiAg
ICAgcHVzaChAY0JvZHksICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKIAogICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKQEAgLTEwMTcs
MTUgKzEwNzIsMjkgQEAgRU9GCiAgICAgfQogCiAgICAgaWYgKCRjb25kaXRpb25hbFN0cmluZykg
eworICAgICAgICBwdXNoKEBjQm9keSwgIiNlbHNlXG4iKTsKKyAgICAgICAgcHVzaChAY0JvZHks
IEBjb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKKyAgICAgICAg
aWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgeworICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc05vblBvaW50ZXJUeXBlKCRmdW5jdGlvblNpZ1R5cGUpKSB7CisgICAgICAgICAgICAg
ICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7cmV0dXJuVHlwZX0+KDAp
O1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5
LCAiICAgIHJldHVybiBOVUxMO1xuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIpOwor
ICAgIH0KKworICAgIGlmICgkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcpIHsKKyAgICAgICAgcHVz
aChAY0JvZHksICIjZWxzZVxuIik7CisgICAgICAgIHB1c2goQGNCb2R5LCBAcGFyZW50Q29uZGl0
aW9uYWxXYXJuKSBpZiBzY2FsYXIoQHBhcmVudENvbmRpdGlvbmFsV2Fybik7CiAgICAgICAgIGlm
ICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiI2Vs
c2VcbiIpOwogICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBl
KCRmdW5jdGlvblNpZ1R5cGUpKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAg
cmV0dXJuIHN0YXRpY19jYXN0PCR7cmV0dXJuVHlwZX0+KDApO1xuIik7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiBOVUxMO1xu
Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIjZW5k
aWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsK
KyAgICAgICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtwYXJlbnRDb25kaXRpb25hbFN0cmlu
Z30gKi9cbiIpOwogICAgIH0KIAogICAgIHB1c2goQGNCb2R5LCAifVxuXG4iKTsKQEAgLTEwNDcs
NyArMTExNiw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9ucyB7CiAgICAgbXkgKCRvYmplY3QsICRp
bnRlcmZhY2VOYW1lLCAkZGF0YU5vZGUpID0gQF87CiAKICAgICBmb3JlYWNoIG15ICRmdW5jdGlv
biAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVG
dW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiIik7CisgICAgICAgICRvYmplY3Qt
PkdlbmVyYXRlRnVuY3Rpb24oJGludGVyZmFjZU5hbWUsICRmdW5jdGlvbiwgIiIsICRkYXRhTm9k
ZSk7CiAgICAgfQogCiAgICAgVE9QOgpAQCAtMTA4MCw3ICsxMTQ5LDcgQEAgc3ViIEdlbmVyYXRl
RnVuY3Rpb25zIHsKICAgICAgICAgbXkgJGZ1bmN0aW9uID0gbmV3IGRvbUZ1bmN0aW9uKCk7CiAg
ICAgICAgICRmdW5jdGlvbi0+c2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAgICAg
ICAgICRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9ucygkYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRp
b25zKTsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwg
JGZ1bmN0aW9uLCAiZ2V0XyIpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRp
bnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJnZXRfIiwgJGRhdGFOb2RlKTsKIAogICAgICAgICAj
IEZJWE1FOiBXZSBhcmUgbm90IGdlbmVyYXRpbmcgc2V0dGVycyBmb3IgJ1JlcGxhY2VhYmxlJwog
ICAgICAgICAjIGF0dHJpYnV0ZXMgbm93LCBidXQgd2Ugc2hvdWxkIHNvbWVob3cuCkBAIC0xMTA4
LDcgKzExNzcsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbnMgewogICAgICAgICAKICAgICAgICAg
JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zKCRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnMp
OwogICAgICAgICAKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNl
TmFtZSwgJGZ1bmN0aW9uLCAic2V0XyIpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0
aW9uKCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJzZXRfIiwgJGRhdGFOb2RlKTsKICAgICB9
CiB9CiAKQEAgLTExMjcsOCArMTE5NiwxMCBAQCBzdWIgR2VuZXJhdGVDRmlsZSB7CiAgICAgJGlt
cGxDb250ZW50ID0gPDwgIkVPRiI7CiAke2RlZmluZVR5cGVNYWNyb30oJHtjbGFzc05hbWV9LCAk
e2xvd2VyQ2FzZUlmYWNlTmFtZX0sICR7cGFyZW50R09ialR5cGV9JHtkZWZpbmVUeXBlSW50ZXJm
YWNlSW1wbGVtZW50YXRpb259CiAKLW5hbWVzcGFjZSBXZWJLaXQgeworRU9GCisgICAgcHVzaChA
Y0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwogCisgICAgJGltcGxDb250ZW50ID0gPDwg
IkVPRiI7CiBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVx
dWVzdCkKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKQEAgLTExMzks
MTUgKzEyMTAsMTMgQEAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZSgke2NsYXNzTmFt
ZX0qIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAogRU9GCi0KICAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKICAg
ICAkb2JqZWN0LT5HZW5lcmF0ZVByb3BlcnRpZXMoJGludGVyZmFjZU5hbWUsICRkYXRhTm9kZSk7
CiAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZU5hbWUsICRkYXRhTm9k
ZSk7CiAKICAgICBteSAkd3JhcE1ldGhvZCA9IDw8ICJFT0YiOwotbmFtZXNwYWNlIFdlYktpdCB7
CiAke2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6OiR7aW50ZXJmYWNl
TmFtZX0qIGNvcmVPYmplY3QpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVj
dCwgMCk7CkBAIC0xMTYxLDcgKzEyMzAsNyBAQCAke2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFj
ZU5hbWV9KFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVPYmplY3QpCiAgICAgcmV0dXJu
ICBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV8ke2Ns
c0NhcHN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKwogRU9GCiAgICAgcHVzaChAY0JvZHlQcml2LCAkd3JhcE1ldGhvZCk7CiB9CkBAIC0xMjI5
LDcgKzEyOTgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdl
YktpdERPTUV2ZW50VGFyZ2V0SWZhY2UqIGlmYWNlKQogCiBFT0YKIAotICAgIHB1c2goQGNCb2R5
LCAkaW1wbCk7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbCk7CiAKICAgICAkZGVm
aW5lVHlwZU1hY3JvID0gIkdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIjsKICAgICAkZGVmaW5lVHlw
ZUludGVyZmFjZUltcGxlbWVudGF0aW9uID0gIiwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJ
VF9UWVBFX0RPTV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKSI7
CkBAIC0xMjQyLDExICsxMzExLDYgQEAgc3ViIEdlbmVyYXRlIHsKICAgICBteSAkcGFyZW50R09i
alR5cGUgPSBHZXRQYXJlbnRHT2JqVHlwZSgkZGF0YU5vZGUpOwogICAgIG15ICRpbnRlcmZhY2VO
YW1lID0gJGRhdGFOb2RlLT5uYW1lOwogCi0gICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29u
ZGl0aW9uYWwnIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMKLSAgICBteSAkY29uZGl0aW9uYWxT
dHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7Ci0gICAgcHVzaChA
Y29uZGl0aW9uR3VhcmRTdGFydCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7Ci0gICAgcHVzaChAY29uZGl0aW9uR3VhcmRFbmQsICIjZW5kaWYg
LyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLQog
ICAgICMgQWRkIHRoZSBkZWZhdWx0IGltcGwgaGVhZGVyIHRlbXBsYXRlCiAgICAgQGNQcmVmaXgg
PSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKICAgICBwdXNoKEBjUHJlZml4LCAiXG4i
KTsKQEAgLTEyNjcsOCArMTMzMSw2IEBAIHN1YiBHZW5lcmF0ZSB7CiAKICAgICBpZiAoIVVzZXNN
YW51YWxLaXRJbXBsZW1lbnRhdGlvbigkaW50ZXJmYWNlTmFtZSkpIHsKICAgICAgICAgbXkgJGNv
bnZlcnRlciA9IDw8ICJFT0YiOwotbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCiAke2NsYXNzTmFt
ZX0qIGtpdChXZWJDb3JlOjokaW50ZXJmYWNlTmFtZSogb2JqKQogewogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG9iaiwgMCk7CkBAIC0xMjc4LDExICsxMzQwLDkgQEAgJHtjbGFzc05hbWV9KiBr
aXQoV2ViQ29yZTo6JGludGVyZmFjZU5hbWUqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwke2NsYXNzTmFtZX0qPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwJHtp
bnRlcmZhY2VOYW1lfShvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8K
IAogRU9GCi0gICAgcHVzaChAY0JvZHksICRjb252ZXJ0ZXIpOworICAgIHB1c2goQGNCb2R5UHJp
diwgJGNvbnZlcnRlcik7CiAgICAgfQogCiAgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGlu
dGVyZmFjZU5hbWUsICRwYXJlbnRDbGFzc05hbWUpOwpAQCAtMTMwMSw2ICsxMzYxLDkgQEAgc3Vi
IFdyaXRlRGF0YSB7CiAgICAgbXkgJGd1YXJkID0gdWMoZGVjYW1lbGl6ZSgkY2xhc3NOYW1lKSkg
LiAiX1BSSVZBVEVfSCI7CiAgICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNz
TmFtZSgkZGF0YU5vZGUpOwogCisgICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9u
YWwnIGV4dGVuZGVkIGF0dHJpYnV0ZSBleGlzdHMKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcg
PSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisKICAgICBvcGVuKFBSSVZI
RUFERVIsICI+JGZpbGVuYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGZpbGVuYW1l
IGZvciB3cml0aW5nIjsKIAogICAgIHByaW50IFBSSVZIRUFERVIgc3BsaXQoIlxyIiwgJGxpY2Vu
Y2VUZW1wbGF0ZSk7CkBAIC0xMzEzLDEyICsxMzc2LDE1IEBAIHN1YiBXcml0ZURhdGEgewogI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0LyR7cGFyZW50Q2xhc3NOYW1l
fS5oPgogI2luY2x1ZGUgIiR7aW50ZXJmYWNlTmFtZX0uaCIKKwogRU9GCiAKICAgICBwcmludCBQ
UklWSEVBREVSICR0ZXh0OworICAgIHByaW50IFBSSVZIRUFERVIgIiNpZiAke2NvbmRpdGlvbmFs
U3RyaW5nfVxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHJpbnQgUFJJVkhFQURFUiBt
YXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29ydCBrZXlzKCVoZHJQcm9wSW5jbHVkZXMpOwog
ICAgIHByaW50IFBSSVZIRUFERVIgIlxuIiBpZiBrZXlzKCVoZHJQcm9wSW5jbHVkZXMpOwogICAg
ICR0ZXh0ID0gPDwgIkVPRiI7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICR7Y2xhc3NOYW1l
fSAqCiAgICAgd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAq
Y29yZU9iamVjdCk7CkBAIC0xMzQyLDkgKzE0MDgsMTAgQEAgRU9GCiAgICAgJHRleHQgPSA8PCAi
RU9GIjsKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogJHtndWFyZH0gKi8KIEVP
RgogICAgIHByaW50IFBSSVZIRUFERVIgJHRleHQ7CisgICAgcHJpbnQgUFJJVkhFQURFUiAiI2Vu
ZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG5cbiIgaWYgJGNvbmRpdGlvbmFsU3RyaW5n
OworICAgIHByaW50IFBSSVZIRUFERVIgIiNlbmRpZiAvKiAke2d1YXJkfSAqL1xuIjsKIAogICAg
IGNsb3NlKFBSSVZIRUFERVIpOwogCkBAIC0xMzc2LDE2ICsxNDQzLDE5IEBAIEVPRgogICAgIHBy
aW50IElNUEwgQGNQcmVmaXg7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+XG4iOwogICAgIHByaW50IElNUEwgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuXG4iOwotICAg
IHByaW50IElNUEwgQGNvbmRpdGlvbkd1YXJkU3RhcnQ7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD5cbiI7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD5cbiI7CiAgICAgcHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29y
dCBrZXlzKCVpbXBsSW5jbHVkZXMpOwogICAgIHByaW50IElNUEwgIlxuIiBpZiBrZXlzKCVpbXBs
SW5jbHVkZXMpOwotICAgIHByaW50IElNUEwgQGNCb2R5OworICAgIHByaW50IElNUEwgIiNpZiAk
e2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgIHBy
aW50IElNUEwgIlxuIjsKKyAgICBwcmludCBJTVBMICJuYW1lc3BhY2UgV2ViS2l0IHtcblxuIjsK
ICAgICBwcmludCBJTVBMIEBjQm9keVByaXY7Ci0gICAgcHJpbnQgSU1QTCBAY29uZGl0aW9uR3Vh
cmRFbmQ7CisgICAgcHJpbnQgSU1QTCAifSAvLyBuYW1lc3BhY2UgV2ViS2l0XG5cbiI7CisgICAg
cHJpbnQgSU1QTCAiI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOworCisgICAgcHJpbnQgSU1QTCBAY0JvZHlQcm9wZXJ0aWVzOworICAgIHBy
aW50IElNUEwgQGNCb2R5OwogCiAgICAgY2xvc2UoSU1QTCk7CiAKQEAgLTEzOTcsNiArMTQ2Nyw3
IEBAIEVPRgogICAgIEBjUHJlZml4ID0gKCk7CiAgICAgQGNCb2R5ID0gKCk7CiAgICAgQGNCb2R5
UHJpdiA9ICgpOworICAgIEBjQm9keVByb3BlcnRpZXMgPSAoKTsKIH0KIAogc3ViIEdlbmVyYXRl
SW50ZXJmYWNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuY3BwCmlu
ZGV4IDM0MDMzZGU2MjViYzI2ODQxZWE4MmY3MDA2NmNmNmE5ZGJjN2UzMjMuLjJiNmQwNmY3Y2Fm
YTU2OTkxYWFjZmZhMjQyM2RlNTg1YzI3NWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NRmxvYXQ2NEFycmF5LmNwcApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIndlYmtpdG1h
cnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERPTUZsb2F0NjRB
cnJheSoga2l0KFdlYkNvcmU6OkZsb2F0NjRBcnJheSogb2JqKQogewogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG9iaiwgMCk7CkBAIC01MSwzMCArNTEsNiBAQCBXZWJLaXRET01GbG9hdDY0QXJy
YXkqIGtpdChXZWJDb3JlOjpGbG9hdDY0QXJyYXkqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJLaXRET01GbG9hdDY0QXJyYXkqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2Vi
S2l0Ojp3cmFwRmxvYXQ2NEFycmF5KG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YktpdCAvLwotCi1XZWJLaXRET01JbnQzMkFycmF5Kgotd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlf
Zm9vKFdlYktpdERPTUZsb2F0NjRBcnJheSogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFycmF5KiBh
cnJheSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RmxvYXQ2NEFycmF5
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChh
cnJheSwgMCk7Ci0gICAgV2ViQ29yZTo6RmxvYXQzMkFycmF5ICogY29udmVydGVkX2FycmF5ID0g
TlVMTDsKLSAgICBpZiAoYXJyYXkgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfYXJyYXkg
PSBXZWJLaXQ6OmNvcmUoYXJyYXkpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252
ZXJ0ZWRfYXJyYXksIDApOwotICAgIH0KLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkludDMyQXJy
YXk+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9vKGNvbnZlcnRlZF9hcnJheSkpOwotICAg
IFdlYktpdERPTUludDMyQXJyYXkqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5
LCB3ZWJraXRfZG9tX2Zsb2F0NjRhcnJheSwgV0VCS0lUX1RZUEVfRE9NX0FSUkFZX0JVRkZFUl9W
SUVXKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBjb3Jl
KFdlYktpdERPTUZsb2F0NjRBcnJheSogcmVxdWVzdCkKIHsKQEAgLTg2LDE0ICs2MiwzMSBAQCBX
ZWJDb3JlOjpGbG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0
KQogICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCitXZWJLaXRET01GbG9hdDY0QXJyYXkqIHdy
YXBGbG9hdDY0QXJyYXkoV2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBjb3JlT2JqZWN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCBy
ZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2Fu
J3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0
cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGlu
ZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJu
ICBXRUJLSVRfRE9NX0ZMT0FUNjRBUlJBWShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX0ZM
T0FUNjRBUlJBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01GbG9hdDY0QXJyYXksIHdlYmtpdF9k
b21fZmxvYXQ2NGFycmF5LCBXRUJLSVRfVFlQRV9ET01fQVJSQVlfQlVGRkVSX1ZJRVcpCisKIGVu
dW0gewogICAgIFBST1BfMCwKIH07CiAKLQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0
YXJyYXlfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0
KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAo
ZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpAQCAtMTA1LDYgKzk4LDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAg
ICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7CiB9CiAKQEAgLTE1MywxOCArMTQ3LDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
ZmxvYXQ2NGFycmF5X2luaXQoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQogewogfQog
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTUZsb2F0NjRBcnJheSogd3JhcEZsb2F0NjRB
cnJheShXZWJDb3JlOjpGbG9hdDY0QXJyYXkqIGNvcmVPYmplY3QpCitXZWJLaXRET01JbnQzMkFy
cmF5Kgord2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZm9vKFdlYktpdERPTUZsb2F0NjRBcnJheSog
c2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFycmF5KiBhcnJheSkKIHsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRo
YW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysr
IG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUg
dGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAg
ICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9G
TE9BVDY0QVJSQVkoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9GTE9BVDY0QVJSQVksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6RmxvYXQ2NEFycmF5ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChhcnJheSwgMCk7CisgICAgV2ViQ29yZTo6RmxvYXQzMkFycmF5ICogY29u
dmVydGVkX2FycmF5ID0gTlVMTDsKKyAgICBpZiAoYXJyYXkgIT0gTlVMTCkgeworICAgICAgICBj
b252ZXJ0ZWRfYXJyYXkgPSBXZWJLaXQ6OmNvcmUoYXJyYXkpOworICAgICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChjb252ZXJ0ZWRfYXJyYXksIDApOworICAgIH0KKyAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OkludDMyQXJyYXk+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9vKGNvbnZlcnRl
ZF9hcnJheSkpOworICAgIFdlYktpdERPTUludDMyQXJyYXkqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGUuaAppbmRl
eCBiMGVjNjE0ZjJiY2YxZWY5YTYwZGQzNmIwOGNhM2EzYTk4MTU2ZTVlLi5jMmE3Zjc3NzA1NDI5
MGZkOWJhNTE5ZWU4NzE2M2FmNWRlMDc0NWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8
Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NQXJyYXlCdWZmZXJWaWV3
Lmg+CiAjaW5jbHVkZSAiRmxvYXQ2NEFycmF5LmgiCisKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgV2ViS2l0RE9NRmxvYXQ2NEFycmF5ICoKICAgICB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6
OkZsb2F0NjRBcnJheSAqY29yZU9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwCmluZGV4IGM5M2E5MmNkOWY0ZjgxZDg3ODA2ZTlk
NTAzMGYxYzA3ZWQwNWUzMDEuLjcxNTAyYzU4ZmQ5ZjNiMzYxMzUwMzFiY2IzZjcyYzljMjg0YjAx
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCog
a2l0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIG9iaikKIHsKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNDgsNDkgKzQ4LDYgQEAgV2ViS2l0RE9NVGVzdEFjdGl2
ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIG9iaikKIAogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0Kj4oRE9NT2Jq
ZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3Qob2JqKSkp
OwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9hY3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbihXZWJLaXRET01UZXN0QWN0
aXZlRE9NT2JqZWN0KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXh0X2NoaWxkKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwobmV4dF9jaGlsZCk7Ci0gICAgV2Vi
Q29yZTo6Tm9kZSAqIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gTlVMTDsKLSAgICBpZiAobmV4dF9j
aGlsZCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gV2ViS2l0Ojpj
b3JlKG5leHRfY2hpbGQpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9uZXh0
X2NoaWxkKTsKLSAgICB9Ci0gICAgaXRlbS0+ZXhjaXRpbmdGdW5jdGlvbihjb252ZXJ0ZWRfbmV4
dF9jaGlsZCk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9w
b3N0X21lc3NhZ2UoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiwgY29uc3QgZ2No
YXIqIG1lc3NhZ2UpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURP
TU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChtZXNzYWdlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfbWVzc2FnZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChtZXNzYWdlKTsKLSAgICBpdGVtLT5wb3N0TWVzc2FnZShjb252ZXJ0ZWRf
bWVzc2FnZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3Rf
Z2V0X2V4Y2l0aW5nX2F0dHIoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZikKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+ZXhjaXRp
bmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotCi1HX0RFRklORV9UWVBFKFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3QsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwg
V0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6
OlRlc3RBY3RpdmVET01PYmplY3QqIGNvcmUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCog
cmVxdWVzdCkKIHsKQEAgLTEwMiwxNSArNTksMzIgQEAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9i
amVjdCogY29yZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQogICAgIHJl
dHVybiBjb3JlT2JqZWN0OwogfQogCitXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiB3cmFw
VGVzdEFjdGl2ZURPTU9iamVjdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3JlT2Jq
ZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAg
LyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJl
Y2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRl
ZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAg
ICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOwor
CisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBOVUxMKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9t
X29iamVjdCwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAog
ICAgIFBST1BfRVhDSVRJTkdfQVRUUiwKIH07CiAKLQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKKwogICAg
IFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7
CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKQEAgLTEyMiw2ICs5Niw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxM
OwogICAgIH0KIAorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKQEAgLTE4Niwx
OCArMTYxLDM5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVj
dF9pbml0KFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqCiB7CiB9CiAKLW5hbWVzcGFjZSBX
ZWJLaXQgewotV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogd3JhcFRlc3RBY3RpdmVET01P
YmplY3QoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZU9iamVjdCkKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbihXZWJLaXRE
T01UZXN0QWN0aXZlRE9NT2JqZWN0KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXh0X2NoaWxkKQog
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobmV4dF9jaGlsZCk7CisgICAgV2ViQ29yZTo6
Tm9kZSAqIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gTlVMTDsKKyAgICBpZiAobmV4dF9jaGlsZCAh
PSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gV2ViS2l0Ojpjb3JlKG5l
eHRfY2hpbGQpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9uZXh0X2NoaWxk
KTsKKyAgICB9CisgICAgaXRlbS0+ZXhjaXRpbmdGdW5jdGlvbihjb252ZXJ0ZWRfbmV4dF9jaGls
ZCk7Cit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNt
YXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBp
biBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNv
ZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9i
amVjdC0+cmVmKCk7Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9z
dF9tZXNzYWdlKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFy
KiBtZXNzYWdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01P
YmplY3QgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
bWVzc2FnZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX21lc3NhZ2UgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgobWVzc2FnZSk7CisgICAgaXRlbS0+cG9zdE1lc3NhZ2UoY29udmVydGVkX21l
c3NhZ2UpOworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpF
Q1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNULAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitnbG9uZword2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2dldF9leGNpdGluZ19hdHRyKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVE
T01PYmplY3QgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0
ZW0tPmV4Y2l0aW5nQXR0cigpOworICAgIHJldHVybiByZXM7CiB9Ci19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3RQcml2YXRlLmgKaW5kZXggZjI4YzdmOWQxZTAwNmJiYWFiMmY3MThiY2Y2NjQxNTkw
NDBmNzBkNy4uMjViNTQ1NThkMGNlYmJmOGIxYjU5YTBjOWQ3MmFjZWNjYmExMjc2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJp
dmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNs
dWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9i
amVjdC5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3QgKgogICAgIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNvcmU6OlRlc3RBY3Rp
dmVET01PYmplY3QgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
YWxsYmFjay5jcHAKaW5kZXggZGI3YmM1ZGJjYzAxZjAwNzYwNTVkNDhjZDQ5ZDIyNTYzZWUwYzFk
Zi4uNDE3ZmM0OWZmNTkxYzBhNTU5NzVlM2UwMWYyNTZkZDk2ODczYzQ3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dENhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCi0KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCkBAIC00NSw4ICs0MywxMCBAQAog
I2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgogCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwogbmFtZXNwYWNlIFdlYktpdCB7Ci0g
ICAgCisKIFdlYktpdERPTVRlc3RDYWxsYmFjayoga2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayog
b2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC01NiwyMiArNTYs
MTIzIEBAIFdlYktpdERPTVRlc3RDYWxsYmFjayoga2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayog
b2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RDYWxsYmFjayo+KERP
TU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0Q2FsbGJhY2sob2JqKSkpOwog
fQorCitXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBy
ZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAg
V2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNv
cmVPYmplY3Q7Cit9CisKK1dlYktpdERPTVRlc3RDYWxsYmFjayogd3JhcFRlc3RDYWxsYmFjayhX
ZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFu
IHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBv
YmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRo
ZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAg
ICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVT
VF9DQUxMQkFDSyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRl
c3RDYWxsYmFjaywgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrLCBXRUJLSVRfVFlQRV9ET01fT0JK
RUNUKQorCitlbnVtIHsKKyAgICBQUk9QXzAsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCisgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RP
TV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLworICAgIGlm
IChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFj
ayogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqPihkb21f
b2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAgICAg
ICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShTUUxfREFUQUJBU0UpCisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2Fs
bGJhY2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKHBy
b3BfaWQpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQor
ICAgICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2Ns
YXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X2NhbGxiYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVl
c3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENs
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfY29uc3RydWN0ZWQ7CisKKworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9j
YWxsYmFja19pbml0KFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKK3sKK30KIAogZ2Jv
b2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3BhcmFtKFdl
YktpdERPTVRlc3RDYWxsYmFjayogc2VsZikKIHsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwogICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmNhbGxiYWNrV2l0
aE5vUGFyYW0oKTsKICAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxn
Ym9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KIH0KIAogZ2Jv
b2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFt
KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MxKiBjbGFzczFwYXJh
bSkKIHsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAg
ICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwpAQCAt
ODMsMTEgKzE4NCwxNiBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9j
bGFzczFwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiAgICAgfQogICAgIGdib29s
ZWFuIHJlcyA9IGl0ZW0tPmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKGNvbnZlcnRlZF9jbGFzczFw
YXJhbSk7CiAgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiU1FMIERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xl
YW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKIGdib29sZWFu
CiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczJwYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMiogY2xhc3MycGFyYW0sIGNv
bnN0IGdjaGFyKiBzdHJfYXJnKQogeworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CkBAIC0xMDEsMTEgKzIwNywxNiBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfY2FsbGJhY2tfd2l0aF9jbGFzczJwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYs
CiAgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc3RyX2FyZyk7CiAgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoQ2xhc3My
UGFyYW0oY29udmVydGVkX2NsYXNzMnBhcmFtLCBjb252ZXJ0ZWRfc3RyX2FyZyk7CiAgICAgcmV0
dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU1FM
IERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlm
IC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3Rf
Y2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ub25fYm9vbF9yZXR1cm5fdHlwZShXZWJLaXRET01UZXN0
Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMyogY2xhc3MzcGFyYW0pCiB7CisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVz
dENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKQEAgLTExNywxMSArMjI4LDE2
IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVy
bl90eXBlKFdlYktpdERPTVRlc3RDYWxsYmFjCiAgICAgfQogICAgIGdsb25nIHJlcyA9IGl0ZW0t
PmNhbGxiYWNrV2l0aE5vbkJvb2xSZXR1cm5UeXBlKGNvbnZlcnRlZF9jbGFzczNwYXJhbSk7CiAg
ICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiU1FMIERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2Vu
ZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKIGdib29sZWFuCiB3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2Fs
bGJhY2sqIHNlbGYsIFdlYktpdERPTURPTVN0cmluZ0xpc3QqIGxpc3RfcGFyYW0pCiB7CisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
ICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6
VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKQEAgLTEzMywxMTMgKzI0
OSwyNCBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlz
dChXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiAgICAgfQogICAgIGdib29sZWFuIHJlcyA9
IGl0ZW0tPmNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoY29udmVydGVkX2xpc3RfcGFyYW0pOwogICAg
IHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IlNRTCBEYXRhYmFzZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNl
bmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAqLwogfQogCiBnYm9vbGVhbgogd2Via2l0X2Rv
bV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dpdGhfYm9vbGVhbihXZWJLaXRET01UZXN0Q2FsbGJh
Y2sqIHNlbGYsIGdib29sZWFuIGJvb2xfcGFyYW0pCiB7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKICAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFj
a1dpdGhCb29sZWFuKGJvb2xfcGFyYW0pOwogICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIpCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNF
KSAqLwogfQogCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2ssIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1XZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmUoV2ViS2l0RE9NVGVzdENhbGxi
YWNrKiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwot
Ci0gICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6VGVzdENhbGxiYWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmpl
Y3QpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgcmV0
dXJuIGNvcmVPYmplY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotZW51bSB7Ci0gICAg
UFJPUF8wLAotfTsKLQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVj
dCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7Ci0gICAgCi0gICAgaWYgKGRvbV9vYmplY3Qt
PmNvcmVPYmplY3QpIHsKLSAgICAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrICo+KGRvbV9vYmplY3QtPmNvcmVP
YmplY3QpOwotCi0gICAgICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2Jq
ZWN0KTsKLSAgICAgICAgY29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAgICBkb21fb2JqZWN0
LT5jb3JlT2JqZWN0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMq
IHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCi17Ci0KLSAgICBpZiAo
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmNv
bnN0cnVjdGVkKQotICAgICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNr
Q2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6
ZSA9IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19zZXRfcHJvcGVydHk7Ci0g
ICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Z2V0X3Byb3BlcnR5OwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9t
X3Rlc3RfY2FsbGJhY2tfY29uc3RydWN0ZWQ7Ci0KLQotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19pbml0KFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkK
LXsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q2FsbGJhY2sqIHdyYXBU
ZXN0Q2FsbGJhY2soV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0KQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYo
KSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qg
c3RvcmUgYSBDKysgb2JqZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVj
dHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBk
ZXJlZigpLgotICAgICAqLwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBX
RUJLSVRfRE9NX1RFU1RfQ0FMTEJBQ0soZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNU
X0NBTExCQUNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLSNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENh
bGxiYWNrUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5oCmluZGV4IDNhZDZmZjQ0NDFhOWMw
NGI2Y2E1MDIwYTQ3YjVkZjMwYzk2YTUwN2UuLjg5N2Q2NjRlNTk5NzQwZjI5NjE2M2YwM2MyYmI0
MTE1ZTkwYTgwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJh
Y2tQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0Q2FsbGJh
Y2suaCIKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgIFdlYktpdERPTVRlc3RDYWxsYmFjayAqCiAgICAgd3JhcFRlc3RDYWxsYmFjayhXZWJDb3Jl
OjpUZXN0Q2FsbGJhY2sgKmNvcmVPYmplY3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoU1FM
X0RBVEFCQVNFKSAqLworCiAjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9DQUxMQkFDS19QUklW
QVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwCmluZGV4IGVhNjQ4ZjU2NDY3MTVhNDg2NmQzZDMwNzg2MzI2ODFjZjE4MWJi
MzQuLjFmYjYyN2M0MDQ3MDRhOTM0ZjQzYThiYzE5M2NjNThlNmQ1MmU1MTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAt
MzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdl
YktpdCB7Ci0gICAgCisKIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcioga2l0KFdlYkNv
cmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG9iaiwgMCk7CkBAIC00NiwyNCArNDYsNiBAQCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIqIGtpdChXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG9iaikKIAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihET01PYmpl
Y3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKG9iaikp
KTsKIH0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+YW5v
dGhlckZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIpOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dl
dHRlciwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdl
YkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29yZShXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIHJlcXVlc3QpCiB7CkBAIC03NSwxNCArNTcsMzEgQEAgV2ViQ29yZTo6VGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogcmVx
dWVzdCkKICAgICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0RE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21O
YW1lZEdldHRlciogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3Jl
T2JqZWN0LCAwKTsKKworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBD
Kysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAg
ICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXpl
KCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBj
b3JlT2JqZWN0LT5yZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9O
QU1FRF9HRVRURVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9OQU1F
RF9HRVRURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLCB3
ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlciwgV0VCS0lUX1RZUEVfRE9NX09CSkVD
VCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisK
ICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmpl
Y3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC05NCw2ICs5
Myw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9
IE5VTEw7CiAgICAgfQogCisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY3Vz
dG9tX25hbWVkX2dldHRlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBA
IC0xNDIsMTggKzE0MiwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25h
bWVkX2dldHRlcl9pbml0KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldAogewogfQogCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogd3JhcFRlc3RD
dXN0b21OYW1lZEdldHRlcihXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmVPYmpl
Y3QpCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1
bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIq
IHN0cikKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0g
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
LQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNv
cmVPYmplY3QsIE5VTEwpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc3RyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHN0cik7CisgICAgaXRlbS0+YW5vdGhlckZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIp
OwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaAppbmRleCBmZWRkMTRh
ZmMxMjJhZDcwMDYwZmQ0ZTBmNzI0ZWY0NWUxMTVhYWRhLi41NDgzNWE0MzA1MWUzNTIxMmM3ODJm
NmU5NmZjODVlNTYxYThhZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0
Lmg+CiAjaW5jbHVkZSAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyICoKICAgICB3cmFwVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciAqY29yZU9i
amVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggMzc4OGYxODQ0NjQ4NDBiMjJmMzM4NTdkMDE5MTc1OGZkNjY2YTBhNy4u
N2Y2MjM2MmE2NzU4MmYwZGEwYjU5YzAzMmE2MDZkM2Q0MGU5Y2JkZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMzYsNyAr
MzYsNyBAQAogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
Ci0gICAgCisKIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVz
dEV2ZW50Q29uc3RydWN0b3IqIG9iaikKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmos
IDApOwpAQCAtNDYsMzMgKzQ2LDYgQEAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIGtp
dChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKj4oRE9NT2JqZWN0Q2FjaGU6OnB1
dChvYmosIFdlYktpdDo6d3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKG9iaikpKTsKIH0KLSAgICAK
LX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9ldmVu
dF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjEoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNl
bGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0
cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1n
Y2hhcioKLXdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0
RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigp
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3RvciwgV0VCS0lU
X1RZUEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRlc3RF
dmVudENvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1
ZXN0KQogewpAQCAtODQsMTYgKzU3LDMzIEBAIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9y
KiBjb3JlKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQogICAgIHJldHVy
biBjb3JlT2JqZWN0OwogfQogCitXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogd3JhcFRl
c3RFdmVudENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2Jq
ZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAg
LyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJl
Y2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRl
ZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAg
ICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOwor
CisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2Jq
ZWN0LCBOVUxMKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBF
KFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29u
c3RydWN0b3IsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCisKIGVudW0gewogICAgIFBST1BfMCwK
ICAgICBQUk9QX0FUVFIxLAogICAgIFBST1BfQVRUUjIsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
CiB7CisKICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVD
VChvYmplY3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0x
MDUsNiArOTUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2Jq
ZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVz
dF9ldmVudF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQog
CkBAIC0xNzksMTggKzE3MCwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRf
Y29uc3RydWN0b3JfaW5pdChXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgogewogfQogCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiB3cmFwVGVz
dEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmVPYmpl
Y3QpCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjEo
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCiB7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0
aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMr
KyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2Vl
IHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0g
ICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMSgpKTsK
KyAgICByZXR1cm4gcmVzOworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRf
Q09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX0NPTlNU
UlVDVE9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitnY2hhcioKK3dlYmtpdF9kb21fdGVz
dF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVu
dENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVz
ID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKKyAgICByZXR1cm4gcmVzOwog
fQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9y
UHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKaW5kZXggYmMwZTg1Mjg5MDBl
MzdmYzZiMzYzNWRjZDdjZjEyNjRiZmUxZmRkNS4uMjUwYWJjNTMwYTlkODdhZjhiYmE2MTU3MTQ5
NDEwNGVmNzQzYTgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNp
bmNsdWRlICJUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgIFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yICoKICAgICB3cmFwVGVzdEV2ZW50Q29u
c3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKmNvcmVPYmplY3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggYzZhZDg2
ZTQzNGQ5YzFiMjQ0NTEyNTAwYTdiNDdiZTNiNDYyOTBhMC4uMWEyZTVlM2Y1ODQ5ZjdmOTk5MzJh
YjA0ZGJmZmY1Y2UyMWIzOTYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
RXZlbnRUYXJnZXQuY3BwCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEV2ZW50VGFy
Z2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBvYmopCiB7CiAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTU0LDggKzU0LDMyIEBAIFdlYktpdERPTVRlc3RFdmVu
dFRhcmdldCoga2l0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogb2JqKQogCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RFdmVudFRhcmdldCo+KERPTU9iamVjdENhY2hlOjpw
dXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0RXZlbnRUYXJnZXQob2JqKSkpOwogfQotICAgIAotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0IC8vCisKK1dlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShX
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9N
X09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29yZU9iamVjdCwgMCk7CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0KiB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0
LCAwKTsKKworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21h
cnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGlu
IGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29k
ZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2Jq
ZWN0LT5yZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBOVUxMKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiBzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2
ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3Ip
CiB7CkBAIC04OSw2MSArMTEzLDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFy
Z2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPnJl
bW92ZV9ldmVudF9saXN0ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3Zl
X2V2ZW50X2xpc3RlbmVyOwogfQogCi1XZWJLaXRET01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9pdGVtKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgZ3Vsb25nIGlu
ZGV4KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJn
ZXQgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
Tm9kZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7Ci0gICAgV2ViS2l0
RE9NTm9kZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7
Ci19Ci0KLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2
ZW50KFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwg
R0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RFdmVudFRhcmdldCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoZXZ0LCAwKTsKLSAgICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQg
PSBOVUxMOwotICAgIGlmIChldnQgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0g
V2ViS2l0Ojpjb3JlKGV2dCk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRl
ZF9ldnQsIDApOwotICAgIH0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBnYm9vbGVhbiByZXMgPSBpdGVtLT5kaXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsK
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotCiBHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJL
aXRET01UZXN0RXZlbnRUYXJnZXQsIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXQsIFdFQktJ
VF9UWVBFX0RPTV9PQkpFQ1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfVFlQRV9ET01f
RVZFTlRfVEFSR0VULCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKIAotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0
RXZlbnRUYXJnZXQqIHJlcXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVz
dCwgMCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1
ZXN0KS0+Y29yZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwg
MCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiBlbnVtIHsKICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9ldmVudF90YXJnZXRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0
RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAK
ICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpAQCAtMTU1LDYgKzEzMyw3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAK
KwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMjAzLDE4ICsxODIsMzUgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTVRlc3RF
dmVudFRhcmdldCogcmVxdWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50
VGFyZ2V0KiBjb3JlT2JqZWN0KQorV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdGVzdF9ldmVu
dF90YXJnZXRfaXRlbShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIGd1bG9uZyBpbmRl
eCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8q
IFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNh
dXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQg
R09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAg
ICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0ICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+aXRlbShpbmRleCkpOworICAgIFdlYktpdERPTU5vZGUqIHJl
cyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQogCi0gICAg
cmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfVEFSR0VUKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9ET01fVEVTVF9FVkVOVF9UQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK2di
b29sZWFuCit3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktp
dERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yICoq
ZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoZXZ0LCAwKTsKKyAgICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQgPSBOVUxMOwor
ICAgIGlmIChldnQgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0gV2ViS2l0Ojpj
b3JlKGV2dCk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9ldnQsIDAp
OworICAgIH0KKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVh
biByZXMgPSBpdGVtLT5kaXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsKKyAgICBpZiAo
ZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAg
cmV0dXJuIHJlczsKIH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZl
bnRUYXJnZXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmgKaW5kZXggZTU2MTZlM2Rm
ZDY1NzhjYjhmYzc0ZGE0MGE1NTEyYmNlM2IxMDA0YS4uMDkwOGNlMTUxMDRhMzg2NGJkZGQ0NWE2
ZWZmZjRkMGUwNTdhYTU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RFdmVudFRhcmdldFByaXZhdGUuaApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUg
IlRlc3RFdmVudFRhcmdldC5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERP
TVRlc3RFdmVudFRhcmdldCAqCiAgICAgd3JhcFRlc3RFdmVudFRhcmdldChXZWJDb3JlOjpUZXN0
RXZlbnRUYXJnZXQgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
SW50ZXJmYWNlLmNwcAppbmRleCBlNmI1YWMyM2M3ZjFkZGEzZGEzNDc0MGQ0NDZiMDVjN2RjZWM4
OWIyLi4wODJmOGYyZWE4YmYzZTE0NzEzZDViYjIyMzE2ZmYxMTc4YTgyMDY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjEsOCArMjEsNiBAQAog
I2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hl
LmgiCkBAIC00NCw4ICs0MiwxMCBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgi
CiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0
RE9NVGVzdEludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIG9iaikKIHsKICAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNTUsMTQ4ICs1NSwzNyBAQCBXZWJL
aXRET01UZXN0SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqKQogCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RJbnRlcmZhY2UqPihET01PYmplY3RD
YWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEludGVyZmFjZShvYmopKSk7CiB9Ci0gICAg
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQot
ewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDEoaXRlbSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpICovCi19CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJm
YWNlX3N1cHBsZW1lbnRhbF9tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnLCBHRXJyb3IgKipl
cnJvcikKK1dlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdEludGVyZmFj
ZSogcmVxdWVzdCkKIHsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3Ry
X2FyZywgMCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7Ci0gICAgV1RG
OjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2Fy
Zyk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKLSAg
ICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2Vi
S2l0Ojpjb3JlKG9ial9hcmcpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0
ZWRfb2JqX2FyZywgMCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihX
ZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGl0ZW0sIGNvbnZl
cnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZywgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9N
VGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7
Ci0jZWxzZQotICAgIHJldHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJl
cXVlc3QsIDApOwogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRh
bF9tZXRob2Q0KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKLSNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAg
ICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6VGVzdEludGVyZmFjZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotZ2NoYXIqCi13
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMShXZWJLaXRET01U
ZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50
ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxT
dHIxKGl0ZW0pKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gTlVMTDsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyAg
ICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJm
YWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQor
V2ViS2l0RE9NVGVzdEludGVyZmFjZSogd3JhcFRlc3RJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdElu
dGVyZmFjZSogY29yZU9iamVjdCkKIHsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdElu
dGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
U3RyMihpdGVtKSk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0j
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CiAKLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6
OnNldFN1cHBsZW1lbnRhbFN0cjIoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsKLSNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAgICAvKiBX
ZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVz
ZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdP
YmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAq
IG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdl
YktpdERPTU5vZGUqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxf
bm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpdGVtKSk7Ci0gICAgV2ViS2l0RE9NTm9k
ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxz
ZQotICAgIHJldHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKSAqLworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFD
RShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfSU5URVJGQUNFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3Jl
T2JqZWN0LCBOVUxMKSk7CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0
X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERP
TU5vZGUqIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAg
IFdlYkNvcmU6Ok5vZGUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAh
PSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7
Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAg
V2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsTm9kZShpdGVtLCBjb252
ZXJ0ZWRfdmFsdWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKSAqLwotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvLyBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKIEdfREVGSU5FX1RZUEUoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZSwgV0VCS0lUX1RZ
UEVfRE9NX09CSkVDVCkKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RJbnRl
cmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZh
Y2UqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgcmV0dXJuIGNvcmVPYmplY3Q7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogZW51bSB7CiAgICAgUFJPUF8wLAogI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQpAQCAtMjEwLDkgKzk5LDkgQEAgZW51bSB7
CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICov
CiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogeworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09C
SkVDVChvYmplY3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBA
IC0yMjMsNiArMTEyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVj
dCA9IE5VTEw7CiAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKIAogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTMzMiwxOSArMjIyLDE5
MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0RE9N
VGVzdEludGVyZmFjZSogcmVxdWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJL
aXRET01UZXN0SW50ZXJmYWNlKiB3cmFwVGVzdEludGVyZmFjZShXZWJDb3JlOjpUZXN0SW50ZXJm
YWNlKiBjb3JlT2JqZWN0KQordm9pZAord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVt
ZW50YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQogewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxNZXRob2QxKGl0ZW0pOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFu
IHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBv
YmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRo
ZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAg
ICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7CitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBzZWxmLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2Fy
ZywgR0Vycm9yICoqZXJyb3IpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQorI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJn
LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlm
IChvYmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6
OmNvcmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9v
YmpfYXJnLCAwKTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNv
cmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDIoaXRlbSwgY29udmVydGVk
X3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0
T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNl
bHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICBy
ZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0
aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKSAqLworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1Rf
SU5URVJGQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVj
dCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2Vi
Q29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKKyNlbHNl
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogfQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxl
bWVudGFsX3N0cjEoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFy
KiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1
cHBsZW1lbnRhbFN0cjEoaXRlbSkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCisgICAgcmV0dXJuIE5VTEw7Cisj
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCisj
ZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJl
dHVybiBOVUxMOwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBw
bGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2No
YXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6
c3VwcGxlbWVudGFsU3RyMihpdGVtKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICByZXR1cm4gTlVMTDsK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8K
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIp
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAg
cmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKSAqLworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBw
bGVtZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciog
dmFsdWUpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQor
I2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpdGVtLCBjb252ZXJ0ZWRfdmFs
dWUpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIi
KQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAq
LworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24x
IikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisK
K1dlYktpdERPTU5vZGUqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50
YWxfbm9kZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpOb2RlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaXRlbSkpOworICAgIFdlYktpdERPTU5vZGUqIHJlcyA9
IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorICAgIHJldHVybiBOVUxM
OworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAq
LworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24x
IikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAg
ICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1
cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5v
ZGUqIHZhbHVlKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpOb2Rl
ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAg
ICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbE5vZGUoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsK
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEi
KQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNl
bHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaAppbmRleCAw
YTRlM2EyMDdjNjA2NmNlYjBmMjA0NjJmNDRjZDE0MGIxY2JlMTA5Li4xMDIwZTAyZTdmZDRiNDNi
YTZjMzQzNTM4MzVjZjkyM2UwOWNiOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNs
dWRlICJUZXN0SW50ZXJmYWNlLmgiCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RJbnRl
cmZhY2UgKgogICAgIHdyYXBUZXN0SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKmNv
cmVPYmplY3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpICovCisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9Q
UklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCA1OTQ2ZWMwYzAwY2U3M2VmNWQzMDE1Y2Q5
NzhkMzEyMmRkZGFlMGEwLi5iNTE2ODYzYzYxM2MxOTQ4MWUxZDVjNTU5MDFkYWY4NTY2NWYwYTE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFy
c2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwxMyAr
NDYsNiBAQCBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcioga2l0KFdlYkNvcmU6
OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBvYgogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oRE9NT2JqZWN0Q2FjaGU6OnB1
dChvYmosIFdlYktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKG9iaikpKTsKIH0K
LSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIsIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVy
eV9saXN0X2xpc3RlbmVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKIAogV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHJlcXVlc3QpCiB7CkBAIC02NCwxNCArNTcs
MzEgQEAgV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9N
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHIKICAgICByZXR1cm4gY29yZU9iamVjdDsKIH0K
IAorV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHdyYXBUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcihXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZU9i
amVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisg
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
KworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVO
RVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIsIHdl
YmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyLCBXRUJLSVRfVFlQRV9ET01f
T0JKRUNUKQorCiBlbnVtIHsKICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKIHsKKwogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsK
QEAgLTgzLDYgKzkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5
X2xpc3RfbGlzdGVuZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2Jq
ZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7CiB9CiAKQEAgLTEzMSwxOCArMTQyLDMgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfaW5pdChXZWJLaXRET01UZXN0
TWVkaWFRdWUKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lciogd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6
OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRo
ZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUg
YSBDKysgb2JqZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4g
IFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigp
LgotICAgICAqLwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUihnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfRE9NX1RFU1RfTUVESUFfUVVFUllfTElTVF9MSVNURU5FUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
TlVMTCkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5o
CmluZGV4IDVmYzY1MmYzZTEwYWZjNmUwZWY5OWFiOWUxOWE4NjJlODE5MmI0MDEuLmFjMjcwODhl
ODM0ZGE4Mjc5NTM2NzY5MGZhOTJmOTU3MTRjNmQ1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0
ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRl
IDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuaCIKKworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciAqCiAgICAgd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICpjb3JlT2JqZWN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRl
eCA2MDQxNzI5NzkwMWY4ZjU4ZGU2ZTk4ZGQ2MmYzY2YzYzVlYzZjMjlmLi5lZmQ1MjhmOTQ5YmU3
ZjE5MDEyM2UxMzMxOTdhMmFjYzQ3YjM5ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5j
bHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1
Y3Rvciogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00Niwx
MyArNDYsNiBAQCBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRl
c3ROYW1lZENvbnN0cnVjdG9yKiBvYmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0
RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0
Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3Iob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0IC8vCi0KLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1
Y3Rvciwgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01f
T0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3Ry
dWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCiB7CkBA
IC02NCwxNCArNTcsMzEgQEAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmpl
Y3Q7CiB9CiAKK1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29u
c3RydWN0b3IoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxs
IHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBj
YW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qg
c3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNo
aW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1
cm4gIFdFQktJVF9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfRE9NX1RFU1RfTkFNRURfQ09OU1RSVUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9N
VGVzdE5hbWVkQ29uc3RydWN0b3IsIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvciwg
V0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VC
S0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9i
amVjdCkgewpAQCAtODMsNiArOTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFt
ZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2Jq
ZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOwogfQogCkBAIC0xMzEsMTggKzE0MiwzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9y
CiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0
b3IqIHdyYXBUZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rv
ciogY29yZU9iamVjdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAw
KTsKLQotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQg
cG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEg
Qy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBm
b3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0
LT5yZWYoKTsKLQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9S
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgTlVMTCkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0
ZS5oCmluZGV4IGI1ODUxNzFjMjBlOTZhOTAyODg3ZmM5NjhjOWU5NjU5ZjM5OTMyM2UuLjViYWQ3
MGIwMWRjMTJlMjc1YzMwNDgzNDA3ZWViZWNjMzNlMTc5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCkBAIC0y
NCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
V2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKwor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAq
CiAgICAgd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVj
dG9yICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXgg
MjI3YWM5ZjA2MmQ4ODg1NmU2ZTJhZjkxYzY1MDUzNjYyNDc2MTg4Yy4uMjI0ZDMyODI0ZjgwZjJl
ZTdjMzA3YWVjOTAzNGYwMDI2ZmFhZDg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
ai5jcHAKQEAgLTY0LDcgKzY0LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewotICAgIAorCiBXZWJLaXRET01UZXN0T2JqKiBraXQoV2ViQ29yZTo6
VGVzdE9iaiogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC03
NCwxOTU0ICs3NCw1MTUgQEAgV2ViS2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoq
IG9iaikKIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oRE9NT2Jq
ZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RPYmoob2JqKSkpOwogfQotICAgIAot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdm9p
ZF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK1dlYkNvcmU6OlRlc3RPYmoqIGNvcmUo
V2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT52b2lkTWV0
aG9kKCk7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CiAKLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01U
ZXN0T2JqKiBvYmpfYXJnKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyX2Fy
Zyk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChvYmpfYXJnKTsKLSAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJn
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2Jq
X2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcpOwotICAg
IH0KLSAgICBpdGVtLT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVkX3N0cl9h
cmcsIGNvbnZlcnRlZF9vYmpfYXJnKTsKLX0KKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKHJl
cXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0
LCAwKTsKIAotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5p
bnRNZXRob2QoKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQog
Ci1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2Vi
S2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK1dlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0T2JqKFdl
YkNvcmU6OlRlc3RPYmoqIGNvcmVPYmplY3QpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9i
al9hcmcsIDApOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRf
b2JqX2FyZyA9IE5VTEw7Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOwotICAgIH0KLSAgICBnbG9uZyByZXMg
PSBpdGVtLT5pbnRNZXRob2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29u
dmVydGVkX29ial9hcmcpOwotICAgIHJldHVybiByZXM7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29yZU9iamVjdCwgMCk7CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPm9iak1ldGhvZCgpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAgICAvKiBXZSBjYWxsIHJl
ZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4n
dCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3Ry
dWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5n
IGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdlYktpdERPTVRl
c3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJL
aXRET01UZXN0T2JqKiBvYmpfYXJnKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJn
LCAwKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9h
cmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhvZFdpdGhBcmdz
KGludF9hcmcsIGNvbnZlcnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZykpOwotICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1
cm4gcmVzOworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfT0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9CiAKLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfc2VxdWVuY2VfYXJnKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTXNlcXVlbmNlKiApCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OnNlcXVlbmNlICogY29udmVydGVkXyA9IE5V
TEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNv
cmUoKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKLSAgICB9Ci0gICAg
aXRlbS0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKGNvbnZlcnRlZF8pOwotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdFcnJv
ciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
dHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJf
YXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwot
ICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBX
ZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZl
cnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29udmVydGVkX3N0cl9h
cmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiBy
ZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVGVzdE9iaiwgd2Via2l0X2RvbV90ZXN0X29iaiwgV0VCS0lUX1RZ
UEVfRE9NX09CSkVDVCkKIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3Zh
bHVlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogc2VyaWFsaXplZF9hcmcpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZXJp
YWxpemVkX2FyZyk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVy
dGVkX3NlcmlhbGl6ZWRfYXJnID0gTlVMTDsKLSAgICBpZiAoc2VyaWFsaXplZF9hcmcgIT0gTlVM
TCkgewotICAgICAgICBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2Vy
aWFsaXplZF9hcmcpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxp
emVkX2FyZyk7Ci0gICAgfQotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252ZXJ0ZWRfc2Vy
aWFsaXplZF9hcmcpOwotfQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVBRF9PTkxZ
X0lOVF9BVFRSLAorICAgIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAorICAgIFBST1BfUkVB
RF9PTkxZX1RFU1RfT0JKX0FUVFIsCisgICAgUFJPUF9TSE9SVF9BVFRSLAorICAgIFBST1BfVU5T
SUdORURfU0hPUlRfQVRUUiwKKyAgICBQUk9QX0lOVF9BVFRSLAorICAgIFBST1BfTE9OR19MT05H
X0FUVFIsCisgICAgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKKyAgICBQUk9QX1NUUklO
R19BVFRSLAorICAgIFBST1BfVEVTVF9PQkpfQVRUUiwKKyAgICBQUk9QX1hNTF9PQkpfQVRUUiwK
KyAgICBQUk9QX0NSRUFURSwKKyAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKKyAgICBQ
Uk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVE
X0lOVEVHUkFMX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSLAorICAgIFBS
T1BfUkVGTEVDVEVEX1VSTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAor
ICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVD
VEVEX0NVU1RPTV9CT09MRUFOX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX1VSTF9B
VFRSLAorICAgIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCisgICAgUFJPUF9BVFRS
X1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKKyAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTiwKKyAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwK
KyAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NS
SVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX1NU
QVRFX0FUVFJJQlVURV9SQUlTRVMsCisgICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09O
VEVYVF9BVFRSSUJVVEVfUkFJU0VTLAorICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NP
TlRFWFRfQU5EX1NDUklQVF9TVEFURV9BVFRSSUJVVEUsCisgICAgUFJPUF9XSVRIX1NDUklQVF9F
WEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCisgICAg
UFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhf
U1BBQ0VTX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FM
TF9TVEFDS19BVFRSSUJVVEUsCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgUFJPUF9DT05E
SVRJT05BTF9BVFRSMSwKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgUFJPUF9DT05ESVRJT05B
TF9BVFRSMiwKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlv
bjIpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAg
IFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKSAqLworICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICBQ
Uk9QX01VVEFCTEVfUE9JTlQsCisgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCisgICAgUFJPUF9T
VFJJQ1RfRkxPQVQsCisgICAgUFJPUF9ERVNDUklQVElPTiwKKyAgICBQUk9QX0lELAorICAgIFBS
T1BfSEFTSCwKK307CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoa2V5KTsKLSAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRf
a2V5ID0gTlVMTDsKLSAgICBpZiAoa2V5ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2tl
eSA9IFdlYktpdDo6Y29yZShrZXkpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF9rZXkpOwotICAgIH0KLSAgICBpdGVtLT5pZGJLZXkoY29udmVydGVkX2tleSk7Ci19CiAKLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NRGljdGlvbmFyeSogb28sIFdlYktpdERPTURpY3Rpb25hcnkqIG9vbykK
LXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9vKTsKLSAgICBnX3JldHVybl9pZl9m
YWlsKG9vbyk7Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7
Ci0gICAgaWYgKG9vICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29vID0gV2ViS2l0Ojpj
b3JlKG9vKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28pOwotICAgIH0K
LSAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vbyA9IE5VTEw7Ci0gICAgaWYg
KG9vbyAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29v
KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKLSAgICB9Ci0gICAg
aXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9vb28pOwotfQorICAg
IFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7
CisgICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2ViQ29y
ZTo6VGVzdE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmogKj4o
ZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9y
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0
ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
Ojpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAg
ICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQorCisKKyAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVf
dm9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53
aXRoU2NyaXB0U3RhdGVWb2lkKCk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpOwotICAgIFdlYktpdERP
TVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVz
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPndpdGhT
Y3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBX
RUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNl
bGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2Fz
ZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0
VW5zaWduZWRTaG9ydEF0dHIoKGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKSk7CisgICAgICAgIGJy
ZWFrOwogICAgIH0KLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
d2l0aF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBH
RXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihlYykpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIGNhc2Ug
UFJPUF9JTlRfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJbnRBdHRyKChnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgV2ViS2l0
RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKCk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRf
c3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJv
cikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24o
ZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdf
cXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1l
KTsKKyAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6CisgICAgeworICAgICAg
ICBjb3JlU2VsZi0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoKGdfdmFsdWVfZ2V0X3VpbnQ2NCh2
YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRU
UjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdURjo6U3RyaW5nOjpm
cm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBST1BfQ1JFQVRFOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldENy
ZWF0ZSgoZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBj
b3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5n
YXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVH
UkFMX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCAoZ192YWx1ZV9n
ZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9S
RUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxm
LT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5f
QVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfYm9v
bGVhbih2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfVVJMX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9t
VVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgY29y
ZVNlbGYtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJp
bmdBdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VT
VE9NX0lOVEVHUkFMX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0
ciwgKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFOX0FUVFI6CisgICAgeworICAgICAg
ICBjb3JlU2VsZi0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJM
X0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbigoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046
CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAg
Y29yZVNlbGYtPnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKChnX3ZhbHVlX2dldF9sb25nKHZh
bHVlKSksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdf
QVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYtPnNldFN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19B
VFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24oV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1
ZSkpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFdpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZSgoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAgIGNhc2UgUFJPUF9DT05ESVRJ
T05BTF9BVFRSMToKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIx
KChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKKyAgICB7
CisgICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIyKChnX3ZhbHVlX2dldF9sb25n
KHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6Cisg
ICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0Q29uZGl0aW9uYWxBdHRyMygoZ192YWx1ZV9nZXRf
bG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyAgICBjYXNlIFBST1BfU1RSSUNU
X0ZMT0FUOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFN0cmljdEZsb2F0KChnX3ZhbHVl
X2dldF9mbG9hdCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJP
UF9JRDoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJZCgoZ192YWx1ZV9nZXRfbG9uZyh2
YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1XZWJLaXRET01UZXN0
T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9h
bmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBX
VEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlcygpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgb3B0KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQp
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25h
bF9hcmdfYW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25f
b3B0LCBnbG9uZyBvcHQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmcobm9uX29wdCwgb3B0KTsKIH0KIAotdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29fb3B0aW9uYWxf
YXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQxLCBn
bG9uZyBvcHQyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhOb25PcHRpb25hbEFy
Z0FuZFR3b09wdGlvbmFsQXJncyhub25fb3B0LCBvcHQxLCBvcHQyKTsKLX0KIAotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCiB7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzdHIpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoY29udmVy
dGVkX3N0cik7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0
aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogc3RyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0g
ICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoY29udmVydGVkX3N0
cik7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxf
c3RyaW5nX2lzX251bGxfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzdHIpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBp
dGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmcoY29udmVydGVkX3N0cik7
Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QxKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmNvbmRp
dGlvbmFsTWV0aG9kMSgpKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gTlVM
TDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGl0ZW0tPmNvbmRpdGlvbmFsTWV0aG9kMigpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9jb25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPmNvbmRpdGlvbmFsTWV0aG9kMygpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9j
bGFzc19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5jbGFzc01ldGhvZCgpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19t
ZXRob2Rfd2l0aF9vcHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9w
dGlvbmFsKGFyZyk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9vdmVybG9hZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgYXJn
KQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPm92ZXJsb2Fk
ZWRNZXRob2QxKGFyZyk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKQot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkX3R5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7Ci0gICAgaXRlbS0+b3Zl
cmxvYWRlZE1ldGhvZDEoY29udmVydGVkX3R5cGUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWEqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6YSAqIGNvbnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICgg
IT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBj
b3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAg
ICBjYXNlIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5SW50QXR0cigpKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGl0ZW0tPmNvbnZlcnQxKGNvbnZlcnRlZF8pOwotfQotCi12b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTWIqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29y
ZTo6YiAqIGNvbnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICggIT0gTlVMTCkgewotICAgICAgICBj
b252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29u
dmVydGVkXyk7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWV9TVFJJTkdfQVRUUjoKKyAgICB7Cisg
ICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29y
ZVNlbGYtPnJlYWRPbmx5U3RyaW5nQXR0cigpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBpdGVtLT5jb252ZXJ0Mihjb252ZXJ0ZWRfKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01jKiApCi17Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OmMgKiBjb252ZXJ0
ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkXyA9IFdl
YktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAg
IGNhc2UgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUjoKKyAgICB7CisgICAgICAgIFJlZlB0
cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+cmVhZE9ubHlUZXN0T2JqQXR0cigp
OworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQo
KSkpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgaXRlbS0+Y29udmVydDMoY29udmVydGVk
Xyk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NZCogKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoKTsKLSAgICBXZWJDb3JlOjpkICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBO
VUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKKyAg
ICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0cigp
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGl0ZW0tPmNvbnZlcnQ0KGNvbnZlcnRlZF8p
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ1KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTWUqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWls
KCk7Ci0gICAgV2ViQ29yZTo6ZSAqIGNvbnZlcnRlZF8gPSBOVUxMOwotICAgIGlmICggIT0gTlVM
TCkgewotICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FU
VFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBjb3JlU2VsZi0+dW5z
aWduZWRTaG9ydEF0dHIoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVtLT5jb252
ZXJ0NShjb252ZXJ0ZWRfKTsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX211dGFibGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMg
PSBXVEY6OmdldFB0cihpdGVtLT5tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKLSAgICBXZWJLaXRE
T01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFi
bGVfcG9pbnRfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0
cihpdGVtLT5pbW11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBpdGVtLT5vcmFuZ2UoKTsKLX0KLQotV2ViS2l0RE9NYm9vbCoKLXdl
YmtpdF9kb21fdGVzdF9vYmpfc3RyaWN0X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiBzdHIsIGdmbG9hdCBhLCBnaW50IGIsIEdFcnJvciAqKmVycm9yKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHIsIDApOwotICAgIFdU
Rjo6U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OmJvb2w+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+c3RyaWN0RnVuY3Rpb24oY29udmVydGVk
X3N0ciwgYSwgYiwgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVy
YWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUs
IGVjZGVzYy5uYW1lKTsKKyAgICBjYXNlIFBST1BfSU5UX0FUVFI6CisgICAgeworICAgICAgICBn
X3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aW50QXR0cigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9MT05HX0xPTkdfQVRUUjoKKyAgICB7CisgICAgICAg
IGdfdmFsdWVfc2V0X2ludDY0KHZhbHVlLCBjb3JlU2VsZi0+bG9uZ0xvbmdBdHRyKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRS
OgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludDY0KHZhbHVlLCBjb3JlU2VsZi0+dW5z
aWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyKCkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9URVNUX09CSl9BVFRSOgorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT50ZXN0T2JqQXR0cigp
OworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQo
KSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1hNTF9PQkpfQVRUUjoK
KyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+
eG1sT2JqQXR0cigpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6
a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0NS
RUFURToKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvcmVTZWxm
LT5pc0NyZWF0ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdS
QUxfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X3Vsb25nKHZhbHVlLCBjb3JlU2Vs
Zi0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6CisgICAgeworICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0
VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19B
VFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRv
VVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxfQVRUUjoKKyAgICB7CisgICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09MRUFO
X0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2Vs
Zi0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5B
dHRyQXR0cikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RF
RF9DVVNUT01fVVJMX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIpKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046CisgICAg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgZ192YWx1
ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9F
WENFUFRJT046CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2Vs
Zi0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKGVjKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYt
PnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6CisgICAgeworICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+d2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NS
SVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURToKKyAgICB7CisgICAgICAgIFJlZlB0cjxX
ZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6
OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9X
SVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKTsKKyAg
ICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJ
T05fQ09OVEVYVF9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIg
PSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoZWMp
OworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQo
KSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VY
RUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFOgorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5E
X1NDUklQVF9TVEFURV9BVFRSSUJVVEVfUkFJU0VTOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBw
dHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyhlYyk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2Vi
S2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9XSVRIX1NQ
QUNFU19BVFRSSUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4g
cHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
V2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFBST1BfV0lUSF9TQ1JJUFRfQVJHVU1FTlRTX0FORF9DQUxMX1NUQUNLX0FUVFJJQlVURToKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpOworICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgY2FzZSBQUk9QX0NPTkRJVElP
TkFMX0FUVFIxOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNl
bGYtPmNvbmRpdGlvbmFsQXR0cjEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxF
KENvbmRpdGlvbjIpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIyOgorICAgIHsKKyAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmNvbmRpdGlvbmFsQXR0cjIo
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMzoKKyAgICB7Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIz
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworICAgIGNhc2UgUFJPUF9DT05URU5UX0RPQ1VNRU5U
OgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50PiBwdHIgPSBjb3JlU2Vs
Zi0+Y29udGVudERvY3VtZW50KCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
V2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFBST1BfTVVUQUJMRV9QT0lOVDoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpTVkdQ
b2ludD4gcHRyID0gY29yZVNlbGYtPm11dGFibGVQb2ludCgpOworICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQUk9QX0lNTVVUQUJMRV9QT0lOVDoKKyAgICB7CisgICAgICAgIFJl
ZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gcHRyID0gY29yZVNlbGYtPmltbXV0YWJsZVBvaW50KCk7
CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgor
ICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGNvcmVTZWxmLT5zdHJpY3RG
bG9hdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9ERVNDUklQVElP
TjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5kZXNj
cmlwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9JRDoKKyAg
ICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pZCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9IQVNIOgorICAgIHsKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+
aGFzaCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXZWJLaXRET01ib29sKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2xvbmcKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5yZWFkT25seUludEF0
dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5y
ZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJlczsKIH0KIAotV2ViS2l0RE9NVGVz
dE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV90ZXN0X29ial9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFkT25seVRlc3RP
YmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVz
LmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQogCi1nc2hvcnQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3N0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hvcnRBdHRyKCk7Ci0gICAgcmV0dXJu
IHJlczsKLX0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hvcnRfYXR0cihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
c2V0U2hvcnRBdHRyKHZhbHVlKTsKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90
ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3Qp
OwogfQogCi1ndXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCiB7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGd1c2hvcnQgcmVzID0gaXRlbS0+dW5zaWduZWRTaG9ydEF0dHIo
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91
bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1c2hvcnQgdmFsdWUp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRTaG9ydEF0dHIodmFsdWUpOwotfQot
Ci1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50QXR0
cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPnNldEludEF0dHIodmFsdWUpOwotfQotCi1naW50NjQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdpbnQ2NCByZXMgPSBpdGVtLT5sb25nTG9uZ0F0dHIoKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xv
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50NjQgdmFsdWUpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVlKTsKLX0KLQotZ3VpbnQ2NAotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3VpbnQ2NCByZXMgPSBpdGVtLT51bnNp
Z25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGd1aW50NjQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRM
b25nTG9uZ0F0dHIodmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0dHIoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3Ry
aW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+
c2V0U3RyaW5nQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0dHIoKSk7Ci0gICAgV2ViS2l0RE9N
VGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZl
cnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29u
dmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZf
ZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRUZXN0T2JqQXR0cihj
b252ZXJ0ZWRfdmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT54bWxPYmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdl
YktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7
Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2Vi
S2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFs
dWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Ci19
Ci0KLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jcmVhdGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+
aXNDcmVhdGUoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
c3RyaW5nYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdsb25n
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVt
LT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVn
cmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwot
fQotCi1ndWxvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91bnNpZ25lZF9p
bnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGd1bG9uZyByZXMgPSBpdGVtLT5nZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKTsKLSAgICBy
ZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
dW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFs
dWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgdmFs
dWUpOwotfQotCi1nYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2Jv
b2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Qm9v
bGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0
ciwgdmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91cmxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVk
X3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgY29udmVydGVk
X3ZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0
cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBj
b252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0t
PnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRy
QXR0ciwgY29udmVydGVkX3ZhbHVlKTsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRy
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9y
ZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgdmFsdWUpOwot
fQotCi1nYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV9i
b29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
aXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRCb29sZWFuQXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRV
UkxBdHRyQXR0cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nbG9u
Zwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGdsb25nIHJlcyA9IGl0ZW0t
PmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNl
dEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nbG9uZwotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+
YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0QXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0
X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwg
ZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdjaGFyKgotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAg
IHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19h
dHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oY29udmVydGVkX3Zh
bHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7Ci0gICAgfQotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmlu
Z19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVt
LT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gcmVzOwotfQot
Ci12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJy
b3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnZlcnRlZF92YWx1ZSwgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0K
LQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJp
YnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXMgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gcmVz
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKHZhbHVlKTsKLX0KLQotV2Vi
S2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKSk7Ci0gICAg
V2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJl
dHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0
X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAg
ICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6
OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7
Ci0gICAgfQotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
KGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7Ci0gICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAg
ICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcyhjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRy
aWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoZWMpKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7
Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmco
IldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2Vi
S2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVy
biByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4
ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0
ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZl
cnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9l
cnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVj
ZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01UZXN0T2JqKgot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5k
X3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6
Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0g
ICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0V2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRf
dmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVf
cmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwotICAg
IGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNk
ZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9t
X3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0K
LSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0g
ICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9z
Y3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2Vz
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3Ig
KiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUg
IT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUp
OwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoY29udmVydGVkX3Zh
bHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRo
X3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dp
dGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0
T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFs
dWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFs
dWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQot
ICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMg
PSBpdGVtLT5jb25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0
cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENv
bmRpdGlvbjEpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMSh2YWx1ZSk7
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0KLWdsb25nCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOwotICAgIHJl
dHVybiByZXM7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRy
Mih2YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRp
b24yKSAqLwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxf
YXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0
ZW0tPmNvbmRpdGlvbmFsQXR0cjMoKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUp
Ci17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjModmFsdWUpOwotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotV2ViS2l0RE9NRG9j
dW1lbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6RG9jdW1lbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVudERvY3VtZW50KCkp
OwotICAgIFdlYktpdERPTURvY3VtZW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotV2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50KCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50KiBy
ZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01TVkdQb2ludCogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6U1ZHUG9pbnQgKiBjb252ZXJ0ZWRfdmFs
dWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92
YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29u
dmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0TXV0YWJsZVBvaW50KGNvbnZlcnRl
ZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQ
dHIoaXRlbS0+aW1tdXRhYmxlUG9pbnQoKSk7Ci0gICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9
IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVl
ID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFs
dWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRl
ZF92YWx1ZSk7Ci19Ci0KLWdmbG9hdAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaWN0X2Zs
b2F0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdmbG9h
dCByZXMgPSBpdGVtLT5zdHJpY3RGbG9hdCgpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnZmxvYXQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQo
dmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVz
ID0gaXRlbS0+ZGVzY3JpcHRpb24oKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nbG9uZwotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKLSAgICByZXR1cm4gcmVzOwot
fQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJZCh2YWx1ZSk7Ci19
Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5oYXNoKCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLQotR19ERUZJTkVf
VFlQRShXZWJLaXRET01UZXN0T2JqLCB3ZWJraXRfZG9tX3Rlc3Rfb2JqLCBXRUJLSVRfVFlQRV9E
T01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6VGVzdE9iaiogY29y
ZShXZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHJlcXVlc3QsIDApOwotCi0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZU9iamVjdCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAg
ICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci1lbnVtIHsK
LSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUFEX09OTFlfSU5UX0FUVFIsCi0gICAgUFJPUF9SRUFE
X09OTFlfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAg
ICBQUk9QX1NIT1JUX0FUVFIsCi0gICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgIFBS
T1BfSU5UX0FUVFIsCi0gICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKLSAgICBQUk9QX1VOU0lHTkVE
X0xPTkdfTE9OR19BVFRSLAotICAgIFBST1BfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9URVNUX09C
Sl9BVFRSLAotICAgIFBST1BfWE1MX09CSl9BVFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBS
T1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAotICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FU
VFIsCi0gICAgUFJPUF9SRUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9Q
X1JFRkxFQ1RFRF9CT09MRUFOX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0g
ICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9N
X0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwK
LSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFIsCi0gICAgUFJPUF9BVFRSX1dJVEhf
R0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAot
ICAgIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfU1RS
SU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RB
VEVfQVRUUklCVVRFLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRU
UklCVVRFLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywKLSAg
ICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVMsCi0g
ICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FU
VFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElP
Tl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFLAotICAgIFBS
T1BfV0lUSF9TQ1JJUFRfQVJHVU1FTlRTX0FORF9DQUxMX1NUQUNLX0FUVFJJQlVURSwKLSNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLSNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMywK
LSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi0g
ICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAotICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKLSAgICBQ
Uk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAgICBQUk9QX1NUUklDVF9GTE9BVCwKLSAgICBQUk9QX0RF
U0NSSVBUSU9OLAotICAgIFBST1BfSUQsCi0gICAgUFJPUF9IQVNILAotfTsKLQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAg
ICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
OwotICAgIAotICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7Ci0gICAgICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0T2JqICo+
KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOwotCi0gICAgICAgIFdlYktpdDo6RE9NT2JqZWN0Q2Fj
aGU6OmZvcmdldChjb3JlT2JqZWN0KTsKLSAgICAgICAgY29yZU9iamVjdC0+ZGVyZWYoKTsKLQot
ICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9i
amVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9i
amVjdCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JU
X0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRTaG9ydEF0dHIoKGdf
dmFsdWVfZ2V0X3VpbnQodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFBST1BfSU5UX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0SW50QXR0cigoZ192
YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5z
ZXRVbnNpZ25lZExvbmdMb25nQXR0cigoZ192YWx1ZV9nZXRfdWludDY0KHZhbHVlKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgotICAgIHsKLSAg
ICAgICAgY29yZVNlbGYtPnNldFN0cmluZ0F0dHIoV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9DUkVBVEU6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0Q3JlYXRlKChnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQ
Uk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAg
ICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9sb25nKHZhbHVl
KSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VTlNJ
R05FRF9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVk
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGlu
dGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSOgotICAgIHsK
LSAgICAgICAgY29yZVNlbGYtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRU
UjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJP
UF9SRUZMRUNURURfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxf
QVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCAoZ192YWx1ZV9n
ZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9S
RUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5z
ZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xl
YW5BdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoKLSAgICB7
Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50VVJMQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRU
Ul9XSVRIX0dFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VU
VEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRU
RVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihX
VEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRS
SUJVVEU6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0j
aWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIxOgot
ICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjEoKGdfdmFsdWVfZ2V0
X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgKi8KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlv
bjIpCi0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIyOgotICAgIHsKLSAgICAgICAgY29y
ZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjIoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMzoKLSAgICB7Ci0gICAgICAg
IGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIzKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKSAqLwotICAgIGNhc2UgUFJPUF9TVFJJQ1RfRkxPQVQ6Ci0gICAg
ewotICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaWN0RmxvYXQoKGdfdmFsdWVfZ2V0X2Zsb2F0KHZh
bHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0lEOgotICAgIHsK
LSAgICAgICAgY29yZVNlbGYtPnNldElkKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2Jq
ZWN0KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAgICBjYXNlIFBST1BfUkVBRF9PTkxZX0lOVF9B
VFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPnJl
YWRPbmx5SW50QXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9S
RUFEX09OTFlfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5n
KHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5yZWFkT25seVN0cmluZ0F0dHIo
KSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFQURfT05MWV9URVNU
X09CSl9BVFRSOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9
IGNvcmVTZWxmLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29i
amVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0
X2ludCh2YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192
YWx1ZV9zZXRfdWludCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkU2hvcnRBdHRyKCkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0lOVF9BVFRSOgotICAgIHsKLSAgICAg
ICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmludEF0dHIoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfTE9OR19MT05HX0FUVFI6Ci0gICAgewotICAg
ICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2YWx1ZSwgY29yZVNlbGYtPmxvbmdMb25nQXR0cigpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdf
QVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2NCh2YWx1ZSwgY29yZVNlbGYt
PnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBQUk9QX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cigpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVEVTVF9PQkpfQVRUUjoKLSAgICB7Ci0g
ICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+dGVzdE9iakF0
dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIu
Z2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FU
VFI6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNl
bGYtPnhtbE9iakF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJL
aXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJP
UF9DUkVBVEU6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3Jl
U2VsZi0+aXNDcmVhdGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1Bf
UkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewot
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lO
VEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgY29y
ZVNlbGYtPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAg
IGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYt
PmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRy
KSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJ
TkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZl
cnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9P
TEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29y
ZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29s
ZWFuQXR0ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfQ1VTVE9NX1VSTF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
Zyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+Z2V0VVJMQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgot
ICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihl
YykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRU
RVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29y
ZVNlbGYtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7
Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBnX3ZhbHVl
X3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAg
ICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVT
ZWxmLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFOgotICAgIHsK
LSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRI
X1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEU6Ci0gICAgewotICAgICAgICBSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlKCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2Vi
S2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBS
T1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYyk7
Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhF
Q1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4g
cHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
KGVjKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIu
Z2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQ
VF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKLSAgICB7Ci0g
ICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpOwotICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhU
X0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9i
aj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoZWMpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfV0lU
SF9TUEFDRVNfQVRUUklCVVRFOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEU6
Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYt
PndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKTsKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGNhc2UgUFJPUF9DT05E
SVRJT05BTF9BVFRSMToKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNv
cmVTZWxmLT5jb25kaXRpb25hbEF0dHIxKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKLSAgICB7
Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0
dHIyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6Ci0gICAg
ewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxB
dHRyMygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLSAgICBjYXNlIFBST1BfQ09OVEVOVF9ET0NV
TUVOVDoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gcHRyID0gY29y
ZVNlbGYtPmNvbnRlbnREb2N1bWVudCgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6
U1ZHUG9pbnQ+IHB0ciA9IGNvcmVTZWxmLT5tdXRhYmxlUG9pbnQoKTsKLSAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9JTlQ6Ci0gICAgewotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0ciA9IGNvcmVTZWxmLT5pbW11dGFibGVQb2lu
dCgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5n
ZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklDVF9GTE9B
VDoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+c3Ry
aWN0RmxvYXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVTQ1JJ
UFRJT046Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+
ZGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSUQ6
Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aWQoKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSEFTSDoKLSAgICB7Ci0gICAg
ICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNl
bGYtPmhhc2goKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNw
ZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCi17Ci0KLSAgICBpZiAoR19P
QkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3Rl
ZCkKLSAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17
Ci0gICAgR09iamVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0
Q2xhc3MpOwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2ZpbmFsaXplOwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0
cnVjdGVkID0gd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RlZDsKKyAgICBHT2JqZWN0Q2xh
c3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxpemU7CisgICAg
Z29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9w
ZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2NvbnN0cnVjdGVkOwogCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX1JFQURfT05MWV9JTlRfQVRUUiwKQEAgLTIyNzksMTEzICs4NDAsMTU4NCBAQCBHX01B
WExPTkcsIC8qIG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3Qg
dHlwZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIx
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmco
ImNvbmRpdGlvbmFsLWF0dHIxIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwt
YXR0cjEiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVz
dE9iai5jb25kaXRpb25hbC1hdHRyMSIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBl
eHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05H
LCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJj
b25kaXRpb25hbC1hdHRyMSIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0
dHIxIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RP
YmouY29uZGl0aW9uYWwtYXR0cjEiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KK0dfTUFYTE9ORywg
LyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0NPTkRJVElPTkFMX0FUVFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIyIiwgLyogbmFtZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dF9vYmpfY29uZGl0aW9uYWwtYXR0cjIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVh
ZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMiIsIC8qIGxvbmdlciAtIGNv
dWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8q
IG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURXUklURSkpOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFC
TEUoQ29uZGl0aW9uMikgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FU
VFIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xv
bmcoImNvbmRpdGlvbmFsLWF0dHIzIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9u
YWwtYXR0cjMiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcg
VGVzdE9iai5jb25kaXRpb25hbC1hdHRyMyIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29t
ZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhM
T05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
ImNvbnRlbnQtZG9jdW1lbnQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jb250ZW50LWRvY3Vt
ZW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NRG9j
dW1lbnQqIFRlc3RPYmouY29udGVudC1kb2N1bWVudCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdp
dGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fRE9DVU1F
TlQsIC8qIGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIm11dGFibGUtcG9p
bnQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLm11
dGFibGUtcG9pbnQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NWR19QT0lOVCwgLyogZ29iamVjdCB0eXBl
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfSU1NVVRBQkxFX1BPSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiaW1tdXRhYmxlLXBvaW50IiwgLyogbmFtZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGVzdF9vYmpfaW1tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLmltbXV0YWJsZS1wb2lu
dCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9TVFJJQ1RfRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfZmxvYXQoInN0cmljdC1mbG9hdCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0
cmljdC1mbG9hdCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnZmxv
YXQgVGVzdE9iai5zdHJpY3QtZmxvYXQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUg
ZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsIC8qIG1pbiAqLworR19NQVhG
TE9BVCwgLyogbWF4ICovCiswLjAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9ERVNDUklQVElPTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJk
ZXNjcmlwdGlvbiIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2Rlc2NyaXB0aW9uIiwgLyogc2hv
cnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgZ2xvbmcgVGVzdE9iai5kZXNjcmlwdGlv
biIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRl
ZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX2xvbmcoImlkIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaWQiLCAvKiBz
aG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5pZCIsIC8q
IGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
X01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9IQVNILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX3N0cmluZygiaGFzaCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2hhc2giLCAv
KiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnY2hhciogVGVzdE9iai5oYXNo
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIiLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9pbml0KFdlYktpdERPTVRlc3RPYmoq
IHJlcXVlc3QpCit7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Qo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT52b2lkTWV0aG9k
KCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdz
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJf
YXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc3RyX2FyZyk7CisgICAgZ19yZXR1cm5faWZfZmFpbChvYmpfYXJnKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJf
YXJnKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwor
ICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBX
ZWJLaXQ6OmNvcmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVk
X29ial9hcmcpOworICAgIH0KKyAgICBpdGVtLT52b2lkTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywg
Y29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnKTsKK30KKworZ2xvbmcKK3dlYmtp
dF9kb21fdGVzdF9vYmpfaW50X21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRob2QoKTsKKyAgICByZXR1
cm4gcmVzOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhf
YXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciog
c3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwob2JqX2FyZywgMCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNv
bnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKKyAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOworICAgICAgICBn
X3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7CisgICAgfQorICAgIGds
b25nIHJlcyA9IGl0ZW0tPmludE1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZlcnRlZF9zdHJf
YXJnLCBjb252ZXJ0ZWRfb2JqX2FyZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2ViS2l0RE9N
VGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RP
Ymo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOworICAgIFdlYktpdERP
TVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVz
OworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9k
X3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBn
Y2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9h
cmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKKyAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7
CisgICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOworICAg
ICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7CisgICAgfQor
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT5vYmpNZXRob2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVk
X29ial9hcmcpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jl
cy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9Nc2VxdWVuY2UqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7CisgICAg
V2ViQ29yZTo6c2VxdWVuY2UgKiBjb252ZXJ0ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwp
IHsKKyAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAgIH0KKyAgICBpdGVtLT5tZXRob2RXaXRoU2VxdWVu
Y2VBcmcoY29udmVydGVkXyk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9i
al9hcmcsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJn
LCAwKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzdHJfYXJnKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9h
cmcgPSBOVUxMOworICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVk
X29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAwKTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29u
dmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOworICAgIGlmIChlYykgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAg
ICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRE
T01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJl
czsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFs
aXplZF9hcmcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2Fy
Zyk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3Nlcmlh
bGl6ZWRfYXJnID0gTlVMTDsKKyAgICBpZiAoc2VyaWFsaXplZF9hcmcgIT0gTlVMTCkgeworICAg
ICAgICBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9h
cmcpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7
CisgICAgfQorICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9h
cmcpOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1
cm5faWZfZmFpbChrZXkpOworICAgIFdlYkNvcmU6OklEQktleSAqIGNvbnZlcnRlZF9rZXkgPSBO
VUxMOworICAgIGlmIChrZXkgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfa2V5ID0gV2Vi
S2l0Ojpjb3JlKGtleSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2tleSk7
CisgICAgfQorICAgIGl0ZW0tPmlkYktleShjb252ZXJ0ZWRfa2V5KTsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01EaWN0aW9uYXJ5KiBvbywgV2ViS2l0RE9NRGljdGlvbmFyeSogb29vKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob28pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob29v
KTsKKyAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vID0gTlVMTDsKKyAgICBp
ZiAob28gIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUob28p
OworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vbyk7CisgICAgfQorICAgIFdl
YkNvcmU6OkRpY3Rpb25hcnkgKiBjb252ZXJ0ZWRfb29vID0gTlVMTDsKKyAgICBpZiAob29vICE9
IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29vbyA9IFdlYktpdDo6Y29yZShvb28pOworICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vb28pOworICAgIH0KKyAgICBpdGVtLT5v
cHRpb25zT2JqZWN0KGNvbnZlcnRlZF9vbywgY29udmVydGVkX29vbyk7Cit9CisKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPm1ldGhvZFdpdGhFeGNlcHRpb24oZWMpOworICAgIGlm
IChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNj
KGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0
cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30K
Kwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRl
Vm9pZCgpOworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial93aXRo
X3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iaigpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMg
PSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT53aXRoU2NyaXB0U3RhdGVWb2lk
RXhjZXB0aW9uKGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwo
ZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVj
ZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
OworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9z
Y3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKCk7Cit9CisKK1dlYktpdERP
TVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVPYmpFeGNlcHRpb24oZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2Vi
S2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVRl
c3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0
X2FuZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
bG9uZyBvcHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9w
dCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlv
bmFsX2FyZ19hbmRfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5v
bl9vcHQsIGdsb25nIG9wdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhub25fb3B0LCBvcHQpOworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25h
bF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25nIG9wdDEs
IGdsb25nIG9wdDIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFs
QXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbl9vcHQsIG9wdDEsIG9wdDIpOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc3RyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKGNv
bnZlcnRlZF9zdHIpOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29u
c3QgZ2NoYXIqIHN0cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIp
OworICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKGNvbnZlcnRl
ZF9zdHIpOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlv
bmFsX3N0cmluZ19pc19udWxsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogc3RyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKKyAgICBX
VEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Cisg
ICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nKGNvbnZlcnRlZF9z
dHIpOworfQorCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9k
MShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5j
b25kaXRpb25hbE1ldGhvZDEoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgcmV0dXJuIE5VTEw7
CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
I2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKKyNlbHNlCisjaWYgIUVOQUJMRShDb25kaXRp
b24xKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQor
I2VuZGlmCisjaWYgIUVOQUJMRShDb25kaXRpb24yKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmCisjZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+Y29uZGl0aW9uYWxNZXRob2QzKCk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9jbGFz
c19tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5j
bGFzc01ldGhvZCgpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19tZXRo
b2Rfd2l0aF9vcHRpb25hbChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNsYXNzTWV0aG9kV2l0aE9wdGlv
bmFsKGFyZyk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9vdmVybG9hZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgYXJnKQor
eworI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPm92ZXJsb2FkZWRN
ZXRob2QxKGFyZyk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjEiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRfbWV0aG9kMShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHR5cGUpOworICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZF90eXBlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHR5cGUpOworICAgIGl0ZW0tPm92ZXJs
b2FkZWRNZXRob2QxKGNvbnZlcnRlZF90eXBlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYSogKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoKTsKKyAgICBXZWJDb3JlOjphICogY29udmVydGVkXyA9IE5VTEw7CisgICAgaWYgKCAh
PSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+Y29udmVydDEo
Y29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYiogKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpiICogY29udmVydGVkXyA9IE5VTEw7CisgICAg
aWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+Y29u
dmVydDIoY29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29udmVy
dDMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYyogKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpjICogY29udmVydGVkXyA9IE5VTEw7
CisgICAgaWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUo
KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRl
bS0+Y29udmVydDMoY29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Y29udmVydDQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NZCogKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpkICogY29udmVydGVkXyA9
IE5VTEw7CisgICAgaWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6
OmNvcmUoKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICB9Cisg
ICAgaXRlbS0+Y29udmVydDQoY29udmVydGVkXyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVz
dF9vYmpfY29udmVydDUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NZSogKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjplICogY29udmVy
dGVkXyA9IE5VTEw7CisgICAgaWYgKCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF8gPSBX
ZWJLaXQ6OmNvcmUoKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAg
ICB9CisgICAgaXRlbS0+Y29udmVydDUoY29udmVydGVkXyk7Cit9CisKK1dlYktpdERPTVNWR1Bv
aW50Kgord2Via2l0X2RvbV90ZXN0X29ial9tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50RnVuY3Rp
b24oKSk7CisgICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdl
dCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9k
b21fdGVzdF9vYmpfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+
IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKKyAg
ICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAg
IHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+b3JhbmdlKCk7Cit9CisK
K1dlYktpdERPTWJvb2wqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3N0cmljdF9mdW5jdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyLCBnZmxvYXQgYSwgZ2ludCBiLCBH
RXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc3RyLCAwKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHN0cik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpib29sPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnN0cmlj
dEZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIsIGEsIGIsIGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTWJv
b2wqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQor
CitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0
ZW0tPnJlYWRPbmx5SW50QXR0cigpOworICAgIHJldHVybiByZXM7Cit9CisKK2djaGFyKgord2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5
X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK2dzaG9ydAor
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hvcnRBdHRyKCk7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2hv
cnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKK30KKworZ3VzaG9ydAord2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkU2hv
cnRBdHRyKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndXNob3J0
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkU2hvcnRBdHRyKHZhbHVl
KTsKK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0t
PmludEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9pbnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRBdHRyKHZhbHVlKTsKK30KKworZ2ludDY0Cit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnaW50NjQgcmVzID0gaXRlbS0+bG9uZ0xvbmdBdHRy
KCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRf
bG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0IHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldExvbmdMb25nQXR0cih2YWx1ZSk7Cit9CisKK2d1aW50NjQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1aW50NjQgcmVzID0gaXRl
bS0+dW5zaWduZWRMb25nTG9uZ0F0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBndWludDY0IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVu
c2lnbmVkTG9uZ0xvbmdBdHRyKHZhbHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdB
dHRyKCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0
cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAg
IGl0ZW0tPnNldFN0cmluZ0F0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVz
dE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpU
ZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnRlc3RPYmpBdHRyKCkpOworICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1
cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0VGVzdE9i
akF0dHIoY29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+eG1sT2JqQXR0cigpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiBy
ZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9p
ZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUg
PSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1
ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVy
dGVkX3ZhbHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0WE1MT2JqQXR0cihjb252ZXJ0ZWRfdmFs
dWUpOworfQorCitnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdib29sZWFuIHJlcyA9
IGl0ZW0tPmlzQ3JlYXRlKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZh
bHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENyZWF0ZSh2YWx1ZSk7Cit9CisKK2djaGFy
Kgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252
ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOworfQor
CitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVz
ID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWRpbnRlZ3JhbGF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHZh
bHVlKTsKK30KKworZ3Vsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5z
aWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBndWxvbmcgcmVzID0gaXRlbS0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cik7
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVm
bGVjdGVkX3Vuc2lnbmVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vs
b25nIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0
dHIsIHZhbHVlKTsKK30KKworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2
b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
PnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFu
YXR0ckF0dHIsIHZhbHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9y
ZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRf
dXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIGNv
bnZlcnRlZF92YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwor
ICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxl
Y3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFs
dWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV1RGOjpT
dHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAg
ICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3Ry
aW5nQXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Z2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxB
dHRyQXR0cik7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29i
al9zZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIHZh
bHVlKTsKK30KKworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9j
dXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpOworICAgIHJldHVybiByZXM7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVh
bl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCB2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKK30K
KworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnbG9uZyByZXMg
PSBpdGVtLT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIHJldHVybiByZXM7
Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhj
ZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJv
cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBp
dGVtLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2xv
bmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9
IGl0ZW0tPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwor
dm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNl
dEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAg
ICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAg
ICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRf
RE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhcioKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2NoYXIqIHJlcyA9IGNv
bnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMp
KTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9z
dHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGNvbnZl
cnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9zdHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHJl
czsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9z
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1
ZSwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVt
LT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihjb252ZXJ0ZWRfdmFsdWUsIGVjKTsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
IGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtf
ZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAg
ICB9Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0
ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzID0gaXRlbS0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRf
c3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSh2YWx1ZSk7Cit9
CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Njcmlw
dF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCkp
OworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsK
KyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5V
TEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0g
V2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRf
dmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyhlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3Ip
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwp
IHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01UZXN0
T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRl
eHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJv
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3Nj
cmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
Y29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAg
ICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzKGNvbnZlcnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAg
Z19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RP
TSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVz
dE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250
ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMg
PSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRl
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1
ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVM
TCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0t
PnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoY29u
dmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0
cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMp
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0
aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVh
cmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsK
KyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0
KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRl
X3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwg
R0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYg
KHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3Jl
KHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAg
IH0KKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGNvbnZl
cnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGVfd2l0aF9zcGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6
OmdldFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZSgpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9z
dGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9NVGVzdE9iaiogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAg
aWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpj
b3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwor
ICAgIH0KKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOworfQorCitnbG9uZword2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xv
bmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMSgpOworICAgIHJldHVybiByZXM7CisjZWxz
ZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0
dHIxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworI2lmIEVOQUJMRShD
b25kaXRpb24xKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjEodmFsdWUp
OworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24x
IikKICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKworZ2xvbmcKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Cit7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRpb25h
bC1hdHRyMiIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIyIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29uZGl0
aW9uYWwtYXR0cjIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KLUdfTUFYTE9ORywgLyogbWF4ICov
Ci0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOworICAgIHJl
dHVybiByZXM7CisjZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgorI2lmICFFTkFCTEUo
Q29uZGl0aW9uMikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yIikKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CiAjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2
YWx1ZSk7CisjZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgorI2lmICFFTkFCTEUoQ29u
ZGl0aW9uMikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKKyNlbmRpZgorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFs
X2F0dHIzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9DT05ESVRJT05BTF9BVFRSMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRpb25hbC1hdHRyMyIsIC8qIG5hbWUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIzIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
YWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBsb25nZXIgLSBj
b3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5MT05HLCAv
KiBtaW4gKi8KLUdfTUFYTE9ORywgLyogbWF4ICovCi0wLCAvKiBkZWZhdWx0ICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRl
bS0+Y29uZGl0aW9uYWxBdHRyMygpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnbG9uZz4oMCk7CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKSAqLwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENs
YXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05URU5UX0RP
Q1VNRU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgiY29udGVudC1kb2N1bWVudCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbnRl
bnQtZG9jdW1lbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBXZWJL
aXRET01Eb2N1bWVudCogVGVzdE9iai5jb250ZW50LWRvY3VtZW50IiwgLyogbG9uZ2VyIC0gY291
bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RP
TV9ET0NVTUVOVCwgLyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkp
OwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NVVRBQkxFX1BPSU5ULAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgibXV0
YWJsZS1wb2ludCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX211dGFibGUtcG9pbnQiLCAvKiBz
aG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRl
c3RPYmoubXV0YWJsZS1wb2ludCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRy
YSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2Jq
ZWN0IHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJpbW11dGFibGUtcG9pbnQiLCAv
KiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9pbW11dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNjcmlw
dGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmouaW1tdXRh
YmxlLXBvaW50IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVm
ZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9TVkdfUE9JTlQsIC8qIGdvYmplY3QgdHlwZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX1NUUklDVF9GTE9BVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19mbG9hdCgic3RyaWN0LWZsb2F0IiwgLyogbmFtZSAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVz
dF9vYmpfc3RyaWN0LWZsb2F0IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3Jp
dGUgIGdmbG9hdCBUZXN0T2JqLnN0cmljdC1mbG9hdCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdp
dGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwgLyogbWluICov
Ci1HX01BWEZMT0FULCAvKiBtYXggKi8KLTAuMCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2Jq
ZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU0NS
SVBUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2xvbmcoImRlc2NyaXB0aW9uIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfZGVzY3JpcHRpb24i
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnbG9uZyBUZXN0T2JqLmRl
c2NyaXB0aW9uIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVm
ZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwot
MCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLSAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiaWQiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9p
ZCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2Jq
LmlkIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyog
ZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX0hBU0gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJoYXNoIiwgLyogbmFtZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpf
aGFzaCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdjaGFyKiBUZXN0
T2JqLmhhc2giLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZm
IGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiIsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworI2lmIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDb25kaXRp
b25hbEF0dHIzKHZhbHVlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJF
U0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKSAqLworfQogCitXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgV2ViS2l0RE9NRG9jdW1lbnQqIHJl
cyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQogCitXZWJL
aXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5tdXRhYmxlUG9pbnQo
KSk7CisgICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKKyAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2luaXQoV2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU1ZH
UG9pbnQqIHZhbHVlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAo
dmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUo
dmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAg
fQorICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOwogfQogCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0T2JqKFdlYkNvcmU6OlRl
c3RPYmoqIGNvcmVPYmplY3QpCitXZWJLaXRET01TVkdQb2ludCoKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmlt
bXV0YWJsZVBvaW50KCkpOworICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6Omtp
dChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KIAotICAgIC8qIFdlIGNhbGwgcmVm
KCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0
IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1
Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcg
ZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK3ZvaWQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01TVkdQb2ludCogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFp
bCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U1ZHUG9pbnQgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxM
OworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdl
YktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3Zh
bHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0SW1tdXRhYmxlUG9pbnQoY29udmVydGVkX3ZhbHVl
KTsKK30KIAotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfT0JKLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitnZmxvYXQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnZmxvYXQgcmVzID0gaXRlbS0+c3RyaWN0Rmxv
YXQoKTsKKyAgICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnZmxvYXQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQo
dmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVz
ID0gaXRlbS0+ZGVzY3JpcHRpb24oKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnbG9uZword2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+aWQoKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJZCh2YWx1ZSk7Cit9
CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5oYXNoKCkpOworICAgIHJldHVybiByZXM7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmpQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oCmluZGV4IDk2NzIyZjc5NzUzYzM5ZDJkMWFj
ZDJlYTcwNGJhNzdkZmJiYzU1NjEuLjJmN2FlMmFlYTg3ZThmMTcwNTZiMmZkNjhlYzU5NTRkZWVm
NTRiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaApAQCAt
MjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
L1dlYktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RPYmouaCIKKworCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0T2JqICoKICAgICB3cmFwVGVzdE9iaihXZWJDb3Jl
OjpUZXN0T2JqICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5k
ZXggODQ1YTM3MzdjMWExMmNhYTQ3YTBmMmEwYTE2ZDk0ZjU2YjhlMjAzMC4uZGE5NTlkZGRiOGNk
MjM3MzU0MzY4NGEyMjZmODEyNzM4NzQyZTViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1
ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQotCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgpAQCAtNDIsOCArNDAsMTAgQEAKICNpbmNsdWRl
ICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAor
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKwogbmFtZXNwYWNl
IFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBv
YmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTUzLDE1MyArNTMs
MzcgQEAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdl
YkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmEKIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oRE9NT2JqZWN0Q2Fj
aGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2Uob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3Ry
YW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
c2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJh
eSogdHJhbnNmZXJfbGlzdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodHJhbnNm
ZXJfbGlzdCk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVk
X2RhdGEgPSBOVUxMOwotICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X2RhdGEgPSBXZWJLaXQ6OmNvcmUoZGF0YSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29u
dmVydGVkX2RhdGEpOwotICAgIH0KLSAgICBXZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRlZF90cmFu
c2Zlcl9saXN0ID0gTlVMTDsKLSAgICBpZiAodHJhbnNmZXJfbGlzdCAhPSBOVUxMKSB7Ci0gICAg
ICAgIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gV2ViS2l0Ojpjb3JlKHRyYW5zZmVyX2xpc3Qp
OwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0KTsKLSAg
ICB9Ci0gICAgaXRlbS0+YWNjZXB0VHJhbnNmZXJMaXN0KGNvbnZlcnRlZF9kYXRhLCBjb252ZXJ0
ZWRfdHJhbnNmZXJfbGlzdCk7Ci19CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfbXVsdGlfdHJhbnNmZXJfbGlzdChXZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVk
U2NyaXB0VmFsdWUqIGZpcnN0LCBXZWJLaXRET01BcnJheSogdHgsIFdlYktpdERPTVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSogc2Vjb25kLCBXZWJLaXRET01BcnJheSogdHh4KQorV2ViQ29yZTo6VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQogewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlyc3QpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwodHgpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vjb25kKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHR4eCk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICog
Y29udmVydGVkX2ZpcnN0ID0gTlVMTDsKLSAgICBpZiAoZmlyc3QgIT0gTlVMTCkgewotICAgICAg
ICBjb252ZXJ0ZWRfZmlyc3QgPSBXZWJLaXQ6OmNvcmUoZmlyc3QpOwotICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF9maXJzdCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkFycmF5ICog
Y29udmVydGVkX3R4ID0gTlVMTDsKLSAgICBpZiAodHggIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfdHggPSBXZWJLaXQ6OmNvcmUodHgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNv
bnZlcnRlZF90eCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAq
IGNvbnZlcnRlZF9zZWNvbmQgPSBOVUxMOwotICAgIGlmIChzZWNvbmQgIT0gTlVMTCkgewotICAg
ICAgICBjb252ZXJ0ZWRfc2Vjb25kID0gV2ViS2l0Ojpjb3JlKHNlY29uZCk7Ci0gICAgICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlY29uZCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkFy
cmF5ICogY29udmVydGVkX3R4eCA9IE5VTEw7Ci0gICAgaWYgKHR4eCAhPSBOVUxMKSB7Ci0gICAg
ICAgIGNvbnZlcnRlZF90eHggPSBXZWJLaXQ6OmNvcmUodHh4KTsKLSAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfdHh4KTsKLSAgICB9Ci0gICAgaXRlbS0+bXVsdGlUcmFuc2Zlckxp
c3QoY29udmVydGVkX2ZpcnN0LCBjb252ZXJ0ZWRfdHgsIGNvbnZlcnRlZF9zZWNvbmQsIGNvbnZl
cnRlZF90eHgpOwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwogCi1X
ZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
ZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT52YWx1ZSgpKTsKLSAgICBXZWJLaXRE
T01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsK
LSAgICByZXR1cm4gcmVzOwotfQorICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNv
cmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwogCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3Nl
dF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxm
LCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQotewotICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAg
IFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7
Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2Vi
S2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFs
dWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworICAgIHJl
dHVybiBjb3JlT2JqZWN0OwogfQogCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9yZWFk
b25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBz
ZWxmKQorV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogd3JhcFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZG9ubHlWYWx1ZSgpKTsK
LSAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNvcmVPYmplY3QsIDApOwogCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRf
dmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIo
aXRlbS0+Y2FjaGVkVmFsdWUoKSk7Ci0gICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAg
ICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIg
YmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2Nh
dGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQor
ICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7
CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92
YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVk
X3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRDYWNoZWRWYWx1ZShjb252ZXJ0
ZWRfdmFsdWUpOworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBU
X1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFM
SVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9
CiAKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKLXdlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5j
YWNoZWRSZWFkb25seVZhbHVlKCkpOwotICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Cit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMikKIAogR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRf
dmFsdWVfaW50ZXJmYWNlLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29y
ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0KQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwotCi0gICAgV2ViQ29yZTo6
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRf
RE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiBlbnVtIHsKICAgICBQUk9QXzAsCiAgICAgUFJPUF9WQUxVRSwKQEAg
LTIwOCw5ICs5Miw5IEBAIGVudW0gewogICAgIFBST1BfQ0FDSEVEX1JFQURPTkxZX1ZBTFVFLAog
fTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKKyNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21f
b2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29i
amVjdC0+Y29yZU9iamVjdCkgewpAQCAtMjIxLDYgKzEwNSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZmluYWxpemUoR09i
amVjdCoKIAogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCiAgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2lu
dGVyZmFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtMzI0LDE5ICsy
MDksMTc1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2VfaW5pdChXZWJLaXRET01UZXN0CiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJL
aXQgewotV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogd3JhcFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9z
ZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QoV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNmZXJfbGlz
dCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChkYXRhKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHRyYW5zZmVyX2xpc3QpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSAqIGNvbnZlcnRlZF9kYXRhID0gTlVMTDsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKSB7Cisg
ICAgICAgIGNvbnZlcnRlZF9kYXRhID0gV2ViS2l0Ojpjb3JlKGRhdGEpOworICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF9kYXRhKTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkg
KiBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IE5VTEw7CisgICAgaWYgKHRyYW5zZmVyX2xpc3Qg
IT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IFdlYktpdDo6Y29y
ZSh0cmFuc2Zlcl9saXN0KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdHJh
bnNmZXJfbGlzdCk7CisgICAgfQorICAgIGl0ZW0tPmFjY2VwdFRyYW5zZmVyTGlzdChjb252ZXJ0
ZWRfZGF0YSwgY29udmVydGVkX3RyYW5zZmVyX2xpc3QpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJh
dGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9y
ZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJl
LiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVm
KCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7Cit2b2lkCit3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX211bHRpX3RyYW5zZmVyX2xpc3Qo
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBmaXJzdCwgV2ViS2l0RE9NQXJyYXkqIHR4LCBXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlY29uZCwgV2ViS2l0RE9NQXJyYXkqIHR4eCkK
K3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChmaXJzdCk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh0eCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWNvbmQp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHh4KTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgKiBjb252ZXJ0ZWRfZmlyc3QgPSBOVUxMOworICAgIGlmIChmaXJzdCAhPSBOVUxM
KSB7CisgICAgICAgIGNvbnZlcnRlZF9maXJzdCA9IFdlYktpdDo6Y29yZShmaXJzdCk7CisgICAg
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2ZpcnN0KTsKKyAgICB9CisgICAgV2ViQ29y
ZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHggPSBOVUxMOworICAgIGlmICh0eCAhPSBOVUxMKSB7Cisg
ICAgICAgIGNvbnZlcnRlZF90eCA9IFdlYktpdDo6Y29yZSh0eCk7CisgICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkX3R4KTsKKyAgICB9CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlICogY29udmVydGVkX3NlY29uZCA9IE5VTEw7CisgICAgaWYgKHNlY29uZCAhPSBO
VUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9zZWNvbmQgPSBXZWJLaXQ6OmNvcmUoc2Vjb25kKTsK
KyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2Vjb25kKTsKKyAgICB9CisgICAg
V2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHh4ID0gTlVMTDsKKyAgICBpZiAodHh4ICE9IE5V
TEwpIHsKKyAgICAgICAgY29udmVydGVkX3R4eCA9IFdlYktpdDo6Y29yZSh0eHgpOworICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90eHgpOworICAgIH0KKyAgICBpdGVtLT5tdWx0
aVRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZmlyc3QsIGNvbnZlcnRlZF90eCwgY29udmVydGVkX3Nl
Y29uZCwgY29udmVydGVkX3R4eCk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KK30KIAotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX1NFUklBTEla
RURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RF
U1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBO
VUxMKSk7CitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dmFsdWUoKSk7CisgICAgV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Cisg
ICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29u
ZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYs
IFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCit7CisjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZh
bHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZh
bHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0K
KyAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworI2Vsc2UKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK1dlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfZ2V0X3JlYWRvbmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6
OmdldFB0cihpdGVtLT5yZWFkb25seVZhbHVlKCkpOworICAgIFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiBy
ZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlv
bjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQor
ICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KK30KKworV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgord2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVk
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYp
Cit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jYWNo
ZWRWYWx1ZSgpKTsKKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdl
YktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FS
Tl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vf
c2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQoreworI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwor
ICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktp
dDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVl
KTsKKyAgICB9CisgICAgaXRlbS0+c2V0Q2FjaGVkVmFsdWUoY29udmVydGVkX3ZhbHVlKTsKKyNl
bHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCiAjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCitXZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNhY2hlZFJlYWRvbmx5VmFsdWUo
KSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6Omtp
dChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaAppbmRleCA4MmU3OWEyNmYxN2Y3Y2U2YjYz
NWMzN2Q5ZjI1ZDI3MjQ0ZjNmYjdkLi4zNTMzYzI2ODFjNWE1M2M2MmExMTc1M2FkZWM1OGU1YTc1
YTc4ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmgKQEAgLTI0
LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9X
ZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmgiCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgKgogICAgIHdyYXBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKmNvcmVPYmpl
Y3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpICovCisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBU
X1ZBTFVFX0lOVEVSRkFDRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmNwcAppbmRl
eCAyNTIzYzliNzM5ZTFjMDc5ODBkYTI4YjgxMzBmOTAyNjViM2RlOTZlLi45MzBiNjg3OTJkOTk0
NDU3Njk3NTk4OWIwMzI1NGM0NjNlYTUyY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uY3BwCkBA
IC0yMiw4ICsyMiw3IEBACiAKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIndl
YmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25wcml2YXRlLmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAKIC8qKgogICog
U0VDVElPTjp3ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uCkBAIC0zOSw3ICszOCw5IEBA
IEdfREVGSU5FX1RZUEUoV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiwgd2Via2l0X2dl
b2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvCiAKIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xp
Y3lEZWNpc2lvblByaXZhdGUgewogICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZTsKLSAgICBHZW9s
b2NhdGlvbiogZ2VvbG9jYXRpb247CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFdlYkNv
cmU6Okdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbjsKKyNlbmRpZgogfTsKIAogc3RhdGljIHZvaWQg
d2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9jbGFzc19pbml0KFdlYktpdEdlb2xv
Y2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyogZGVjaXNpb25DbGFzcykKQEAgLTUyLDcgKzUzLDgg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9pbml0KFdl
YktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXMKICAgICBkZWNpc2lvbi0+cHJpdiA9IEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURShkZWNpc2lvbiwgV0VCS0lUX1RZUEVfR0VPTE9DQVRJT05fUE9M
SUNZX0RFQ0lTSU9OLCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSk7CiB9
CiAKLVdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qIHdlYmtpdF9nZW9sb2NhdGlvbl9w
b2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdl
b2xvY2F0aW9uKQorI2lmIEVOQUJMRShHRU9MT0NBVElPTikKK1dlYktpdEdlb2xvY2F0aW9uUG9s
aWN5RGVjaXNpb24qIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktp
dFdlYkZyYW1lKiBmcmFtZSwgV2ViQ29yZTo6R2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGZyYW1lLCBOVUxMKTsKICAgICBXZWJLaXRHZW9sb2Nh
dGlvblBvbGljeURlY2lzaW9uKiBkZWNpc2lvbiA9IFdFQktJVF9HRU9MT0NBVElPTl9QT0xJQ1lf
REVDSVNJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0dFT0xPQ0FUSU9OX1BPTElDWV9ERUNJ
U0lPTiwgTlVMTCkpOwpAQCAtNjIsNiArNjQsNyBAQCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURl
Y2lzaW9uKiB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX25ldyhXZWJLaXRXZQog
ICAgIHByaXYtPmdlb2xvY2F0aW9uID0gZ2VvbG9jYXRpb247CiAgICAgcmV0dXJuIGRlY2lzaW9u
OwogfQorI2VuZGlmCiAKIC8qKgogICogd2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9hbGxvdwpA
QCAtNzMsMTAgKzc2LDE0IEBAIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qIHdlYmtp
dF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlCiAgKi8KIHZvaWQgd2Vi
a2l0X2dlb2xvY2F0aW9uX3BvbGljeV9hbGxvdyhXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lz
aW9uKiBkZWNpc2lvbikKIHsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OKGRlY2lzaW9uKSk7
CiAKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0ZSogcHJpdiA9IGRl
Y2lzaW9uLT5wcml2OwogICAgIHByaXYtPmdlb2xvY2F0aW9uLT5zZXRJc0FsbG93ZWQoVFJVRSk7
CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkdlb2xvY2F0aW9u
IikKKyNlbmRpZgogfQogCiAvKioKQEAgLTg5LDkgKzk2LDEzIEBAIHZvaWQgd2Via2l0X2dlb2xv
Y2F0aW9uX3BvbGljeV9hbGxvdyhXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKiBkZWNp
c2lvbikKICAqLwogdm9pZCB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlbnkoV2ViS2l0R2Vv
bG9jYXRpb25Qb2xpY3lEZWNpc2lvbiogZGVjaXNpb24pCiB7CisjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0dFT0xPQ0FUSU9OX1BPTElDWV9E
RUNJU0lPTihkZWNpc2lvbikpOwogCiAgICAgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lv
blByaXZhdGUqIHByaXYgPSBkZWNpc2lvbi0+cHJpdjsKICAgICBwcml2LT5nZW9sb2NhdGlvbi0+
c2V0SXNBbGxvd2VkKEZBTFNFKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiR2VvbG9jYXRpb24iKQorI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9ucHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b25wcml2YXRlLmgKaW5kZXggZDI1MDA0NGU0NzcwNWI0ZDEzY2E0N2E4OWNlMTAzNmJmMGQ1ODky
Zi4uMTc3MTU0Y2QyZTEyYzdjNDY1NjU0NDZkZGUwNmI4MTYzZDlhYjdlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb25w
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9u
cG9saWN5ZGVjaXNpb25wcml2YXRlLmgKQEAgLTI1LDEwICsyNSwxNCBAQAogCiAjaW5jbHVkZSAi
d2Via2l0Z2VvbG9jYXRpb25wb2xpY3lkZWNpc2lvbi5oIgogCisjaWYgRU5BQkxFKEdFT0xPQ0FU
SU9OKQorCiBleHRlcm4gIkMiIHsKIAogV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiog
d2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9uZXcoV2ViS2l0V2ViRnJhbWUqLCBX
ZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJ
T04pCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGdsb2JhbHNwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFs
c3ByaXZhdGUuaAppbmRleCBhMjIyN2I1OGZlZDk4NWIwYTM1NTgwZjUwZGI1NmY5MWQ0ZDQyMDMw
Li44MGNjNDAyY2ViNWE1MDg0YmI1ZTk2MTYwYzI1NWE5OTcyNmM4MTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaApAQCAtMjgsNiArMjgs
OCBAQAogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBREFCTEUgKChHUGFyYW1GbGFncykoR19QQVJB
TV9SRUFEQUJMRXxHX1BBUkFNX1NUQVRJQ19OQU1FfEdfUEFSQU1fU1RBVElDX05JQ0t8R19QQVJB
TV9TVEFUSUNfQkxVUkIpKQogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFICgoR1BhcmFt
RmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElDX05BTUV8R19QQVJBTV9TVEFU
SUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKKyNkZWZpbmUgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVChGZWF0dXJlKSBnX3dhcm5pbmcoIldlYktpdEdUSysgd2FzIG5vdCBj
b21waWxlZCB3aXRoIHN1cHBvcnQgZm9yICIgRmVhdHVyZSk7CisKIGV4dGVybiAiQyIgewogCiB2
b2lkIHdlYmtpdEluaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCBmMTU2MzNkMWIwMTVhYzQxYWYxMmVkYTE0NDE1MWE4YjVhNGY2YmQxLi41ZDg1
ZGFlODNjNGM3OTEyNjdlMWYxZWE3NDRkMzUxOTIwOWI3ZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0zNTg2LDcgKzM1ODYsOSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogI2VuZGlm
CiAKICAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wUmVuZGVyVHJlZU1vZGVF
bmFibGVkKCkpIHsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAgICAgIHN0YXRpY19jYXN0
PEdlb2xvY2F0aW9uQ2xpZW50TW9jayo+KHBhZ2VDbGllbnRzLmdlb2xvY2F0aW9uQ2xpZW50KS0+
c2V0Q29udHJvbGxlcihwcml2LT5jb3JlUGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCkpOwor
I2VuZGlmCiAgICAgICAgIC8vIFNldCBzb21lIHRlc3Rpbmctc3BlY2lmaWMgc2V0dGluZ3MKICAg
ICAgICAgcHJpdi0+Y29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEludGVyYWN0aXZlRm9ybVZhbGlk
YXRpb25FbmFibGVkKHRydWUpOwogICAgICAgICBwcml2LT5jb3JlUGFnZS0+c2V0dGluZ3MoKS0+
c2V0VmFsaWRhdGlvbk1lc3NhZ2VUaW1lck1hZ25pZmljYXRpb24oLTEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133527</attachid>
            <date>2012-03-23 11:52:52 -0700</date>
            <delta_ts>2012-03-23 12:39:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80030-20120323195251.patch</filename>
            <type>text/plain</type>
            <size>259233</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIzNGUwNGMzZGJmZGQz
ZGRkYzE4OWFmOTM5Y2UwODEwYWQ0ZmFmYy4uMDI4OGFkNDVmNjJlYTRiMWFkZDJiMGM2N2NhYmUz
OTE1MDg5MTEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAxMi0wMy0yMyAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJp
bmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVkIHdpdGggdGhl
ICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW4gQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAg
ICAgIC0gZ3JvdXAgaW1wbGVtZW50YXRpb24gb2YgcHJpdmF0ZSBoZWxwZXJzIGFuZCBndWFyZCB0
aGVtIGluc2lkZQorICAgICAgICBhbiBpZmRlZiBpZiBhIHJvb3QgY29uZGl0aW9uYWwgYXR0cmli
dXRlIGlzIHByZXNlbnQuCisgICAgICAgIC0gYWx3YXlzIGRlZmluZSB0aGUgdHlwZSBvZiBhIEdP
YmplY3QgYmluZGluZywgZXZlbiBpZiB0aGUgcm9vdAorICAgICAgICBjb25kaXRpb25hbCBmZWF0
dXJlIGlzIG5vdCBlbmFibGVkCisgICAgICAgIC0gdGhlIG1ldGhvZHMgYXJlIGdlbmVyYXRlZCBh
cyB3ZWxsLCBidXQgYXJlIHNpbXBseSBzdHVicyBpZiB0aGUKKyAgICAgICAgZmVhdHVyZSBpcyBu
b3QgZW5hYmxlZCwgdGhyb3dpbmcgYSB3YXJuaW5nIHVwb24gaW50ZXJhY3Rpb24uCisgICAgICAg
IC0gaWYgdGhlIG1ldGhvZCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsIGF0dHJp
YnV0ZSwKKyAgICAgICAgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24gZ2FpbnMgb25lIG1vcmUgbGV2
ZWwgb2YgZGVwdGgsIHRocm93aW5nCisgICAgICAgIGEgd2FybmluZyBpZiB0aGUgbWV0aG9kJ3Mg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorICAgICAgICBidXQgdGhlIHJvb3Qg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcy4KKyAgICAgICAgLSBzbWFsbCBzdHlsZSBmaXhlcyBpbiBy
YW5kb20gcGxhY2VzLgorCisgICAgICAgIEFsc28gY2hhbmdlZCBhcmUgR09iamVjdCBiYXNlbGlu
ZXMgZm9yIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gbmV3IHRl
c3RhYmxlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG06CisgICAgICAgIChIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25kaXRpb25hbFdhcm4pOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0eSk6CisgICAg
ICAgIChHZW5lcmF0ZVByb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbik6Cisg
ICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5lcmF0ZUNGaWxlKToKKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZSk6Cisg
ICAgICAgIChXcml0ZURhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwRmxvYXQ2NEFycmF5KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9kb21fZmxvYXQ2NGFycmF5X2Zvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdl
YktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3QpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dFByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3Bh
cmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Ns
YXNzMXBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2NsYXNzMnBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxs
YmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Omtp
dCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZmluYWxpemUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3Ry
dWN0b3JfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVj
dG9yX2dldF9hdHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZ2V0X2F0dHIyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0RXZlbnRUYXJnZXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rh
cmdldF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0
ZW0pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChX
ZWJLaXQ6OndyYXBUZXN0SW50ZXJmYWNlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBw
bGVtZW50YWxfbWV0aG9kMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1
cHBsZW1lbnRhbF9tZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2Vi
S2l0Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2ZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdE9iaik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9k
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZCk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfb2JqX21ldGhvZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfc2VxdWVuY2VfYXJnKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9pZGJfa2V5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3Qp
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24pOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24p
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhj
ZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9v
YmpfZXhjZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29w
dGlvbmFsX2FyZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25v
bl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmlu
Z19pc19udWxsX3N0cmluZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9t
ZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9k
Myk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZCk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9jb252ZXJ0Mik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0NSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2Up
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24pOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cik6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cik6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2ludF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9h
dHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF94bWxfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29i
al9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cik6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Ym9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9ib29sZWFuX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3VybF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Y3VzdG9tX2ludGVncmFsX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0
cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0
dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dp
dGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9h
dHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRy
aWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV9hdHRyaWJ1dGUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhf
c3BhY2VzX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9h
dHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRy
MSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMik6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pbW11dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfaW1tdXRhYmxlX3BvaW50KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmljdF9mbG9hdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxv
YXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24pOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
alByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zl
cl9saXN0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRvbmx5X3Zh
bHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
Y2FjaGVkX3JlYWRvbmx5X3ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZS5oOgorCiAyMDEyLTAzLTIzICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc4ODM5ODc+IEFTU0VSVElPTiBGQUlMRUQ6IEFTU0VSVChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJlZCB8fCBpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUGF1c2VkKSBpbiBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUgY2F1c2luZyBtdWx0aXBsZSAiY3Jhc2hlcyIgb24gTGlvbiBJbnRlbCBEZWJ1
ZyBXZWJLaXQgdGVzdGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR05V
bWFrZWZpbGUuYW0KaW5kZXggYTUxMjgwZjk1ODFkMDc4ZTY1MGRkNWVhMTc5YzYzOTZlYWI1ZWM1
MS4uNjYwYjc4YTMyYzE1ZjI4YmYxMWEyZTY2NWIwOTA0ZGM3ZjcwOGY4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtCkBAIC02Niw2ICs2Niw4
IEBAIHdlYmtpdGd0a19nZG9tX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL3dl
YmtpdC9XZWJLaXRET01GaWxlTGlzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJL
aXRET01GaWxlTGlzdFByaXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERP
TUZpbGVQcml2YXRlLmggXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01HZW9sb2Nh
dGlvbi5jcHAgXAorCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01HZW9sb2NhdGlvblBy
aXZhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUhpc3RvcnkuY3BwIFwK
IAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NSGlzdG9yeVByaXZhdGUuaCBcCiAJRGVy
aXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUhUTUxBbmNob3JFbGVtZW50LmNwcCBcCkBAIC0y
OTMsNiArMjk1LDcgQEAgd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlEZXJpdmVkU291cmNl
cy93ZWJraXQvV2ViS2l0RE9NQmxvYi5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0
RE9NRmlsZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRmlsZUxpc3QuaCBc
CisJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uLmggXAogCURlcml2
ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudC5oIFwKIAlEZXJpdmVk
U291cmNlcy93ZWJraXQvV2ViS2l0RE9NSFRNTEFwcGxldEVsZW1lbnQuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvd2Via2l0L1dlYktpdERPTUhUTUxBcmVhRWxlbWVudC5oIFwKQEAgLTM4NiwxNCArMzg5
LDYgQEAgd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQv
d2Via2l0ZG9tLmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC93ZWJraXRkb21kZWZpbmVzLmgK
IAotaWYgRU5BQkxFX0dFT0xPQ0FUSU9OCi13ZWJraXRndGtfYnVpbHRfaF9hcGkgKz0gXAotCSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NR2VvbG9jYXRpb24u
aAotd2Via2l0Z3RrX2dkb21fYnVpbHRfc291cmNlcyArPSBcCi0JRGVyaXZlZFNvdXJjZXMvd2Vi
a2l0L1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dl
YktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5oCi1lbmRpZgotCiBpZiBFTkFCTEVfVklERU8KIHdl
YmtpdGd0a19idWlsdF9oX2FwaSArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
L3dlYmtpdC9XZWJLaXRET01IVE1MQXVkaW9FbGVtZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KaW5kZXgg
MjExMzRkNDdiNWMwZGJhYzU3MGQ3MjIwOGM3ZGFjNmViZWVkMmYyZC4uODQ0ZmFjOGFjZWI5MGNi
ZTQ4MDQ2NDA4ZWI2YjM4NzgyYWVkZWQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCkBAIC0xMTQsNiArMTE0
LDIxIEBAIHN1YiBGaXhVcERlY2FtZWxpemVkTmFtZSB7CiAgICAgcmV0dXJuICRjbGFzc25hbWU7
CiB9CiAKK3N1YiBIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwgeworICAgIG15IEBjb25kaXRpb25h
bCA9IHNwbGl0KCdfJywgc2hpZnQpOworICAgIG15IEB1cHBlckNhc2VFeGNlcHRpb25zID0gKCJT
UUwiLCAiQVBJIik7CisgICAgbXkgQGh1bWFuUmVhZGFibGU7CisKKyAgICBmb3IgJHBhcnQgKEBj
b25kaXRpb25hbCkgeworICAgICAgICBpZiAoIWdyZXAgeyRfIGVxICRwYXJ0fSBAdXBwZXJDYXNl
RXhjZXB0aW9ucykgeworICAgICAgICAgICAgJHBhcnQgPSBjYW1lbGl6ZShsYygkcGFydCkpOwor
ICAgICAgICB9CisgICAgICAgIHB1c2goQGh1bWFuUmVhZGFibGUsICRwYXJ0KTsKKyAgICB9CisK
KyAgICByZXR1cm4gam9pbignICcsIEBodW1hblJlYWRhYmxlKTsKK30KKwogc3ViIENsYXNzTmFt
ZVRvR09iamVjdFR5cGUgewogICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKICAgICBteSAkQ0xB
U1NfTkFNRSA9IHVjKGRlY2FtZWxpemUoJGNsYXNzTmFtZSkpOwpAQCAtMzQ0LDYgKzM1OSwzMiBA
QCBzdWIgR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZwogICAgIH0KIH0KIAorc3ViIEdlbmVyYXRl
Q29uZGl0aW9uYWxXYXJuCit7CisgICAgbXkgJG5vZGUgPSBzaGlmdDsKKyAgICBteSAkY29uZGl0
aW9uYWwgPSAkbm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn07CisgICAg
bXkgQHdhcm47CisKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7CisgICAgICAgIGlmICgkY29uZGl0
aW9uYWwgPX4gLyYvKSB7CisgICAgICAgICAgICBteSBAc3BsaXRDb25kaXRpb25hbHMgPSBzcGxp
dCgvJi8sICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICBmb3JlYWNoICRjb25kaXRpb24gKEBz
cGxpdENvbmRpdGlvbmFscykgeworICAgICAgICAgICAgICAgIHB1c2goQHdhcm4sICIjaWYgIUVO
QUJMRSgkY29uZGl0aW9uKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVhZGFibGVDb25kaXRp
b25hbCgkY29uZGl0aW9uKSAuICJcIilcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQHdhcm4s
ICIjZW5kaWZcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2lmICgkY29uZGl0aW9u
YWwgPX4gL1x8LykgeworICAgICAgICAgICAgZm9yZWFjaCAkY29uZGl0aW9uIChzcGxpdCgvXHwv
LCAkY29uZGl0aW9uYWwpKSB7CisgICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKFwiIiAuIEh1bWFuUmVhZGFibGVDb25kaXRpb25h
bCgkY29uZGl0aW9uKSAuICJcIilcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcHVzaChAd2FybiwgIiAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKFwiIiAuIEh1bWFuUmVhZGFibGVDb25kaXRpb25hbCgkY29uZGl0aW9uYWwpIC4gIlwi
KVxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQHdhcm47Cit9CisKIHN1YiBH
ZW5lcmF0ZVByb3BlcnR5IHsKICAgICBteSAkYXR0cmlidXRlID0gc2hpZnQ7CiAgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSBzaGlmdDsKQEAgLTM1OCw5ICszOTksOSBAQCBzdWIgR2VuZXJhdGVQcm9w
ZXJ0eSB7CiAgICAgbXkgJHByb3BOYW1lQ2FwcyA9IHVjKCRwcm9wTmFtZSk7CiAgICAgJHByb3BO
YW1lID1+IHMvXy8tL2c7CiAgICAgbXkgJHtwcm9wRW51bX0gPSAiUFJPUF8ke3Byb3BOYW1lQ2Fw
c30iOwotICAgIHB1c2goQGNCb2R5UHJpdiwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikg
aWYgJGNvbmRpdGlvbmFsU3RyaW5nOwotICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAke3Byb3BF
bnVtfSxcbiIpOwotICAgIHB1c2goQGNCb2R5UHJpdiwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFs
U3RyaW5nfSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHB1c2goQGNCb2R5UHJv
cGVydGllcywgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOworICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiAgICAke3Byb3BFbnVtfSxcbiIpOwor
ICAgIHB1c2goQGNCb2R5UHJvcGVydGllcywgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5n
fSAqL1xuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgbXkgJHByb3BUeXBlID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwogICAgIG15ICR7cHJvcEdUeXBlfSA9IGRlY2FtZWxp
emUoJHByb3BUeXBlKTsKQEAgLTQ4Niw2ICs1MjcsMTQgQEAgc3ViIEdlbmVyYXRlUHJvcGVydGll
cyB7CiAgICAgbXkgJGNsc0NhcHMgPSBzdWJzdHIoQ2xhc3NOYW1lVG9HT2JqZWN0VHlwZSgkY2xh
c3NOYW1lKSwgMTIpOwogICAgIG15ICRsb3dlckNhc2VJZmFjZU5hbWUgPSAid2Via2l0X2RvbV8i
IC4gKEZpeFVwRGVjYW1lbGl6ZWROYW1lKGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpKSk7CiAK
KyAgICBteSAkY29uZGl0aW9uR3VhcmRTdGFydCA9ICIiOworICAgIG15ICRjb25kaXRpb25HdWFy
ZEVuZCA9ICIiOworICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGRhdGFOb2RlKTsKKyAgICBpZiAoJGNvbmRpdGlvbmFsU3RyaW5nKSB7CisgICAg
ICAgICRjb25kaXRpb25HdWFyZFN0YXJ0ID0gIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfSI7Cisg
ICAgICAgICRjb25kaXRpb25HdWFyZEVuZCA9ICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmlu
Z30iOworICAgIH0KKwogICAgICMgUHJvcGVydGllcwogICAgIG15ICRpbXBsQ29udGVudCA9ICIi
OwogCkBAIC00OTQsNyArNTQzLDcgQEAgc3ViIEdlbmVyYXRlUHJvcGVydGllcyB7CiBlbnVtIHsK
ICAgICBQUk9QXzAsCiBFT0YKLSAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7Cisg
ICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRlbnQpOwogCiAgICAgbXkgQHJlYWRh
YmxlUHJvcGVydGllcyA9IEdldFJlYWRhYmxlUHJvcGVydGllcygkZGF0YU5vZGUtPmF0dHJpYnV0
ZXMpOwogCkBAIC01MTEsNyArNTYwLDcgQEAgRU9GCiAgICAgJHtjbGFzc05hbWV9KiBzZWxmID0g
V0VCS0lUX0RPTV8ke2Nsc0NhcHN9KG9iamVjdCk7CiAgICAgJHByaXZGdW5jdGlvbgogRU9GCi0g
ICAgcHVzaChAdHh0R2V0UHJvcHMsICR0eHRHZXRQcm9wKTsKKyAgICAgICAgcHVzaChAdHh0R2V0
UHJvcHMsICR0eHRHZXRQcm9wKTsKICAgICB9CiAKICAgICAkdHh0R2V0UHJvcCA9IDw8ICJFT0Yi
OwpAQCAtNTQ4LDcgKzU5Nyw3IEBAIEVPRgogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVzaChA
Y0JvZHlQcml2LCAifTtcblxuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAifTtcblxu
Iik7CiAKICAgICAkdHh0R2V0UHJvcCA9IDw8ICJFT0YiOwogICAgIGRlZmF1bHQ6CkBAIC01NzIs
OSArNjIxLDkgQEAgRU9GCiAgICAgJCIgPSAiIjsKIAogICAgICRpbXBsQ29udGVudCA9IDw8ICJF
T0YiOwotCiBzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQogeworJGNvbmRpdGlvbkd1YXJkU3RhcnQKICAgICBXZWJLaXRET01PYmplY3Qq
IGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAgIAogICAgIGlmIChk
b21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC01ODUsNiArNjM0LDcgQEAgc3RhdGljIHZvaWQg
JHtsb3dlckNhc2VJZmFjZU5hbWV9X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIAogICAgICAg
ICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiskY29uZGl0aW9uR3VhcmRF
bmQKIAogICAgIEdfT0JKRUNUX0NMQVNTKCR7bG93ZXJDYXNlSWZhY2VOYW1lfV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtNTk2LDcgKzY0Niw3IEBAIHN0YXRpYyB2b2lk
ICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiBzdGF0aWMg
dm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fY29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
ewogRU9GCi0gICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOworICAgIHB1c2goQGNC
b2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKIAogICAgICRpbXBsQ29udGVudCA9IDw8ICJF
T0YiOwogQHR4dEluc3RhbGxFdmVudExpc3RlbmVycwpAQCAtNjIxLDcgKzY3MSw3IEBAIHN0YXRp
YyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1lfV9pbml0KCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkK
IH0KIAogRU9GCi0gICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOworICAgIHB1c2go
QGNCb2R5UHJvcGVydGllcywgJGltcGxDb250ZW50KTsKIH0KIAogc3ViIEdlbmVyYXRlSGVhZGVy
IHsKQEAgLTcyNSw3ICs3NzUsNyBAQCBzdWIgYWRkSW5jbHVkZUluQm9keSB7CiB9CiAKIHN1YiBH
ZW5lcmF0ZUZ1bmN0aW9uIHsKLSAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZU5hbWUsICRmdW5j
dGlvbiwgJHByZWZpeCkgPSBAXzsKKyAgICBteSAoJG9iamVjdCwgJGludGVyZmFjZU5hbWUsICRm
dW5jdGlvbiwgJHByZWZpeCwgJHBhcmVudE5vZGUpID0gQF87CiAKICAgICBteSAkZGVjYW1lbGl6
ZSA9IEZpeFVwRGVjYW1lbGl6ZWROYW1lKGRlY2FtZWxpemUoJGludGVyZmFjZU5hbWUpKTsKIApA
QCAtNzQyLDcgKzc5MiwxMSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbiB7CiAgICAgbXkgJGZ1bmN0
aW9uTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAkZGVjYW1lbGl6ZSAuICJfIiAuICRwcmVmaXggLiBk
ZWNhbWVsaXplKCRmdW5jdGlvblNpZ05hbWUpOwogICAgIG15ICRyZXR1cm5UeXBlID0gR2V0R2xp
YlR5cGVOYW1lKCRmdW5jdGlvblNpZ1R5cGUpOwogICAgIG15ICRyZXR1cm5WYWx1ZUlzR0RPTVR5
cGUgPSBJc0dET01DbGFzc1R5cGUoJGZ1bmN0aW9uU2lnVHlwZSk7CisKICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRmdW5jdGlvbi0+c2lnbmF0
dXJlKTsKKyAgICBteSAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRpdGlv
bmFsU3RyaW5nKCRwYXJlbnROb2RlKTsKKyAgICBteSBAY29uZGl0aW9uYWxXYXJuID0gR2VuZXJh
dGVDb25kaXRpb25hbFdhcm4oJGZ1bmN0aW9uLT5zaWduYXR1cmUpOworICAgIG15IEBwYXJlbnRD
b25kaXRpb25hbFdhcm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2FybigkcGFyZW50Tm9kZSk7CiAK
ICAgICBteSAkZnVuY3Rpb25TaWcgPSAiJHtjbGFzc05hbWV9KiBzZWxmIjsKIApAQCAtODE2LDYg
Kzg3MCw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uIHsKICAgICBwdXNoKEBoQm9keSwgIlxuIik7
CiAKICAgICBwdXNoKEBjQm9keSwgIiRyZXR1cm5UeXBlXG4kZnVuY3Rpb25OYW1lKCRmdW5jdGlv
blNpZylcbntcbiIpOworICAgIHB1c2goQGNCb2R5LCAiI2lmICR7cGFyZW50Q29uZGl0aW9uYWxT
dHJpbmd9XG4iKSBpZiAkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHVzaChAY0JvZHks
ICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAog
ICAgIGlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKQEAgLTEwMTcsMTUgKzEwNzIsMjkgQEAg
RU9GCiAgICAgfQogCiAgICAgaWYgKCRjb25kaXRpb25hbFN0cmluZykgeworICAgICAgICBwdXNo
KEBjQm9keSwgIiNlbHNlXG4iKTsKKyAgICAgICAgcHVzaChAY0JvZHksIEBjb25kaXRpb25hbFdh
cm4pIGlmIHNjYWxhcihAY29uZGl0aW9uYWxXYXJuKTsKKyAgICAgICAgaWYgKCRyZXR1cm5UeXBl
IG5lICJ2b2lkIikgeworICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50
ZXJUeXBlKCRmdW5jdGlvblNpZ1R5cGUpKSB7CisgICAgICAgICAgICAgICAgcHVzaChAY0JvZHks
ICIgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7cmV0dXJuVHlwZX0+KDApO1xuIik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiBO
VUxMO1xuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAY0JvZHks
ICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cbiIpOworICAgIH0KKworICAgIGlm
ICgkcGFyZW50Q29uZGl0aW9uYWxTdHJpbmcpIHsKKyAgICAgICAgcHVzaChAY0JvZHksICIjZWxz
ZVxuIik7CisgICAgICAgIHB1c2goQGNCb2R5LCBAcGFyZW50Q29uZGl0aW9uYWxXYXJuKSBpZiBz
Y2FsYXIoQHBhcmVudENvbmRpdGlvbmFsV2Fybik7CiAgICAgICAgIGlmICgkcmV0dXJuVHlwZSBu
ZSAidm9pZCIpIHsKLSAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiI2Vsc2VcbiIpOwogICAgICAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCRmdW5jdGlvblNpZ1R5
cGUpKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIHN0YXRpY19j
YXN0PCR7cmV0dXJuVHlwZX0+KDApO1xuIik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiBOVUxMO1xuIik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgcHVzaChAY0JvZHksICIjZW5kaWYgLyogJHtjb25kaXRp
b25hbFN0cmluZ30gKi9cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKKyAgICAgICAgcHVzaChA
Y0JvZHksICIjZW5kaWYgLyogJHtwYXJlbnRDb25kaXRpb25hbFN0cmluZ30gKi9cbiIpOwogICAg
IH0KIAogICAgIHB1c2goQGNCb2R5LCAifVxuXG4iKTsKQEAgLTEwNDcsNyArMTExNiw3IEBAIHN1
YiBHZW5lcmF0ZUZ1bmN0aW9ucyB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRlcmZhY2VOYW1lLCAk
ZGF0YU5vZGUpID0gQF87CiAKICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUt
PmZ1bmN0aW9uc30pIHsKLSAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJm
YWNlTmFtZSwgJGZ1bmN0aW9uLCAiIik7CisgICAgICAgICRvYmplY3QtPkdlbmVyYXRlRnVuY3Rp
b24oJGludGVyZmFjZU5hbWUsICRmdW5jdGlvbiwgIiIsICRkYXRhTm9kZSk7CiAgICAgfQogCiAg
ICAgVE9QOgpAQCAtMTA4MCw3ICsxMTQ5LDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25zIHsKICAg
ICAgICAgbXkgJGZ1bmN0aW9uID0gbmV3IGRvbUZ1bmN0aW9uKCk7CiAgICAgICAgICRmdW5jdGlv
bi0+c2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAgICAgICAgICRmdW5jdGlvbi0+
cmFpc2VzRXhjZXB0aW9ucygkYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zKTsKLSAgICAgICAg
JG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAiZ2V0
XyIpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VOYW1lLCAk
ZnVuY3Rpb24sICJnZXRfIiwgJGRhdGFOb2RlKTsKIAogICAgICAgICAjIEZJWE1FOiBXZSBhcmUg
bm90IGdlbmVyYXRpbmcgc2V0dGVycyBmb3IgJ1JlcGxhY2VhYmxlJwogICAgICAgICAjIGF0dHJp
YnV0ZXMgbm93LCBidXQgd2Ugc2hvdWxkIHNvbWVob3cuCkBAIC0xMTA4LDcgKzExNzcsNyBAQCBz
dWIgR2VuZXJhdGVGdW5jdGlvbnMgewogICAgICAgICAKICAgICAgICAgJGZ1bmN0aW9uLT5yYWlz
ZXNFeGNlcHRpb25zKCRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnMpOwogICAgICAgICAKLSAg
ICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9u
LCAic2V0XyIpOworICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VO
YW1lLCAkZnVuY3Rpb24sICJzZXRfIiwgJGRhdGFOb2RlKTsKICAgICB9CiB9CiAKQEAgLTExMjcs
OCArMTE5NiwxMCBAQCBzdWIgR2VuZXJhdGVDRmlsZSB7CiAgICAgJGltcGxDb250ZW50ID0gPDwg
IkVPRiI7CiAke2RlZmluZVR5cGVNYWNyb30oJHtjbGFzc05hbWV9LCAke2xvd2VyQ2FzZUlmYWNl
TmFtZX0sICR7cGFyZW50R09ialR5cGV9JHtkZWZpbmVUeXBlSW50ZXJmYWNlSW1wbGVtZW50YXRp
b259CiAKLW5hbWVzcGFjZSBXZWJLaXQgeworRU9GCisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAkaW1wbENvbnRlbnQpOwogCisgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CiBXZWJDb3Jl
Ojoke2ludGVyZmFjZU5hbWV9KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKIHsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKQEAgLTExMzksMTUgKzEyMTAsMTMgQEAg
V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZSgke2NsYXNzTmFtZX0qIHJlcXVlc3QpCiAg
ICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAogRU9GCi0K
ICAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKICAgICAkb2JqZWN0LT5HZW5l
cmF0ZVByb3BlcnRpZXMoJGludGVyZmFjZU5hbWUsICRkYXRhTm9kZSk7CiAgICAgJG9iamVjdC0+
R2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZU5hbWUsICRkYXRhTm9kZSk7CiAKICAgICBteSAk
d3JhcE1ldGhvZCA9IDw8ICJFT0YiOwotbmFtZXNwYWNlIFdlYktpdCB7CiAke2NsYXNzTmFtZX0q
IHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVPYmpl
Y3QpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CkBAIC0xMTYx
LDcgKzEyMzAsNyBAQCAke2NsYXNzTmFtZX0qIHdyYXAke2ludGVyZmFjZU5hbWV9KFdlYkNvcmU6
OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmVPYmplY3QpCiAgICAgcmV0dXJuICBXRUJLSVRfRE9NXyR7
Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV8ke2Nsc0NhcHN9LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBOVUxMKSk7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwogRU9GCiAgICAg
cHVzaChAY0JvZHlQcml2LCAkd3JhcE1ldGhvZCk7CiB9CkBAIC0xMjI5LDcgKzEyOTgsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTUV2ZW50VGFy
Z2V0SWZhY2UqIGlmYWNlKQogCiBFT0YKIAotICAgIHB1c2goQGNCb2R5LCAkaW1wbCk7CisgICAg
cHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbCk7CiAKICAgICAkZGVmaW5lVHlwZU1hY3JvID0g
IkdfREVGSU5FX1RZUEVfV0lUSF9DT0RFIjsKICAgICAkZGVmaW5lVHlwZUludGVyZmFjZUltcGxl
bWVudGF0aW9uID0gIiwgR19JTVBMRU1FTlRfSU5URVJGQUNFKFdFQktJVF9UWVBFX0RPTV9FVkVO
VF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQpKSI7CkBAIC0xMjQyLDExICsx
MzExLDYgQEAgc3ViIEdlbmVyYXRlIHsKICAgICBteSAkcGFyZW50R09ialR5cGUgPSBHZXRQYXJl
bnRHT2JqVHlwZSgkZGF0YU5vZGUpOwogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2Rl
LT5uYW1lOwogCi0gICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9uYWwnIGV4dGVu
ZGVkIGF0dHJpYnV0ZSBleGlzdHMKLSAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0
ZUNvbmRpdGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7Ci0gICAgcHVzaChAY29uZGl0aW9uR3VhcmRT
dGFydCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJp
bmc7Ci0gICAgcHVzaChAY29uZGl0aW9uR3VhcmRFbmQsICIjZW5kaWYgLyogJHtjb25kaXRpb25h
bFN0cmluZ30gKi9cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLQogICAgICMgQWRkIHRoZSBk
ZWZhdWx0IGltcGwgaGVhZGVyIHRlbXBsYXRlCiAgICAgQGNQcmVmaXggPSBzcGxpdCgiXHIiLCAk
bGljZW5jZVRlbXBsYXRlKTsKICAgICBwdXNoKEBjUHJlZml4LCAiXG4iKTsKQEAgLTEyNjcsOCAr
MTMzMSw2IEBAIHN1YiBHZW5lcmF0ZSB7CiAKICAgICBpZiAoIVVzZXNNYW51YWxLaXRJbXBsZW1l
bnRhdGlvbigkaW50ZXJmYWNlTmFtZSkpIHsKICAgICAgICAgbXkgJGNvbnZlcnRlciA9IDw8ICJF
T0YiOwotbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCiAke2NsYXNzTmFtZX0qIGtpdChXZWJDb3Jl
OjokaW50ZXJmYWNlTmFtZSogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwg
MCk7CkBAIC0xMjc4LDExICsxMzQwLDkgQEAgJHtjbGFzc05hbWV9KiBraXQoV2ViQ29yZTo6JGlu
dGVyZmFjZU5hbWUqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDwke2NsYXNzTmFtZX0q
PihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwJHtpbnRlcmZhY2VOYW1lfShv
YmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KIAogRU9GCi0gICAgcHVz
aChAY0JvZHksICRjb252ZXJ0ZXIpOworICAgIHB1c2goQGNCb2R5UHJpdiwgJGNvbnZlcnRlcik7
CiAgICAgfQogCiAgICAgJG9iamVjdC0+R2VuZXJhdGVIZWFkZXIoJGludGVyZmFjZU5hbWUsICRw
YXJlbnRDbGFzc05hbWUpOwpAQCAtMTMwMSw2ICsxMzYxLDkgQEAgc3ViIFdyaXRlRGF0YSB7CiAg
ICAgbXkgJGd1YXJkID0gdWMoZGVjYW1lbGl6ZSgkY2xhc3NOYW1lKSkgLiAiX1BSSVZBVEVfSCI7
CiAgICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IEdldFBhcmVudENsYXNzTmFtZSgkZGF0YU5vZGUp
OwogCisgICAgIyBBZGQgdGhlIGd1YXJkIGlmIHRoZSAnQ29uZGl0aW9uYWwnIGV4dGVuZGVkIGF0
dHJpYnV0ZSBleGlzdHMKKyAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSBHZW5lcmF0ZUNvbmRp
dGlvbmFsU3RyaW5nKCRkYXRhTm9kZSk7CisKICAgICBvcGVuKFBSSVZIRUFERVIsICI+JGZpbGVu
YW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGZpbGVuYW1lIGZvciB3cml0aW5nIjsK
IAogICAgIHByaW50IFBSSVZIRUFERVIgc3BsaXQoIlxyIiwgJGxpY2VuY2VUZW1wbGF0ZSk7CkBA
IC0xMzEzLDEyICsxMzc2LDE1IEBAIHN1YiBXcml0ZURhdGEgewogI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0LyR7cGFyZW50Q2xhc3NOYW1lfS5oPgogI2luY2x1ZGUg
IiR7aW50ZXJmYWNlTmFtZX0uaCIKKwogRU9GCiAKICAgICBwcmludCBQUklWSEVBREVSICR0ZXh0
OworICAgIHByaW50IFBSSVZIRUFERVIgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIiBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CiAgICAgcHJpbnQgUFJJVkhFQURFUiBtYXAgeyAiI2luY2x1ZGUg
XCIkX1wiXG4iIH0gc29ydCBrZXlzKCVoZHJQcm9wSW5jbHVkZXMpOwogICAgIHByaW50IFBSSVZI
RUFERVIgIlxuIiBpZiBrZXlzKCVoZHJQcm9wSW5jbHVkZXMpOwogICAgICR0ZXh0ID0gPDwgIkVP
RiI7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICR7Y2xhc3NOYW1lfSAqCiAgICAgd3JhcCR7
aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqY29yZU9iamVjdCk7CkBA
IC0xMzQyLDkgKzE0MDgsMTAgQEAgRU9GCiAgICAgJHRleHQgPSA8PCAiRU9GIjsKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLyogJHtndWFyZH0gKi8KIEVPRgogICAgIHByaW50IFBS
SVZIRUFERVIgJHRleHQ7CisgICAgcHJpbnQgUFJJVkhFQURFUiAiI2VuZGlmIC8qICR7Y29uZGl0
aW9uYWxTdHJpbmd9ICovXG5cbiIgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOworICAgIHByaW50IFBS
SVZIRUFERVIgIiNlbmRpZiAvKiAke2d1YXJkfSAqL1xuIjsKIAogICAgIGNsb3NlKFBSSVZIRUFE
RVIpOwogCkBAIC0xMzc2LDE2ICsxNDQzLDE5IEBAIEVPRgogICAgIHByaW50IElNUEwgQGNQcmVm
aXg7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+XG4iOwogICAgIHBy
aW50IElNUEwgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuXG4iOwotICAgIHByaW50IElNUEwgQGNv
bmRpdGlvbkd1YXJkU3RhcnQ7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD5cbiI7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD5cbiI7CiAgICAg
cHJpbnQgSU1QTCBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29ydCBrZXlzKCVpbXBsSW5j
bHVkZXMpOwogICAgIHByaW50IElNUEwgIlxuIiBpZiBrZXlzKCVpbXBsSW5jbHVkZXMpOwotICAg
IHByaW50IElNUEwgQGNCb2R5OworICAgIHByaW50IElNUEwgIiNpZiAke2NvbmRpdGlvbmFsU3Ry
aW5nfVxuXG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKIAotICAgIHByaW50IElNUEwgIlxuIjsK
KyAgICBwcmludCBJTVBMICJuYW1lc3BhY2UgV2ViS2l0IHtcblxuIjsKICAgICBwcmludCBJTVBM
IEBjQm9keVByaXY7Ci0gICAgcHJpbnQgSU1QTCBAY29uZGl0aW9uR3VhcmRFbmQ7CisgICAgcHJp
bnQgSU1QTCAifSAvLyBuYW1lc3BhY2UgV2ViS2l0XG5cbiI7CisgICAgcHJpbnQgSU1QTCAiI2Vu
ZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwor
CisgICAgcHJpbnQgSU1QTCBAY0JvZHlQcm9wZXJ0aWVzOworICAgIHByaW50IElNUEwgQGNCb2R5
OwogCiAgICAgY2xvc2UoSU1QTCk7CiAKQEAgLTEzOTcsNiArMTQ2Nyw3IEBAIEVPRgogICAgIEBj
UHJlZml4ID0gKCk7CiAgICAgQGNCb2R5ID0gKCk7CiAgICAgQGNCb2R5UHJpdiA9ICgpOworICAg
IEBjQm9keVByb3BlcnRpZXMgPSAoKTsKIH0KIAogc3ViIEdlbmVyYXRlSW50ZXJmYWNlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTUZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuY3BwCmluZGV4IDM0MDMzZGU2MjVi
YzI2ODQxZWE4MmY3MDA2NmNmNmE5ZGJjN2UzMjMuLjJiNmQwNmY3Y2FmYTU2OTkxYWFjZmZhMjQy
M2RlNTg1YzI3NWM0YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5
LmNwcApAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFt
ZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERPTUZsb2F0NjRBcnJheSoga2l0KFdlYkNv
cmU6OkZsb2F0NjRBcnJheSogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwg
MCk7CkBAIC01MSwzMCArNTEsNiBAQCBXZWJLaXRET01GbG9hdDY0QXJyYXkqIGtpdChXZWJDb3Jl
OjpGbG9hdDY0QXJyYXkqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01G
bG9hdDY0QXJyYXkqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwRmxvYXQ2
NEFycmF5KG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi1XZWJL
aXRET01JbnQzMkFycmF5Kgotd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZm9vKFdlYktpdERPTUZs
b2F0NjRBcnJheSogc2VsZiwgV2ViS2l0RE9NRmxvYXQzMkFycmF5KiBhcnJheSkKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6RmxvYXQ2NEFycmF5ICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChhcnJheSwgMCk7Ci0gICAg
V2ViQ29yZTo6RmxvYXQzMkFycmF5ICogY29udmVydGVkX2FycmF5ID0gTlVMTDsKLSAgICBpZiAo
YXJyYXkgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfYXJyYXkgPSBXZWJLaXQ6OmNvcmUo
YXJyYXkpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfYXJyYXksIDAp
OwotICAgIH0KLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkludDMyQXJyYXk+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+Zm9vKGNvbnZlcnRlZF9hcnJheSkpOwotICAgIFdlYktpdERPTUludDMy
QXJyYXkqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwot
fQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5LCB3ZWJraXRfZG9tX2Zs
b2F0NjRhcnJheSwgV0VCS0lUX1RZUEVfRE9NX0FSUkFZX0JVRkZFUl9WSUVXKQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBjb3JlKFdlYktpdERPTUZsb2F0
NjRBcnJheSogcmVxdWVzdCkKIHsKQEAgLTg2LDE0ICs2MiwzMSBAQCBXZWJDb3JlOjpGbG9hdDY0
QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQogICAgIHJldHVybiBj
b3JlT2JqZWN0OwogfQogCitXZWJLaXRET01GbG9hdDY0QXJyYXkqIHdyYXBGbG9hdDY0QXJyYXko
V2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhh
biB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysg
b2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0
aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAg
ICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRfRE9NX0ZM
T0FUNjRBUlJBWShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX0ZMT0FUNjRBUlJBWSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0
IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19E
RUZJTkVfVFlQRShXZWJLaXRET01GbG9hdDY0QXJyYXksIHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5
LCBXRUJLSVRfVFlQRV9ET01fQVJSQVlfQlVGRkVSX1ZJRVcpCisKIGVudW0gewogICAgIFBST1Bf
MCwKIH07CiAKLQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0g
V0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29y
ZU9iamVjdCkgewpAQCAtMTA1LDYgKzk4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV9mbG9h
dDY0YXJyYXlfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5j
b3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fZmxvYXQ2NGFycmF5X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKQEAg
LTE1MywxOCArMTQ3LDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2lu
aXQoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQogewogfQogCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLVdlYktpdERPTUZsb2F0NjRBcnJheSogd3JhcEZsb2F0NjRBcnJheShXZWJDb3JlOjpG
bG9hdDY0QXJyYXkqIGNvcmVPYmplY3QpCitXZWJLaXRET01JbnQzMkFycmF5Kgord2Via2l0X2Rv
bV9mbG9hdDY0YXJyYXlfZm9vKFdlYktpdERPTUZsb2F0NjRBcnJheSogc2VsZiwgV2ViS2l0RE9N
RmxvYXQzMkFycmF5KiBhcnJheSkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2Jq
ZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysg
c21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAq
IGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkg
Y29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3Jl
T2JqZWN0LT5yZWYoKTsKLQotICAgIHJldHVybiAgV0VCS0lUX0RPTV9GTE9BVDY0QVJSQVkoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9GTE9BVDY0QVJSQVksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IE5VTEwpKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6RmxvYXQ2NEFycmF5
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChh
cnJheSwgMCk7CisgICAgV2ViQ29yZTo6RmxvYXQzMkFycmF5ICogY29udmVydGVkX2FycmF5ID0g
TlVMTDsKKyAgICBpZiAoYXJyYXkgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfYXJyYXkg
PSBXZWJLaXQ6OmNvcmUoYXJyYXkpOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252
ZXJ0ZWRfYXJyYXksIDApOworICAgIH0KKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkludDMyQXJy
YXk+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Zm9vKGNvbnZlcnRlZF9hcnJheSkpOworICAg
IFdlYktpdERPTUludDMyQXJyYXkqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZsb2F0
NjRBcnJheVByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheVByaXZhdGUuaAppbmRleCBiMGVjNjE0ZjJiY2Yx
ZWY5YTYwZGQzNmIwOGNhM2EzYTk4MTU2ZTVlLi5jMmE3Zjc3NzA1NDI5MGZkOWJhNTE5ZWU4NzE2
M2FmNWRlMDc0NWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFy
cmF5UHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSAi
RmxvYXQ2NEFycmF5LmgiCisKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0RE9NRmxv
YXQ2NEFycmF5ICoKICAgICB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZsb2F0NjRBcnJheSAq
Y29yZU9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3QuY3BwCmluZGV4IGM5M2E5MmNkOWY0ZjgxZDg3ODA2ZTlkNTAzMGYxYzA3ZWQwNWUz
MDEuLjcxNTAyYzU4ZmQ5ZjNiMzYxMzUwMzFiY2IzZjcyYzljMjg0YjAxZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0zOCw3
ICszOCw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0KFdlYkNvcmU6OlRl
c3RBY3RpdmVET01PYmplY3QqIG9iaikKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmos
IDApOwpAQCAtNDgsNDkgKzQ4LDYgQEAgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoga2l0
KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0Kj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChv
YmosIFdlYktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3Qob2JqKSkpOwogfQotICAgIAotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9t
X29iamVjdF9leGNpdGluZ19mdW5jdGlvbihXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBz
ZWxmLCBXZWJLaXRET01Ob2RlKiBuZXh0X2NoaWxkKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwobmV4dF9jaGlsZCk7Ci0gICAgV2ViQ29yZTo6Tm9kZSAqIGNv
bnZlcnRlZF9uZXh0X2NoaWxkID0gTlVMTDsKLSAgICBpZiAobmV4dF9jaGlsZCAhPSBOVUxMKSB7
Ci0gICAgICAgIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gV2ViS2l0Ojpjb3JlKG5leHRfY2hpbGQp
OwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKLSAgICB9
Ci0gICAgaXRlbS0+ZXhjaXRpbmdGdW5jdGlvbihjb252ZXJ0ZWRfbmV4dF9jaGlsZCk7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2UoV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfbWVzc2FnZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCht
ZXNzYWdlKTsKLSAgICBpdGVtLT5wb3N0TWVzc2FnZShjb252ZXJ0ZWRfbWVzc2FnZSk7Ci19Ci0K
LWdsb25nCi13ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X2V4Y2l0aW5nX2F0
dHIoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogc2VsZikKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+ZXhjaXRpbmdBdHRyKCk7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotCi1HX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwgV0VCS0lUX1RZUEVfRE9N
X09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRlc3RBY3RpdmVET01P
YmplY3QqIGNvcmUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogcmVxdWVzdCkKIHsKQEAg
LTEwMiwxNSArNTksMzIgQEAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZShXZWJL
aXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQogICAgIHJldHVybiBjb3JlT2JqZWN0
OwogfQogCitXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiB3cmFwVGVzdEFjdGl2ZURPTU9i
amVjdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3JlT2JqZWN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYo
KSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qg
c3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVj
dHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBk
ZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBX
RUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3QsIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdCwgV0VCS0lU
X1RZUEVfRE9NX09CSkVDVCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAogICAgIFBST1BfRVhDSVRJ
TkdfQVRUUiwKIH07CiAKLQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21f
b2JqZWN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKKwogICAgIFdlYktpdERPTU9iamVj
dCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYg
KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKQEAgLTEyMiw2ICs5Niw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KIAorCiAg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKQEAgLTE4NiwxOCArMTYxLDM5IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9pbml0KFdlYktpdERP
TVRlc3RBY3RpdmVET01PYmplY3QqCiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdCogd3JhcFRlc3RBY3RpdmVET01PYmplY3QoV2ViQ29yZTo6
VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZU9iamVjdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbihXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KiBzZWxmLCBXZWJLaXRET01Ob2RlKiBuZXh0X2NoaWxkKQogewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwobmV4dF9jaGlsZCk7CisgICAgV2ViQ29yZTo6Tm9kZSAqIGNvbnZlcnRl
ZF9uZXh0X2NoaWxkID0gTlVMTDsKKyAgICBpZiAobmV4dF9jaGlsZCAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF9uZXh0X2NoaWxkID0gV2ViS2l0Ojpjb3JlKG5leHRfY2hpbGQpOworICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKKyAgICB9CisgICAg
aXRlbS0+ZXhjaXRpbmdGdW5jdGlvbihjb252ZXJ0ZWRfbmV4dF9jaGlsZCk7Cit9CiAKLSAgICAv
KiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVj
YXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVk
IEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAg
ICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7Cit2
b2lkCit3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKFdlYktp
dERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIGNvbnN0IGdjaGFyKiBtZXNzYWdlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwobWVzc2FnZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX21lc3NhZ2UgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWVz
c2FnZSk7CisgICAgaXRlbS0+cG9zdE1lc3NhZ2UoY29udmVydGVkX21lc3NhZ2UpOworfQogCi0g
ICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpFQ1QoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX0RPTV9URVNUX0FDVElWRV9ET01fT0JKRUNULAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0
LCBOVUxMKSk7CitnbG9uZword2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2dldF9l
eGNpdGluZ19hdHRyKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmV4Y2l0aW5nQXR0
cigpOworICAgIHJldHVybiByZXM7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3RQcml2YXRl
LmgKaW5kZXggZjI4YzdmOWQxZTAwNmJiYWFiMmY3MThiY2Y2NjQxNTkwNDBmNzBkNy4uMjViNTQ1
NThkMGNlYmJmOGIxYjU5YTBjOWQ3MmFjZWNjYmExMjc2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURP
TU9iamVjdFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZS5oCkBAIC0yNCw2
ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2Vi
S2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdEFjdGl2ZURPTU9iamVjdC5oIgorCisKIG5h
bWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QgKgogICAg
IHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNvcmU6OlRlc3RBY3RpdmVET01PYmplY3QgKmNv
cmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKaW5k
ZXggZGI3YmM1ZGJjYzAxZjAwNzYwNTVkNDhjZDQ5ZDIyNTYzZWUwYzFkZi4uNDE3ZmM0OWZmNTkx
YzBhNTU5NzVlM2UwMWYyNTZkZDk2ODczYzQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q2FsbGJhY2suY3BwCkBAIC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCi0K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCkBAIC00NSw4ICs0MywxMCBAQAogI2luY2x1ZGUgIndlYmtp
dGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKwogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERP
TVRlc3RDYWxsYmFjayoga2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayogb2JqKQogewogICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC01NiwyMiArNTYsMTIzIEBAIFdlYktpdERP
TVRlc3RDYWxsYmFjayoga2l0KFdlYkNvcmU6OlRlc3RDYWxsYmFjayogb2JqKQogCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RDYWxsYmFjayo+KERPTU9iamVjdENhY2hlOjpw
dXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0Q2FsbGJhY2sob2JqKSkpOwogfQorCitXZWJDb3JlOjpU
ZXN0Q2FsbGJhY2sqIGNvcmUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiByZXF1ZXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOworCisgICAgV2ViQ29yZTo6VGVzdENh
bGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxiYWNrKj4o
V0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgcmV0dXJuIGNvcmVPYmplY3Q7Cit9CisK
K1dlYktpdERPTVRlc3RDYWxsYmFjayogd3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2Fs
bGJhY2sqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVj
dCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNt
YXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBp
biBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNv
ZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9i
amVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IE5VTEwpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RDYWxsYmFjaywgd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisg
ICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KTsKICAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLworICAgIGlmIChkb21fb2JqZWN0LT5j
b3JlT2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9iamVjdCA9
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqPihkb21fb2JqZWN0LT5jb3JlT2Jq
ZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQoY29yZU9iamVj
dCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAgICAgICAgZG9tX29iamVjdC0+
Y29yZU9iamVjdCA9IE5VTEw7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAocHJv
cF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90
ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorICAgICAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
ZWQob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2Ns
YXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFz
cyk7CisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RD
bGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY29uc3RydWN0ZWQ7
CisKKworCit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19pbml0KFdl
YktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKK3sKK30KIAogZ2Jvb2xlYW4KIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3BhcmFtKFdlYktpdERPTVRlc3RDYWxs
YmFjayogc2VsZikKIHsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwogICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5vUGFyYW0oKTsKICAg
ICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7Cisj
ZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KIH0KIAogZ2Jvb2xlYW4KIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFtKFdlYktpdERPTVRlc3RD
YWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MxKiBjbGFzczFwYXJhbSkKIHsKKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwogICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpUZXN0
Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwpAQCAtODMsMTEgKzE4NCwxNiBA
QCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczFwYXJhbShXZWJL
aXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiAgICAgfQogICAgIGdib29sZWFuIHJlcyA9IGl0ZW0t
PmNhbGxiYWNrV2l0aENsYXNzMVBhcmFtKGNvbnZlcnRlZF9jbGFzczFwYXJhbSk7CiAgICAgcmV0
dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU1FM
IERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlm
IC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKIGdib29sZWFuCiB3ZWJraXRfZG9tX3Rl
c3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9jbGFzczJwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJh
Y2sqIHNlbGYsIFdlYktpdERPTUNsYXNzMiogY2xhc3MycGFyYW0sIGNvbnN0IGdjaGFyKiBzdHJf
YXJnKQogeworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwog
ICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CkBA
IC0xMDEsMTEgKzIwNywxNiBAQCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0
aF9jbGFzczJwYXJhbShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsCiAgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7CiAg
ICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oY29udmVydGVk
X2NsYXNzMnBhcmFtLCBjb252ZXJ0ZWRfc3RyX2FyZyk7CiAgICAgcmV0dXJuIHJlczsKKyNlbHNl
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU1FMIERhdGFiYXNlIikKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUUxf
REFUQUJBU0UpICovCiB9CiAKIGdsb25nCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJh
Y2tfd2l0aF9ub25fYm9vbF9yZXR1cm5fdHlwZShXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYs
IFdlYktpdERPTUNsYXNzMyogY2xhc3MzcGFyYW0pCiB7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKQEAgLTExNywxMSArMjI4LDE2IEBAIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKFdlYktpdERP
TVRlc3RDYWxsYmFjCiAgICAgfQogICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNhbGxiYWNrV2l0aE5v
bkJvb2xSZXR1cm5UeXBlKGNvbnZlcnRlZF9jbGFzczNwYXJhbSk7CiAgICAgcmV0dXJuIHJlczsK
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU1FMIERhdGFiYXNl
IikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShT
UUxfREFUQUJBU0UpICovCiB9CiAKIGdib29sZWFuCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdl
YktpdERPTURPTVN0cmluZ0xpc3QqIGxpc3RfcGFyYW0pCiB7CisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKQEAgLTEzMywxMTMgKzI0OSwyNCBAQCB3ZWJraXRf
ZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9zdHJpbmdfbGlzdChXZWJLaXRET01UZXN0
Q2FsbGJhY2sqIHNlbGYsCiAgICAgfQogICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmNhbGxiYWNr
V2l0aFN0cmluZ0xpc3QoY29udmVydGVkX2xpc3RfcGFyYW0pOwogICAgIHJldHVybiByZXM7Cisj
ZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIp
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUo
U1FMX0RBVEFCQVNFKSAqLwogfQogCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNr
X2NhbGxiYWNrX3dpdGhfYm9vbGVhbihXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIGdib29s
ZWFuIGJvb2xfcGFyYW0pCiB7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKICAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5jYWxsYmFja1dpdGhCb29sZWFuKGJv
b2xfcGFyYW0pOwogICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdi
b29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAqLwogfQogCi0KLUdf
REVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2ssIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJD
b3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmUoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiByZXF1ZXN0KQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwotCi0gICAgV2ViQ29yZTo6
VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdENhbGxi
YWNrKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgcmV0dXJuIGNvcmVPYmplY3Q7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotZW51bSB7Ci0gICAgUFJPUF8wLAotfTsKLQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQotewotICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCk7Ci0gICAgCi0gICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsK
LSAgICAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6VGVzdENhbGxiYWNrICo+KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOwotCi0gICAg
ICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKLSAgICAgICAg
Y29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJh
Y2tfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBzd2l0Y2ggKHByb3Bf
aWQpIHsKLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19j
b25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCi17Ci0KLSAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQotICAg
ICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X2NhbGxiYWNrX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrQ2xhc3MqIHJlcXVlc3RD
bGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KHJlcXVlc3RDbGFzcyk7Ci0gICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19maW5hbGl6ZTsKLSAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNz
LT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfZ2V0X3Byb3BlcnR5Owot
ICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
Y29uc3RydWN0ZWQ7Ci0KLQotCi19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19pbml0KFdlYktpdERPTVRlc3RDYWxsYmFjayogcmVxdWVzdCkKLXsKLX0KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0Q2FsbGJhY2sqIHdyYXBUZXN0Q2FsbGJhY2soV2Vi
Q29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1
c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2Jq
ZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUg
ZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAq
LwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1Rf
Q0FMTEJBQ0soZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0NBTExCQUNLLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAv
KiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdENhbGxiYWNrUHJpdmF0ZS5oCmluZGV4IDNhZDZmZjQ0NDFhOWMwNGI2Y2E1MDIwYTQ3YjVk
ZjMwYzk2YTUwN2UuLjg5N2Q2NjRlNTk5NzQwZjI5NjE2M2YwM2MyYmI0MTE1ZTkwYTgwYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmgKQEAg
LTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtp
dC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKKworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRl
c3RDYWxsYmFjayAqCiAgICAgd3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sg
KmNvcmVPYmplY3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFCQVNFKSAqLwor
CiAjZW5kaWYgLyogV0VCX0tJVF9ET01fVEVTVF9DQUxMQkFDS19QUklWQVRFX0ggKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCmlu
ZGV4IGVhNjQ4ZjU2NDY3MTVhNDg2NmQzZDMwNzg2MzI2ODFjZjE4MWJiMzQuLjFmYjYyN2M0MDQ3
MDRhOTM0ZjQzYThiYzE5M2NjNThlNmQ1MmU1MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisK
IFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcioga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21O
YW1lZEdldHRlciogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBA
IC00NiwyNCArNDYsNiBAQCBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGtpdChXZWJD
b3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIG9iaikKIAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihET01PYmplY3RDYWNoZTo6cHV0KG9i
aiwgV2ViS2l0Ojp3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKG9iaikpKTsKIH0KLSAgICAKLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25h
bWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRl
ciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+YW5vdGhlckZ1bmN0aW9uKGNv
bnZlcnRlZF9zdHIpOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlciwgV0VCS0lUX1RZ
UEVfRE9NX09CSkVDVCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRlc3RDdXN0
b21OYW1lZEdldHRlciogY29yZShXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHJlcXVl
c3QpCiB7CkBAIC03NSwxNCArNTcsMzEgQEAgV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBjb3JlKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogcmVxdWVzdCkKICAgICByZXR1
cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFw
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29y
ZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKwor
ICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRl
ciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxv
Y2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhl
CisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYo
KTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIs
IGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLCB3ZWJraXRfZG9tX3Rlc3Rf
Y3VzdG9tX25hbWVkX2dldHRlciwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwogZW51bSB7CiAg
ICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25h
bWVkX2dldHRlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAgICBXZWJLaXRET01P
YmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAgIAogICAg
IGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC05NCw2ICs5Myw3IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQog
CisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRl
cl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0xNDIsMTggKzE0Miwx
NCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9pbml0
KFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldAogewogfQogCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LVdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogd3JhcFRlc3RDdXN0b21OYW1lZEdldHRl
cihXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmVPYmplY3QpCit2b2lkCit3ZWJr
aXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERP
TVRlc3RDdXN0b21OYW1lZEdldHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKIHsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwgcmVm
KCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0
IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1
Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcg
ZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAgIHJldHVybiAg
V0VCS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKKyAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7
CisgICAgaXRlbS0+YW5vdGhlckZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIpOwogfQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaAppbmRleCBmZWRkMTRhZmMxMjJhZDcwMDYwZmQ0
ZTBmNzI0ZWY0NWUxMTVhYWRhLi41NDgzNWE0MzA1MWUzNTIxMmM3ODJmNmU5NmZjODVlNTYxYThh
ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyUHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAi
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyICoKICAgICB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciAqY29yZU9iamVjdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
Mzc4OGYxODQ0NjQ4NDBiMjJmMzM4NTdkMDE5MTc1OGZkNjY2YTBhNy4uN2Y2MjM2MmE2NzU4MmYw
ZGEwYjU5YzAzMmE2MDZkM2Q0MGU5Y2JkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1
ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktp
dERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0
b3IqIG9iaikKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNDYsMzMg
KzQ2LDYgQEAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0
RXZlbnRDb25zdHJ1Y3Rvciogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6
d3JhcFRlc3RFdmVudENvbnN0cnVjdG9yKG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdCAvLwotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9n
ZXRfYXR0cjEoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCi17Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5hdHRyMSgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nY2hhcioKLXdlYmtpdF9k
b21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0RE9NVGVzdEV2ZW50Q29u
c3RydWN0b3IqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RFdmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hh
ciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMigpKTsKLSAgICByZXR1cm4g
cmVzOwotfQotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3Is
IHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZUEVfRE9NX09CSkVD
VCkKLQotbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9y
KiBjb3JlKFdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQogewpAQCAtODQs
MTYgKzU3LDMzIEBAIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlKFdlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yKiByZXF1ZXN0KQogICAgIHJldHVybiBjb3JlT2JqZWN0Owog
fQogCitXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogd3JhcFRlc3RFdmVudENvbnN0cnVj
dG9yKFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYo
KSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qg
c3RvcmUgYSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVj
dHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBk
ZXJlZigpLgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBX
RUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RF
dmVudENvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3IsIFdFQktJ
VF9UWVBFX0RPTV9PQkpFQ1QpCisKIGVudW0gewogICAgIFBST1BfMCwKICAgICBQUk9QX0FUVFIx
LAogICAgIFBST1BfQVRUUjIsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9l
dmVudF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAgICBXZWJL
aXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAg
IAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0xMDUsNiArOTUsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfZmluYWxpemUoR09i
amVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAg
ICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1
Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0xNzksMTggKzE3
MCwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0b3JfaW5p
dChXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvcgogewogfQogCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLVdlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yKiB3cmFwVGVzdEV2ZW50Q29uc3RydWN0
b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmVPYmplY3QpCitnY2hhcioKK3dl
YmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9nZXRfYXR0cjEoV2ViS2l0RE9NVGVzdEV2
ZW50Q29uc3RydWN0b3IqIHNlbGYpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9i
amVjdCwgMCk7Ci0KLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysr
IHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAg
KiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgp
IGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29y
ZU9iamVjdC0+cmVmKCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RF
dmVudENvbnN0cnVjdG9yICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciog
cmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5hdHRyMSgpKTsKKyAgICByZXR1cm4gcmVz
OworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX0NPTlNUUlVDVE9SLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBj
b3JlT2JqZWN0LCBOVUxMKSk7CitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9ldmVudF9jb25zdHJ1
Y3Rvcl9nZXRfYXR0cjIoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHNlbGYpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5hdHRyMigpKTsKKyAgICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2
ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKaW5kZXggYmMwZTg1Mjg5MDBlMzdmYzZiMzYzNWRjZDdj
ZjEyNjRiZmUxZmRkNS4uMjUwYWJjNTMwYTlkODdhZjhiYmE2MTU3MTQ5NDEwNGVmNzQzYTgyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3Ry
dWN0b3JQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0RXZl
bnRDb25zdHJ1Y3Rvci5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRl
c3RFdmVudENvbnN0cnVjdG9yICoKICAgICB3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29y
ZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50
VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggYzZhZDg2ZTQzNGQ5YzFiMjQ0NTEy
NTAwYTdiNDdiZTNiNDYyOTBhMC4uMWEyZTVlM2Y1ODQ5ZjdmOTk5MzJhYjA0ZGJmZmY1Y2UyMWIz
OTYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3Bw
CkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29y
ZTo6VGVzdEV2ZW50VGFyZ2V0KiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2Jq
LCAwKTsKQEAgLTU0LDggKzU0LDMyIEBAIFdlYktpdERPTVRlc3RFdmVudFRhcmdldCoga2l0KFdl
YkNvcmU6OlRlc3RFdmVudFRhcmdldCogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YktpdERPTVRlc3RFdmVudFRhcmdldCo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6
OndyYXBUZXN0RXZlbnRUYXJnZXQob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0IC8vCisKK1dlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0RXZl
bnRUYXJnZXQqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwg
MCk7CisKKyAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7
CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
KiB3cmFwVGVzdEV2ZW50VGFyZ2V0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZU9iamVj
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIC8q
IFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNh
dXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQg
R09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAg
ICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKwor
ICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0VWRU5UX1RBUkdFVChnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTUV2ZW50VGFyZ2V0KiB0YXJn
ZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgR0Vycm9yKiogZXJyb3IpCiB7CkBAIC04OSw2MSAr
MTEzLDE1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2luaXQoV2ViS2l0
RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPnJlbW92ZV9ldmVudF9saXN0
ZW5lciA9IHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcmVtb3ZlX2V2ZW50X2xpc3RlbmVy
OwogfQogCi1XZWJLaXRET01Ob2RlKgotd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pdGVt
KFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogc2VsZiwgZ3Vsb25nIGluZGV4KQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ19yZXMgPSBX
VEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLWdib29sZWFu
Ci13ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTVRl
c3RFdmVudFRhcmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yICoqZXJyb3Ip
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZ0
LCAwKTsKLSAgICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQgPSBOVUxMOwotICAgIGlm
IChldnQgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0gV2ViS2l0Ojpjb3JlKGV2
dCk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9ldnQsIDApOwotICAg
IH0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnYm9vbGVhbiByZXMg
PSBpdGVtLT5kaXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0g
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotCiBHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRET01UZXN0RXZlbnRU
YXJnZXQsIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXQsIFdFQktJVF9UWVBFX0RPTV9PQkpF
Q1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfVFlQRV9ET01fRVZFTlRfVEFSR0VULCB3
ZWJraXRfZG9tX2V2ZW50X3RhcmdldF9pbml0KSkKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdl
YkNvcmU6OlRlc3RFdmVudFRhcmdldCogY29yZShXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHJl
cXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7Ci0KLSAgICBX
ZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpUZXN0RXZlbnRUYXJnZXQqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVj
dCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1
cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBlbnVtIHsKICAgICBQ
Uk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21f
b2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29i
amVjdC0+Y29yZU9iamVjdCkgewpAQCAtMTU1LDYgKzEzMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9ldmVudF90YXJnZXRfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAg
ICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKIH0KIApAQCAtMjAzLDE4ICsxODIsMzUgQEAgc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pbml0KFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogcmVx
dWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2Jq
ZWN0KQorV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfaXRlbShX
ZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHNlbGYsIGd1bG9uZyBpbmRleCkKIHsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNhbGwgcmVmKCkg
cmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0
b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1
cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVy
ZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0ICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIo
aXRlbS0+aXRlbShpbmRleCkpOworICAgIFdlYktpdERPTU5vZGUqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQogCi0gICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfRVZFTlRfVEFSR0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9F
VkVOVF9UQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK2dib29sZWFuCit3ZWJraXRf
ZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2Rpc3BhdGNoX2V2ZW50KFdlYktpdERPTVRlc3RFdmVudFRh
cmdldCogc2VsZiwgV2ViS2l0RE9NRXZlbnQqIGV2dCwgR0Vycm9yICoqZXJyb3IpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZXZ0LCAwKTsKKyAg
ICBXZWJDb3JlOjpFdmVudCAqIGNvbnZlcnRlZF9ldnQgPSBOVUxMOworICAgIGlmIChldnQgIT0g
TlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfZXZ0ID0gV2ViS2l0Ojpjb3JlKGV2dCk7CisgICAg
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9ldnQsIDApOworICAgIH0KKyAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5k
aXNwYXRjaEV2ZW50KGNvbnZlcnRlZF9ldnQsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKIH0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXRQcml2YXRl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0RXZlbnRUYXJnZXRQcml2YXRlLmgKaW5kZXggZTU2MTZlM2RmZDY1NzhjYjhmYzc0ZGE0
MGE1NTEyYmNlM2IxMDA0YS4uMDkwOGNlMTUxMDRhMzg2NGJkZGQ0NWE2ZWZmZjRkMGUwNTdhYTU4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFBy
aXZhdGUuaApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5j
bHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RFdmVudFRhcmdl
dC5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RFdmVudFRhcmdl
dCAqCiAgICAgd3JhcFRlc3RFdmVudFRhcmdldChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQgKmNv
cmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApp
bmRleCBlNmI1YWMyM2M3ZjFkZGEzZGEzNDc0MGQ0NDZiMDVjN2RjZWM4OWIyLi4wODJmOGYyZWE4
YmYzZTE0NzEzZDViYjIyMzE2ZmYxMTc4YTgyMDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCi0KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCkBAIC00NCw4ICs0
MiwxMCBAQAogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Vi
a2l0bWFyc2hhbC5oIgogCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEludGVyZmFj
ZSoga2l0KFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIG9iaikKIHsKICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChvYmosIDApOwpAQCAtNTUsMTQ4ICs1NSwzNyBAQCBXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYktpdERPTVRlc3RJbnRlcmZhY2UqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwg
V2ViS2l0Ojp3cmFwVGVzdEludGVyZmFjZShvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQgLy8KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50
YWxfbWV0aG9kMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdl
YkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaXRlbSk7Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19CiAK
LVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRh
bF9tZXRob2QyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJf
YXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnLCBHRXJyb3IgKiplcnJvcikKK1dlYkNvcmU6
OlRlc3RJbnRlcmZhY2UqIGNvcmUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKIHsK
LSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVy
dGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKLSAgICBpZiAob2JqX2FyZyAh
PSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9h
cmcpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7
Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihXZWJDb3JlOjpUZXN0U3Vw
cGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGl0ZW0sIGNvbnZlcnRlZF9zdHJfYXJnLCBj
b252ZXJ0ZWRfb2JqX2FyZywgZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNj
LmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJl
dHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKSAqLwotfQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwogCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2Q0KFdlYktp
dERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAgICBXZWJDb3JlOjpUZXN0
SW50ZXJmYWNlKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdEludGVyZmFj
ZSo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBz
ZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGl0ZW0pKTsKLSAg
ICByZXR1cm4gcmVzOwotI2Vsc2UKLSAgICByZXR1cm4gTlVMTDsKLSNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyAgICByZXR1cm4gY29yZU9i
amVjdDsKIH0KIAotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVt
ZW50YWxfc3RyMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQorV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSogd3JhcFRlc3RJbnRlcmZhY2UoV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZU9i
amVjdCkKIHsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpdGVtKSk7Ci0g
ICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNl
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRh
bFN0cjIoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KKyAgICAvKiBXZSBjYWxsIHJlZigpIHJh
dGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9y
ZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJl
LiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVm
KCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdlYktpdERPTU5vZGUqCi13
ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRET01U
ZXN0SW50ZXJmYWNlKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50
ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6
c3VwcGxlbWVudGFsTm9kZShpdGVtKSk7Ci0gICAgV2ViS2l0RE9NTm9kZSogcmVzID0gV2ViS2l0
OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJldHVybiBO
VUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KSAqLworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX0lOVEVSRkFDRShnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfRE9NX1RFU1RfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7
CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9u
b2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVlKQot
ewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6Ok5vZGUg
KiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAg
ICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6VGVzdFN1
cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsTm9kZShpdGVtLCBjb252ZXJ0ZWRfdmFsdWUpOwot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLwot
fQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEludGVy
ZmFjZSwgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZSwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkK
IAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmUoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3Qg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1Qo
cmVxdWVzdCktPmNvcmVPYmplY3QpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmpl
Y3QsIDApOwotCi0gICAgcmV0dXJuIGNvcmVPYmplY3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAogZW51bSB7CiAgICAgUFJPUF8wLAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQpAQCAtMjEwLDkgKzk5LDkgQEAgZW51bSB7CiAjZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCiB9OwogCi0KIHN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQogeworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKICAgICBX
ZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwog
ICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0yMjMsNiArMTEyLDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCiAKICAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAog
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTMzMiwxOSArMjIyLDE5MCBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2luaXQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSog
cmVxdWVzdCkKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0SW50ZXJm
YWNlKiB3cmFwVGVzdEludGVyZmFjZShXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0
KQordm9pZAord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kMShX
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNvcmVPYmplY3QsIDApOworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxN
ZXRob2QxKGl0ZW0pOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29u
ZGl0aW9uMTIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
ICovCit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNt
YXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBp
biBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNv
ZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9i
amVjdC0+cmVmKCk7CitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9zdXBwbGVtZW50YWxfbWV0aG9kMihXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25z
dCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiogb2JqX2FyZywgR0Vycm9yICoqZXJy
b3IpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
c3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlmIChvYmpfYXJnICE9IE5V
TEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7
CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAwKTsKKyAg
ICB9CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDIoaXRlbSwgY29udmVydGVkX3N0cl9hcmcsIGNvbnZl
cnRlZF9vYmpfYXJnLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICByZXR1cm4gTlVMTDsKKyNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNl
bHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisg
ICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0
dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKSAqLworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfSU5URVJGQUNFKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRFUkZBQ0UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IE5VTEwpKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21l
dGhvZDQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kNChpdGVtKTsKKyNlbHNlCisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2dj
aGFyKgord2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEoV2Vi
S2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZh
Y2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEo
aXRlbSkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVf
Tk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCisjZWxzZQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBOVUxMOwogI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKwor
Z2NoYXIqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMihX
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZl
cnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Ry
MihpdGVtKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dB
Uk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7Cisj
ZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3NldF9zdXBwbGVtZW50YWxfc3RyMihX
ZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7CisjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRh
bDo6c2V0U3VwcGxlbWVudGFsU3RyMihpdGVtLCBjb252ZXJ0ZWRfdmFsdWUpOworI2Vsc2UKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK1dlYktpdERPTU5vZGUq
Cit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfbm9kZShXZWJLaXRE
T01UZXN0SW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpOb2Rl
PiBnX3JlcyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbE5vZGUoaXRlbSkpOworICAgIFdlYktpdERPTU5vZGUqIHJlcyA9IFdlYktpdDo6a2l0KGdf
cmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVO
QUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRf
V0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9ub2Rl
KFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTU5vZGUqIHZhbHVlKQorewor
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVkX3Zh
bHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRf
dmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNv
bnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNl
dFN1cHBsZW1lbnRhbE5vZGUoaXRlbSwgY29udmVydGVkX3ZhbHVlKTsKKyNlbHNlCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEiKQorICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyNlbmRpZiAvKiBFTkFCTEUo
Q29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJm
YWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaAppbmRleCAwYTRlM2EyMDdjNjA2NmNl
YjBmMjA0NjJmNDRjZDE0MGIxY2JlMTA5Li4xMDIwZTAyZTdmZDRiNDNiYTZjMzQzNTM4MzVjZjky
M2UwOWNiOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZh
Y2VQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0SW50ZXJm
YWNlLmgiCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisK
IG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RJbnRlcmZhY2UgKgogICAgIHdy
YXBUZXN0SW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKmNvcmVPYmplY3QpOwpAQCAt
MzYsNCArMzksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
CisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9URVNUX0lOVEVSRkFDRV9QUklWQVRFX0ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyLmNwcAppbmRleCA1OTQ2ZWMwYzAwY2U3M2VmNWQzMDE1Y2Q5NzhkMzEyMmRkZGFlMGEw
Li5iNTE2ODYzYzYxM2MxOTQ4MWUxZDVjNTU5MDFkYWY4NTY2NWYwYTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
Y3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIqIGtpdChXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogb2JqKQogewogICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwxMyArNDYsNiBAQCBXZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcioga2l0KFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBvYgogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6
d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdCAvLwotCi0KLUdfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIsIHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVy
LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViQ29y
ZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIqIHJlcXVlc3QpCiB7CkBAIC02NCwxNCArNTcsMzEgQEAgV2ViQ29yZTo6
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIqIHIKICAgICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIHdyYXBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcihX
ZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogY29yZU9iamVjdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIC8qIFdlIGNhbGwgcmVm
KCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0
IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1
Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcg
ZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKworICAgIHJldHVybiAg
V0VCS0lUX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0RPTV9URVNUX01FRElBX1FVRVJZX0xJU1RfTElTVEVORVIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVP
YmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZ
UEUoV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIsIHdlYmtpdF9kb21fdGVzdF9t
ZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCiBlbnVt
IHsKICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9tZWRp
YV9xdWVyeV9saXN0X2xpc3RlbmVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKKwogICAg
IFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7
CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKQEAgLTgzLDYgKzkzLDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0
ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9t
ZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7
CiB9CiAKQEAgLTEzMSwxOCArMTQyLDMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21l
ZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfaW5pdChXZWJLaXRET01UZXN0TWVkaWFRdWUKIHsKIH0K
IAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNv
cmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBh
IEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0g
ICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxp
emUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwotICAg
IGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfTUVESUFf
UVVFUllfTElTVF9MSVNURU5FUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfTUVE
SUFfUVVFUllfTElTVF9MSVNURU5FUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOwotfQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oCmluZGV4IDVmYzY1MmYz
ZTEwYWZjNmUwZWY5OWFiOWUxOWE4NjJlODE5MmI0MDEuLmFjMjcwODhlODM0ZGE4Mjc5NTM2NzY5
MGZhOTJmOTU3MTRjNmQ1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oCkBAIC0yNCw2ICsy
NCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0
RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKKwor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciAqCiAgICAgd3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAppbmRleCA2MDQxNzI5NzkwMWY4
ZjU4ZGU2ZTk4ZGQ2MmYzY2YzYzVlYzZjMjlmLi5lZmQ1MjhmOTQ5YmU3ZjE5MDEyM2UxMzMxOTdh
MmFjYzQ3YjM5ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5h
bWVkQ29uc3RydWN0b3IuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFy
c2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IqIGtpdChXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciogb2JqKQogewog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwxMyArNDYsNiBAQCBXZWJL
aXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVj
dG9yKiBvYmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE5hbWVkQ29u
c3RydWN0b3IqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdE5hbWVk
Q29uc3RydWN0b3Iob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0K
LQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciwgd2Via2l0X2Rv
bV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHJlcXVlc3QpCiB7CkBAIC02NCwxNCArNTcsMzEg
QEAgV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdE5hbWVk
Q29uc3RydWN0b3IqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKK1dlYktp
dERPTVRlc3ROYW1lZENvbnN0cnVjdG9yKiB3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IoV2ViQ29y
ZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0
aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMr
KyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2Vl
IHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisg
ICAgICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01f
VEVTVF9OQU1FRF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1Rf
TkFNRURfQ09OU1RSVUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3Ry
dWN0b3IsIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZUEVfRE9N
X09CSkVDVCkKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3JfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQog
eworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qo
b2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpAQCAtODMs
NiArOTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Jf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0
ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9u
YW1lZF9jb25zdHJ1Y3Rvcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBA
IC0xMzEsMTggKzE0MiwzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25z
dHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yCiB7CiB9CiAKLW5hbWVz
cGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IqIHdyYXBUZXN0TmFt
ZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZU9iamVjdCkK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdl
IGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNl
IHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09i
amVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICog
bWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKLQotICAg
IHJldHVybiAgV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwg
TlVMTCkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25z
dHJ1Y3RvclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCmluZGV4IGI1ODUx
NzFjMjBlOTZhOTAyODg3ZmM5NjhjOWU5NjU5ZjM5OTMyM2UuLjViYWQ3MGIwMWRjMTJlMjc1YzMw
NDgzNDA3ZWViZWNjMzNlMTc5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBACiAj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2JqZWN0
Lmg+CiAjaW5jbHVkZSAiVGVzdE5hbWVkQ29uc3RydWN0b3IuaCIKKworCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKICAgICBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciAqCiAgICAgd3JhcFRlc3RO
YW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRlc3ROYW1lZENvbnN0cnVjdG9yICpjb3JlT2JqZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKaW5kZXggYzdlZDE2NWU5YmY1MTc3
YWFjZmRlZGVlNDQ3NGE5ZGU4YTQ2YTIyYi4uZjczYjU4YjRiNjgzYzIxZWYyYTQyZWZmZTJkYTdh
MzRkNTliMmIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTY0LDcg
KzY0LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewotICAgIAorCiBXZWJLaXRET01UZXN0T2JqKiBraXQoV2ViQ29yZTo6VGVzdE9iaiogb2JqKQog
ewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC03NCwxOTc5ICs3NCw1MjEg
QEAgV2ViS2l0RE9NVGVzdE9iaioga2l0KFdlYkNvcmU6OlRlc3RPYmoqIG9iaikKIAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T2JqKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChv
YmosIFdlYktpdDo6d3JhcFRlc3RPYmoob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0IC8vCiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2QoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKK1dlYkNvcmU6OlRlc3RPYmoqIGNvcmUoV2ViS2l0RE9NVGVzdE9i
aiogcmVxdWVzdCkKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT52b2lkTWV0aG9kKCk7Ci19CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJn
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyX2FyZyk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChvYmpfYXJnKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
Y29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAg
ICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcpOwotICAgIH0KLSAgICBpdGVtLT52
b2lkTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9v
YmpfYXJnKTsKLX0KKyAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2Jq
ZWN0KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotZ2xvbmcK
LXdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRob2QoKTsKLSAg
ICByZXR1cm4gcmVzOworICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCi1nbG9uZwotd2Via2l0
X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9iaiog
b2JqX2FyZykKK1dlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0T2JqKFdlYkNvcmU6OlRlc3RPYmoq
IGNvcmVPYmplY3QpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHN0cl9hcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcsIDApOwotICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7
Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9
IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29u
dmVydGVkX29ial9hcmcsIDApOwotICAgIH0KLSAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRNZXRo
b2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcp
OwotICAgIHJldHVybiByZXM7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVj
dCwgMCk7CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRo
b2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhv
ZCgpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQo
KSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFu
IHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBv
YmplY3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRo
ZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAg
ICovCisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBv
YmpfYXJnKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJf
YXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAgICBXVEY6
OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJn
KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAg
IGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJL
aXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRl
ZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBn
X3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZl
cnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZykpOwotICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJl
dHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RF
U1RfT0JKLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Y29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfbWV0aG9kX3dpdGhfc2VxdWVuY2VfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTXNlcXVlbmNlKiApCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCgp
OwotICAgIFdlYkNvcmU6OnNlcXVlbmNlICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAh
PSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsKLSAgICB9Ci0gICAgaXRlbS0+bWV0aG9kV2l0
aFNlcXVlbmNlQXJnKGNvbnZlcnRlZF8pOwotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLVdl
YktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF90aGF0X3JlcXVpcmVz
X2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIq
IHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdFcnJvciAqKmVycm9yKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKLSAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJn
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2Jq
X2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAw
KTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9v
YmpfYXJnLCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOwotICAgIH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6Omtp
dChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KK0dfREVGSU5FX1RZUEUoV2ViS2l0
RE9NVGVzdE9iaiwgd2Via2l0X2RvbV90ZXN0X29iaiwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkK
IAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXJpYWxpemVkX3ZhbHVlKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZF9h
cmcpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZXJpYWxpemVkX2FyZyk7Ci0g
ICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlcmlhbGl6ZWRf
YXJnID0gTlVMTDsKLSAgICBpZiAoc2VyaWFsaXplZF9hcmcgIT0gTlVMTCkgewotICAgICAgICBj
b252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBXZWJLaXQ6OmNvcmUoc2VyaWFsaXplZF9hcmcpOwot
ICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7Ci0gICAg
fQotICAgIGl0ZW0tPnNlcmlhbGl6ZWRWYWx1ZShjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOwot
fQorZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSLAorICAg
IFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSLAorICAgIFBST1BfUkVBRF9PTkxZX1RFU1RfT0JK
X0FUVFIsCisgICAgUFJPUF9TSE9SVF9BVFRSLAorICAgIFBST1BfVU5TSUdORURfU0hPUlRfQVRU
UiwKKyAgICBQUk9QX0lOVF9BVFRSLAorICAgIFBST1BfTE9OR19MT05HX0FUVFIsCisgICAgUFJP
UF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUiwKKyAgICBQUk9QX1NUUklOR19BVFRSLAorICAgIFBS
T1BfVEVTVF9PQkpfQVRUUiwKKyAgICBQUk9QX1hNTF9PQkpfQVRUUiwKKyAgICBQUk9QX0NSRUFU
RSwKKyAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKKyAgICBQUk9QX1JFRkxFQ1RFRF9J
TlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFIs
CisgICAgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1VS
TF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAorICAgIFBST1BfUkVGTEVD
VEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9CT09M
RUFOX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX1VSTF9BVFRSLAorICAgIFBST1Bf
QVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCisgICAgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VY
Q0VQVElPTiwKKyAgICBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKKyAg
ICBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTiwKKyAgICBQUk9QX1dJVEhf
U0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9D
T05URVhUX0FUVFJJQlVURSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9S
QUlTRVMsCisgICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEVf
UkFJU0VTLAorICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQ
VF9TVEFURV9BVFRSSUJVVEUsCisgICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVY
VF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVMsCisgICAgUFJPUF9XSVRIX1NDUklQ
VF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FUVFJJQlVU
RSwKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FMTF9TVEFDS19BVFRSSUJV
VEUsCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMSwK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
JiYgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMiwKKyNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCisjaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIFBST1BfQ09ORElUSU9O
QUxfQVRUUjMsCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKSAqLworICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICBQUk9QX01VVEFCTEVfUE9J
TlQsCisgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCisgICAgUFJPUF9TVFJBV0JFUlJZLAorICAg
IFBST1BfU1RSSUNUX0ZMT0FULAorICAgIFBST1BfREVTQ1JJUFRJT04sCisgICAgUFJPUF9JRCwK
KyAgICBQUk9QX0hBU0gsCit9OwogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXko
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGtleSk7Ci0gICAgV2ViQ29yZTo6SURCS2V5ICogY29u
dmVydGVkX2tleSA9IE5VTEw7Ci0gICAgaWYgKGtleSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZl
cnRlZF9rZXkgPSBXZWJLaXQ6OmNvcmUoa2V5KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfa2V5KTsKKworICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCk7CisgICAgCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmpl
Y3QpIHsKKyAgICAgICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OlRlc3RPYmogKj4oZG9tX29iamVjdC0+Y29yZU9iamVjdCk7CisKKyAgICAgICAg
V2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOworICAgICAgICBjb3Jl
T2JqZWN0LT5kZXJlZigpOworCisgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxM
OwogICAgIH0KLSAgICBpdGVtLT5pZGJLZXkoY29udmVydGVkX2tleSk7CisKKworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vYmpfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2Jq
ZWN0KTsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01EaWN0aW9uYXJ5KiBvbywgV2ViS2l0RE9NRGlj
dGlvbmFyeSogb29vKQorc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwogICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9vKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7Ci0gICAgV2ViQ29yZTo6RGljdGlvbmFyeSAqIGNv
bnZlcnRlZF9vbyA9IE5VTEw7Ci0gICAgaWYgKG9vICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVy
dGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252
ZXJ0ZWRfb28pOworICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1Rf
T0JKKG9iamVjdCk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1VOU0lHTkVE
X1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRTaG9ydEF0
dHIoKGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBXZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vbyA9IE5VTEw7Ci0gICAgaWYgKG9v
byAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsK
LSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKKyAgICBjYXNlIFBST1Bf
SU5UX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0SW50QXR0cigoZ192YWx1ZV9n
ZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGl0ZW0tPm9wdGlv
bnNPYmplY3QoY29udmVydGVkX29vLCBjb252ZXJ0ZWRfb29vKTsKLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aEV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgY2FzZSBQUk9Q
X1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFVu
c2lnbmVkTG9uZ0xvbmdBdHRyKChnX3ZhbHVlX2dldF91aW50NjQodmFsdWUpKSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3Njcmlw
dF9zdGF0ZV92b2lkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRl
bS0+d2l0aFNjcmlwdFN0YXRlVm9pZCgpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmooV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBn
X3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iaigpKTsKLSAgICBXZWJL
aXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92
b2lkX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT53
aXRoU2NyaXB0U3RhdGVWb2lkRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFI6
CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cihXVEY6OlN0cmluZzo6ZnJv
bVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKICAgICB9
Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0
X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJy
b3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihp
dGVtLT53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICBjYXNlIFBST1BfQ1JFQVRF
OgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldENyZWF0ZSgoZ192YWx1ZV9nZXRfYm9vbGVh
bih2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0KFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+d2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial93aXRoX3Nj
cmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZSgpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0
X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX29ial9l
eGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgY2Fz
ZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5z
ZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwg
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfSU5URUdSQUxfQVRUUjoK
KyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9sb25nKHZh
bHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9V
TlNJR05FRF9JTlRFR1JBTF9BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldFVuc2ln
bmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25l
ZGludGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF91bG9uZyh2YWx1ZSkpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRSOgorICAg
IHsKKyAgICAgICAgY29yZVNlbGYtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVl
KSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxf
QVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFs
dWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0
QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRy
LCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fSU5URUdS
QUxfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCAoZ192YWx1
ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJP
UF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxm
LT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJv
b2xlYW5BdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUjoKKyAg
ICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1Bf
QVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYtPnNldEF0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSksIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7Cisg
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBjb3JlU2VsZi0+
c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhf
R0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9T
RVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgIGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9B
VFRSSUJVVEU6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9
CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIx
OgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjEoKGdfdmFsdWVf
Z2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRp
dGlvbjIpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIyOgorICAgIHsKKyAgICAgICAg
Y29yZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjIoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYg
RU5BQkxFKENvbmRpdGlvbjIpICovCisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMzoKKyAgICB7CisgICAg
ICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIzKChnX3ZhbHVlX2dldF9sb25nKHZhbHVl
KSkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworICAgIGNhc2UgUFJPUF9TVFJJQ1RfRkxPQVQ6Cisg
ICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaWN0RmxvYXQoKGdfdmFsdWVfZ2V0X2Zsb2F0
KHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0lEOgorICAg
IHsKKyAgICAgICAgY29yZVNlbGYtPnNldElkKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRf
c3RhdGVfd2l0aF9zcGFjZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRy
KGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
KCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsQXJnKG9wdCk7Ci19Ci0KLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2FyZ19hbmRf
b3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25n
IG9wdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyhub25fb3B0LCBvcHQpOwogfQogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG5vbl9vcHQsIGdsb25nIG9wdDEsIGdsb25nIG9wdDIp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0
aW9uYWxBcmdzKG5vbl9vcHQsIG9wdDEsIG9wdDIpOwotfQogCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogc3RyKQorc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwogICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7
Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChz
dHIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhjb252ZXJ0ZWRfc3RyKTsK
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJp
bmdfaXNfdW5kZWZpbmVkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdURjo6U3RyaW5n
IGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5t
ZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChjb252ZXJ0ZWRfc3RyKTsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmdfaXNf
bnVsbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7Ci0gICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyhjb252ZXJ0ZWRfc3RyKTsKLX0KLQotZ2No
YXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDEoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y29uZGl0aW9uYWxNZXRo
b2QxKCkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJldHVybiBOVUxMOwotI2VuZGlm
IC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NvbmRpdGlvbmFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+
Y29uZGl0aW9uYWxNZXRob2QyKCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRp
dGlvbmFsX21ldGhvZDMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+Y29uZGl0
aW9uYWxNZXRob2QzKCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhv
ZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPmNsYXNzTWV0
aG9kKCk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRo
X29wdGlvbmFsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGFyZykKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoYXJn
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJs
b2FkZWRfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBhcmcpCi17Ci0jaWYg
RU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+b3ZlcmxvYWRlZE1ldGhvZDEo
YXJnKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9vdmVybG9hZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHR5cGUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh0eXBlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdHlw
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0eXBlKTsKLSAgICBpdGVtLT5vdmVybG9hZGVkTWV0
aG9kMShjb252ZXJ0ZWRfdHlwZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19
Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NYSogKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsK
LSAgICBXZWJDb3JlOjphICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7
Ci0gICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxmID0gV0VCS0lU
X0RPTV9URVNUX09CSihvYmplY3QpOworICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVTZWxmID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJP
UF9SRUFEX09OTFlfSU5UX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCBjb3JlU2VsZi0+cmVhZE9ubHlJbnRBdHRyKCkpOworICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgaXRlbS0+Y29udmVydDEoY29udmVydGVkXyk7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfY29udmVydDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NYiogKQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKLSAgICBXZWJDb3JlOjpiICogY29u
dmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF8g
PSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfKTsK
KyAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+cmVh
ZE9ubHlTdHJpbmdBdHRyKCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGl0ZW0tPmNv
bnZlcnQyKGNvbnZlcnRlZF8pOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZl
cnQzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWMqICkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6YyAqIGNvbnZlcnRlZF8gPSBOVUxM
OwotICAgIGlmICggIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3Jl
KCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgY2FzZSBQUk9Q
X1JFQURfT05MWV9URVNUX09CSl9BVFRSOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVtLT5jb252ZXJ0Myhjb252ZXJ0ZWRfKTsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0NChXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01kKiApCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCgpOwotICAg
IFdlYkNvcmU6OmQgKiBjb252ZXJ0ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAg
ICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF8pOworICAgIGNhc2UgUFJPUF9TSE9SVF9BVFRSOgorICAgIHsKKyAgICAg
ICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3JlU2VsZi0+c2hvcnRBdHRyKCkpOworICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgaXRlbS0+Y29udmVydDQoY29udmVydGVkXyk7Ci19Ci0KLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9NZSogKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKLSAgICBX
ZWJDb3JlOjplICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7Ci0gICAg
ICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfKTsKKyAgICBjYXNlIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUjoKKyAgICB7
CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIGNvcmVTZWxmLT51bnNpZ25lZFNob3J0
QXR0cigpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGl0ZW0tPmNvbnZlcnQ1KGNvbnZl
cnRlZF8pOwotfQotCi1XZWJLaXRET01TVkdQb2ludCoKLXdlYmtpdF9kb21fdGVzdF9vYmpfbXV0
YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPm11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQot
V2ViS2l0RE9NU1ZHUG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2ltbXV0YWJsZV9wb2ludF9m
dW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmlt
bXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7Ci0gICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdl
YktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX29yYW5nZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPm9yYW5nZSgpOwotfQotCi1XZWJLaXRET01ib29sKgotd2Via2l0X2RvbV90
ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2No
YXIqIHN0ciwgZ2Zsb2F0IGEsIGdpbnQgYiwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ciwgMCk7Ci0gICAgV1RGOjpTdHJpbmcg
Y29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Ym9vbD4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zdHJpY3RGdW5jdGlvbihjb252ZXJ0ZWRfc3RyLCBhLCBi
LCBlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0
X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pbnRBdHRyKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfaW50NjQodmFsdWUsIGNvcmVTZWxmLT5sb25nTG9uZ0F0dHIoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6CisgICAgewor
ICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIGNvcmVTZWxmLT51bnNpZ25lZExvbmdM
b25nQXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdf
QVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRU
b1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHIoKSkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6CisgICAgeworICAgICAgICBSZWZQdHI8
V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnRlc3RPYmpBdHRyKCk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfWE1MX09CSl9BVFRSOgorICAgIHsKKyAg
ICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT54bWxPYmpBdHRy
KCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdl
dCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfQ1JFQVRFOgorICAg
IHsKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmlzQ3JlYXRl
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJ
TkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZl
cnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBQUk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1
ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSOgor
ICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIGNvcmVTZWxmLT5nZXRVbnNp
Z25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWdu
ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIGNvcmVTZWxmLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9SRUZMRUNURURfVVJMX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vf
c3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRVUkxBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6CisgICAg
eworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5n
KGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
U3RyaW5nQXR0ckF0dHIpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1Bf
UkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoKKyAg
ICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvcmVTZWxmLT5oYXNBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9V
UkxfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZl
cnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBnX3ZhbHVlX3NldF9sb25n
KHZhbHVlLCBjb3JlU2VsZi0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VYQ0VQVElPTjoK
KyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5hdHRyV2l0
aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJP
UF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046CisgICAgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2
YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oZWMpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfU1RS
SU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90
YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKKyAgICB7CisgICAgICAgIGdfdmFs
dWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VU
SU9OX0NPTlRFWFRfQVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRl
c3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZSgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5n
ZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBU
X1NUQVRFX0FUVFJJQlVURV9SQUlTRVM6CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNv
cmVTZWxmLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpOworICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhU
X0FUVFJJQlVURV9SQUlTRVM6CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxm
LT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhlYyk7CisgICAgICAg
IGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NP
TlRFWFRfQU5EX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8
V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0
KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NU
QVRFX0FUVFJJQlVURV9SQUlTRVM6CisgICAgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVT
ZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKGVjKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChw
dHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRIX1ND
UklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BBQ0VTX0FUVFJJ
QlVURToKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3Jl
U2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6Omtp
dChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9XSVRI
X1NDUklQVF9BUkdVTUVOVFNfQU5EX0NBTExfU1RBQ0tfQVRUUklCVVRFOgorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjE6
CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0
aW9uYWxBdHRyMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSAqLworI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9u
MikKKyAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6CisgICAgeworICAgICAgICBnX3Zh
bHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxBdHRyMigpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCisgICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmNvbmRpdGlvbmFsQXR0cjMoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpICovCisgICAgY2FzZSBQUk9QX0NPTlRFTlRfRE9DVU1FTlQ6CisgICAgewor
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IHB0ciA9IGNvcmVTZWxmLT5jb250ZW50
RG9jdW1lbnQoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6Omtp
dChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9NVVRB
QkxFX1BPSU5UOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBwdHIg
PSBjb3JlU2VsZi0+bXV0YWJsZVBvaW50KCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFBST1BfSU1NVVRBQkxFX1BPSU5UOgorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNv
cmU6OlNWR1BvaW50PiBwdHIgPSBjb3JlU2VsZi0+aW1tdXRhYmxlUG9pbnQoKTsKKyAgICAgICAg
Z192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJBV0JFUlJZOgorICAgIHsKKyAgICAg
ICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3JlU2VsZi0+Ymx1ZWJlcnJ5KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklDVF9GTE9BVDoKKyAgICB7CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+c3RyaWN0RmxvYXQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfREVTQ1JJUFRJT046CisgICAgewor
ICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+ZGVzY3JpcHRpb24oKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfSUQ6CisgICAgeworICAgICAg
ICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aWQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfSEFTSDoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFr
ZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmhhc2goKSkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgV2ViS2l0RE9NYm9vbCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9yZWFkX29ubHlfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+cmVhZE9ubHlJbnRBdHRyKCk7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29u
bHlfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cmVhZE9ubHlTdHJp
bmdBdHRyKCkpOwotICAgIHJldHVybiByZXM7CiB9CiAKLVdlYktpdERPTVRlc3RPYmoqCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRl
c3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsK
LSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0g
ICAgcmV0dXJuIHJlczsKLX0KIAotZ3Nob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9y
dF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIHsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ3Nob3J0IHJlcyA9IGl0ZW0tPnNob3J0QXR0cigpOwotICAgIHJldHVybiByZXM7Ci19CiAK
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ3Nob3J0IHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFNob3J0QXR0
cih2YWx1ZSk7CisgICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9vYmpfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9k
b21fdGVzdF9vYmpfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKIH0KIAotZ3Vz
aG9ydAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQorc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19p
bml0KFdlYktpdERPTVRlc3RPYmpDbGFzcyogcmVxdWVzdENsYXNzKQogewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBndXNob3J0IHJlcyA9IGl0ZW0tPnVuc2lnbmVkU2hvcnRBdHRyKCk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdW5zaWduZWRfc2hv
cnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndXNob3J0IHZhbHVlKQotewotICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGl0ZW0tPnNldFVuc2lnbmVkU2hvcnRBdHRyKHZhbHVlKTsKLX0KLQotZ2xvbmcKLXdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludEF0dHIoKTsKLSAgICBy
ZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbnRfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5zZXRJbnRBdHRyKHZhbHVlKTsKLX0KLQotZ2ludDY0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnaW50NjQgcmVzID0gaXRlbS0+bG9uZ0xvbmdBdHRyKCk7Ci0gICAgcmV0dXJuIHJl
czsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbG9uZ19sb25nX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2ludDY0IHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
PnNldExvbmdMb25nQXR0cih2YWx1ZSk7Ci19Ci0KLWd1aW50NjQKLXdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGd1aW50NjQgcmVzID0gaXRlbS0+dW5zaWduZWRMb25nTG9u
Z0F0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBndWlu
dDY0IHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRy
KHZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciog
cmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyKCkpOwotICAgIHJldHVy
biByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFs
dWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0
dHIoY29udmVydGVkX3ZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPnRlc3RPYmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJl
cyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJu
X2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUg
PSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1
ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVy
dGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0VGVzdE9iakF0dHIoY29udmVydGVkX3Zh
bHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3ht
bF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
eG1sT2JqQXR0cigpKTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRl
c3RPYmoqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2
YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2
YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9
Ci0gICAgaXRlbS0+c2V0WE1MT2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nYm9vbGVh
bgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfY3JlYXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmlzQ3JlYXRlKCk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfY3Jl
YXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGl0ZW0tPnNldENyZWF0ZSh2YWx1ZSk7Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0
ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJB
dHRyKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHN0cmluZ2F0dHJBdHRyLCBjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Z2V0SW50ZWdy
YWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRy
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9y
ZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1
ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ3Vsb25n
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBndWxvbmcg
cmVzID0gaXRlbS0+Z2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cik7Ci0gICAgcmV0dXJuIHJlczsK
LX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3Vuc2lnbmVkX2lu
dGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Vsb25nIHZhbHVlKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGl0ZW0tPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIsIHZhbHVlKTsKLX0KLQot
Z2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9ib29sZWFuX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4g
cmVzID0gaXRlbS0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9v
bGVhbmF0dHJBdHRyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9yZWZsZWN0ZWRfYm9vbGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdib29sZWFuIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJvb2xlYW5BdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIHZhbHVlKTsK
LX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJl
cyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdXJsX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Ci19
Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVybiByZXM7Ci19
Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3Zh
bHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIGNvbnZl
cnRlZF92YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0
ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cik7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1
c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2Jvb2xl
YW4KLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdib29sZWFu
IHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRCb29sZWFuQXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdib29sZWFuIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0
dHJBdHRyLCB2YWx1ZSk7Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVm
bGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIp
KTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9y
ZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAg
ICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFs
dWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRVUkxBdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKLX0KLQotZ2xvbmcKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5hdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5zZXRBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2xvbmcgdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRl
cmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2Rl
LCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICByZXR1cm4gcmVz
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93aXRoX2dl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVl
LCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0t
PnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGNvbnZlcnRlZF92YWx1ZSwgZWMpOwot
ICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAg
IH0KLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl93aXRo
X3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3Ip
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV1RGOjpTdHJp
bmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKLSAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5zZXRTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbihjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAg
ICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAg
ICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJ
VF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0KLWdsb25nCi13
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRl
bS0+d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9p
ZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
PnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSh2YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVRlc3RP
YmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4
dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0t
PndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCkpOwotICAgIFdlYktpdERPTVRl
c3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwot
fQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25f
Y29udGV4dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9i
aiogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVl
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVl
KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAg
ICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShjb252ZXJ0ZWRf
dmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYykpOwot
ICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAg
IH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRl
ZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVy
dGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBpdGVtLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoY29udmVy
dGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFs
KGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBl
Y2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNl
cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIFdlYktpdERPTVRlc3RP
YmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQot
Ci12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29u
dGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRl
c3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0g
TlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF92YWx1ZSk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGNvbnZl
cnRlZF92YWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3Rh
dGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCkpOwot
ICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3Nj
cmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoY29udmVydGVkX3ZhbHVlKTsKLX0K
LQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0
X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpKTsKLSAgICBpZiAoZWMpIHsK
LSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0g
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0
RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsK
LSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGNvbnZlcnRlZF92YWx1ZSwgZWMpOwot
ICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAg
IH0KLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXNfYXR0
cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgp
KTsKLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwp
IHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5z
ZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZShjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29u
ZGl0aW9uYWxBdHRyMSgpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKQot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjEodmFsdWUpOwotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSAqLwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjIoKTsKLSAgICByZXR1cm4gcmVzOwot
I2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjIodmFsdWUpOwot
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0K
LQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIzKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5jb25kaXRp
b25hbEF0dHIzKCk7Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGdsb25nPigwKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCi19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRpdGlv
bmFsX2F0dHIzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotI2lmIEVO
QUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVt
LT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLVdlYktpdERPTURvY3VtZW50Kgotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfY29udGVudF9kb2N1bWVudChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50
PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNvbnRlbnREb2N1bWVudCgpKTsKLSAgICBXZWJL
aXRET01Eb2N1bWVudCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVy
biByZXM7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRf
bXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPm11dGFibGVQb2ludCgpKTsKLSAgICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2ViS2l0
OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdlYkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsK
LSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJL
aXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1
ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOwot
fQotCi1XZWJLaXRET01TVkdQb2ludCoKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ltbXV0YWJs
ZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmlt
bXV0YWJsZVBvaW50KCkpOwotICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6Omtp
dChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVNWR1BvaW50KiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKLSAgICBXZWJDb3JlOjpTVkdQb2ludCAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0g
ICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0
Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUp
OwotICAgIH0KLSAgICBpdGVtLT5zZXRJbW11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFsdWUpOwot
fQotCi1naW50Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJhd2JlcnJ5KFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdpbnQgcmVzID0gaXRlbS0+Ymx1
ZWJlcnJ5KCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50IHZhbHVlKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGl0ZW0tPnNldEJsdWViZXJyeSh2YWx1ZSk7Ci19Ci0KLWdmbG9hdAotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdmbG9hdCByZXMgPSBpdGVtLT5zdHJpY3RGbG9hdCgp
OwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0
cmljdF9mbG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxvYXQgdmFsdWUpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQodmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0
X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+ZGVzY3JpcHRpb24oKTsKLSAg
ICByZXR1cm4gcmVzOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0g
aXRlbS0+aWQoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5zZXRJZCh2YWx1ZSk7Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOwotICAg
IHJldHVybiByZXM7Ci19Ci0KLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T2JqLCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotV2ViQ29yZTo6VGVzdE9iaiogY29yZShXZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwotCi0gICAgV2ViQ29y
ZTo6VGVzdE9iaiogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPYmoqPihX
RUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci1lbnVtIHsKLSAgICBQUk9QXzAsCi0gICAgUFJPUF9SRUFE
X09OTFlfSU5UX0FUVFIsCi0gICAgUFJPUF9SRUFEX09OTFlfU1RSSU5HX0FUVFIsCi0gICAgUFJP
UF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKLSAgICBQUk9QX1NIT1JUX0FUVFIsCi0gICAgUFJP
UF9VTlNJR05FRF9TSE9SVF9BVFRSLAotICAgIFBST1BfSU5UX0FUVFIsCi0gICAgUFJPUF9MT05H
X0xPTkdfQVRUUiwKLSAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAotICAgIFBST1Bf
U1RSSU5HX0FUVFIsCi0gICAgUFJPUF9URVNUX09CSl9BVFRSLAotICAgIFBST1BfWE1MX09CSl9B
VFRSLAotICAgIFBST1BfQ1JFQVRFLAotICAgIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSLAot
ICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfVU5T
SUdORURfSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFIsCi0g
ICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FU
VFIsCi0gICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFIsCi0gICAgUFJPUF9S
RUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01f
VVJMX0FUVFIsCi0gICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTiwKLSAgICBQUk9Q
X0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9H
RVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBU
SU9OLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFLAotICAgIFBST1BfV0lU
SF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFLAotICAgIFBST1BfV0lUSF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElP
Tl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVMsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJ
T05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKLSAgICBQUk9QX1dJVEhfU0NS
SVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywK
LSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVf
V0lUSF9TUEFDRVNfQVRUUklCVVRFLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfQVJHVU1FTlRTX0FO
RF9DQUxMX1NUQUNLX0FUVFJJQlVURSwKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBQUk9Q
X0NPTkRJVElPTkFMX0FUVFIxLAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwotI2lm
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBQUk9QX0NPTkRJ
VElPTkFMX0FUVFIyLAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
Ci0gICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMywKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi0gICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAot
ICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKLSAgICBQUk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAgICBQ
Uk9QX1NUUkFXQkVSUlksCi0gICAgUFJPUF9TVFJJQ1RfRkxPQVQsCi0gICAgUFJPUF9ERVNDUklQ
VElPTiwKLSAgICBQUk9QX0lELAotICAgIFBST1BfSEFTSCwKLX07Ci0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2Vi
S2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKLSAg
ICAKLSAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewotICAgICAgICBXZWJDb3JlOjpU
ZXN0T2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaiAqPihkb21f
b2JqZWN0LT5jb3JlT2JqZWN0KTsKLQotICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQoY29yZU9iamVjdCk7Ci0gICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7Ci0KLSAgICAg
ICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7Ci0gICAgfQotCi0gICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3Qp
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBzcGVjKQotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJLaXRET01UZXN0T2JqKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX09CSihvYmplY3Qp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVTZWxmID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRS
OgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVkU2hvcnRBdHRyKChnX3ZhbHVl
X2dldF91aW50KHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9Q
X0lOVF9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldEludEF0dHIoKGdfdmFsdWVf
Z2V0X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1Bf
VU5TSUdORURfTE9OR19MT05HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0VW5z
aWduZWRMb25nTG9uZ0F0dHIoKGdfdmFsdWVfZ2V0X3VpbnQ2NCh2YWx1ZSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAg
IGNvcmVTZWxmLT5zZXRTdHJpbmdBdHRyKFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dl
dF9zdHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1Bf
Q1JFQVRFOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldENyZWF0ZSgoZ192YWx1ZV9nZXRf
Ym9vbGVhbih2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9S
RUZMRUNURURfU1RSSU5HX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewot
ICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVU5TSUdORURf
SU5URUdSQUxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRVbnNpZ25lZEludGVn
cmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3Jh
bGF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfdWxvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUjoKLSAgICB7Ci0gICAg
ICAgIGNvcmVTZWxmLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkYm9vbGVhbmF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSkpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVVJMX0FUVFI6Ci0g
ICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9z
dHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFI6
Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2xv
bmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVD
VEVEX0NVU1RPTV9CT09MRUFOX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0Qm9v
bGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0
ckF0dHIsIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6Ci0gICAgewotICAg
ICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5n
KHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FUVFJfV0lU
SF9HRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbigo
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgY29yZVNlbGYtPnNldEF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSksIGVjKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9F
WENFUFRJT046Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICAgICAgY29yZVNlbGYtPnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURjo6
U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSwgZWMpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfU0VUVEVSX0VY
Q0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRF
OgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgo
Z192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2lmIEVO
QUJMRShDb25kaXRpb24xKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMToKLSAgICB7
Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIxKChnX3ZhbHVlX2dldF9sb25n
KHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRp
dGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQot
ICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxm
LT5zZXRDb25kaXRpb25hbEF0dHIyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjM6Ci0gICAgewotICAgICAgICBjb3Jl
U2VsZi0+c2V0Q29uZGl0aW9uYWxBdHRyMygoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikgKi8KLSAgICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgotICAgIHsKLSAg
ICAgICAgY29yZVNlbGYtPnNldFN0cmljdEZsb2F0KChnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JRDoKLSAgICB7Ci0gICAg
ICAgIGNvcmVTZWxmLT5zZXRJZCgoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAgY2FzZSBQUk9QX1JFQURfT05MWV9JTlRfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5yZWFkT25s
eUludEF0dHIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVBRF9P
TkxZX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1
ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+cmVhZE9ubHlTdHJpbmdBdHRyKCkpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpf
QVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3Jl
U2VsZi0+cmVhZE9ubHlUZXN0T2JqQXR0cigpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3Qo
dmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1NIT1JUX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9pbnQo
dmFsdWUsIGNvcmVTZWxmLT5zaG9ydEF0dHIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQodmFsdWUsIGNvcmVTZWxmLT51bnNpZ25lZFNob3J0QXR0cigpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdf
dmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5pbnRBdHRyKCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0xPTkdfTE9OR19BVFRSOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfaW50NjQodmFsdWUsIGNvcmVTZWxmLT5sb25nTG9uZ0F0dHIoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6
Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF91aW50NjQodmFsdWUsIGNvcmVTZWxmLT51bnNp
Z25lZExvbmdMb25nQXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJP
UF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUs
IGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPnN0cmluZ0F0dHIoKSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1RFU1RfT0JKX0FUVFI6Ci0gICAgewotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnRlc3RPYmpBdHRyKCk7
Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfWE1MX09CSl9BVFRSOgot
ICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT54
bWxPYmpBdHRyKCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0Ojpr
aXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfQ1JF
QVRFOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYt
PmlzQ3JlYXRlKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxF
Q1RFRF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAgICAg
ICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0cikpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JB
TF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfdWxvbmcodmFsdWUsIGNvcmVTZWxm
LT5nZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvcmVTZWxmLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfVVJMX0FUVFI6Ci0gICAgewotICAgICAgICBnX3Zh
bHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0cikpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FU
VFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9V
VEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5f
QVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvcmVTZWxm
LT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0
dHJBdHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVE
X0NVU1RPTV9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFs
dWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7
Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBnX3ZhbHVl
X3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VUVEVSX0VY
Q0VQVElPTjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxm
LT5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046Ci0gICAgewotICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgZ192YWx1ZV90YWtl
X3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24oZWMpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+
c3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKLSAgICB7Ci0gICAg
ICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJ
UFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdl
YkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6
a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJ
VEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgewotICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+
IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpOwotICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElP
Tl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9
IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhlYyk7
Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhF
Q1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6Ci0gICAgewotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKTsKLSAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRf
U0NSSVBUX1NUQVRFX0FUVFJJQlVURV9SQUlTRVM6Ci0gICAgewotICAgICAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0
ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKGVjKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJL
aXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJP
UF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX1dJVEhfU1BB
Q0VTX0FUVFJJQlVURToKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBw
dHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBX
ZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9XSVRIX1NDUklQVF9BUkdVTUVOVFNfQU5EX0NBTExfU1RBQ0tfQVRUUklCVVRFOgotICAg
IHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCk7Ci0gICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBjYXNlIFBST1BfQ09ORElUSU9O
QUxfQVRUUjE6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2Vs
Zi0+Y29uZGl0aW9uYWxBdHRyMSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSAqLwotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLSAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjI6Ci0gICAgewotICAg
ICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxBdHRyMigp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCi0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIzOgotICAgIHsKLSAg
ICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmNvbmRpdGlvbmFsQXR0cjMo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi0gICAgY2FzZSBQUk9QX0NPTlRFTlRfRE9DVU1FTlQ6
Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IHB0ciA9IGNvcmVTZWxm
LT5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBX
ZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9NVVRBQkxFX1BPSU5UOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlNWR1Bv
aW50PiBwdHIgPSBjb3JlU2VsZi0+bXV0YWJsZVBvaW50KCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFBST1BfSU1NVVRBQkxFX1BPSU5UOgotICAgIHsKLSAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlNWR1BvaW50PiBwdHIgPSBjb3JlU2VsZi0+aW1tdXRhYmxlUG9pbnQoKTsK
LSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TVFJBV0JFUlJZOgotICAg
IHsKLSAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3JlU2VsZi0+Ymx1ZWJlcnJ5KCkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklDVF9GTE9BVDoKLSAg
ICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBjb3JlU2VsZi0+c3RyaWN0Rmxv
YXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfREVTQ1JJUFRJT046
Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+ZGVzY3Jp
cHRpb24oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSUQ6Ci0gICAg
ewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+aWQoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSEFTSDoKLSAgICB7Ci0gICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmhh
c2goKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X29ial9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCi17Ci0KLSAgICBpZiAoR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLSAg
ICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZChvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNzKiByZXF1ZXN0Q2xhc3MpCi17Ci0gICAg
R09iamVjdENsYXNzICpnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OwotICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFs
aXplOwotICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVk
ID0gd2Via2l0X2RvbV90ZXN0X29ial9jb25zdHJ1Y3RlZDsKKyAgICBHT2JqZWN0Q2xhc3MgKmdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxpemU7CisgICAgZ29iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eTsK
KyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NvbnN0cnVjdGVkOwogCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1JFQURfT05MWV9JTlRfQVRUUiwKQEAgLTIzMDQsMTIyICs4NDYsMTYxMiBAQCBHX01BWExPTkcs
IC8qIG1heCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAq
LwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0g
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNvbmRp
dGlvbmFsLWF0dHIxIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0cjEi
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5j
b25kaXRpb25hbC1hdHRyMSIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBk
b2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBt
YXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRp
b25hbC1hdHRyMSIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIxIiwg
Lyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29u
ZGl0aW9uYWwtYXR0cjEiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9j
IHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19NSU5MT05HLCAvKiBtaW4gKi8KK0dfTUFYTE9ORywgLyogbWF4
ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5B
QkxFKENvbmRpdGlvbjIpCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJ
VElPTkFMX0FUVFIyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIyIiwgLyogbmFtZSAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpf
Y29uZGl0aW9uYWwtYXR0cjIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0
ZSAgZ2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMiIsIC8qIGxvbmdlciAtIGNvdWxkIGRv
IHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAq
LworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNv
bmRpdGlvbmFsLWF0dHIzIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0
cjMiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9i
ai5jb25kaXRpb25hbC1hdHRyMyIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRy
YSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAv
KiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImNvbnRl
bnQtZG9jdW1lbnQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jb250ZW50LWRvY3VtZW50Iiwg
Lyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NRG9jdW1lbnQq
IFRlc3RPYmouY29udGVudC1kb2N1bWVudCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29t
ZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fRE9DVU1FTlQsIC8q
IGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIm11dGFibGUtcG9pbnQiLCAv
KiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLm11dGFibGUt
cG9pbnQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhl
cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NWR19QT0lOVCwgLyogZ29iamVjdCB0eXBlICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfSU1NVVRBQkxFX1BPSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX29iamVjdCgiaW1tdXRhYmxlLXBvaW50IiwgLyogbmFtZSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGVzdF9vYmpfaW1tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
YWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLmltbXV0YWJsZS1wb2ludCIsIC8q
IGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJB
V0JFUlJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2ludCgic3RyYXdiZXJyeSIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmF3YmVycnkiLCAv
KiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2ludCBUZXN0T2JqLnN0cmF3
YmVycnkiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhl
cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NSU5JTlQsIC8qIG1pbiAqLworR19NQVhJTlQsIC8qIG1heCAqLworMCwgLyog
ZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1NUUklDVF9GTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgic3RyaWN0LWZsb2F0IiwgLyogbmFtZSAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGVzdF9vYmpfc3RyaWN0LWZsb2F0IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtd3JpdGUgIGdmbG9hdCBUZXN0T2JqLnN0cmljdC1mbG9hdCIsIC8qIGxvbmdlciAtIGNv
dWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwg
LyogbWluICovCitHX01BWEZMT0FULCAvKiBtYXggKi8KKzAuMCwgLyogZGVmYXVsdCAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX0RFU0NSSVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2xvbmcoImRlc2NyaXB0aW9uIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfZGVz
Y3JpcHRpb24iLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnbG9uZyBU
ZXN0T2JqLmRlc2NyaXB0aW9uIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJh
IGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCitHX01BWExPTkcsIC8q
IG1heCAqLworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiaWQiLCAvKiBuYW1lICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
ZXN0X29ial9pZCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9u
ZyBUZXN0T2JqLmlkIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBz
dHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCitHX01BWExPTkcsIC8qIG1heCAq
LworMCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0hBU0gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJoYXNoIiwgLyogbmFtZSAqLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGVzdF9vYmpfaGFzaCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdj
aGFyKiBUZXN0T2JqLmhhc2giLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEg
ZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2luaXQo
V2ViS2l0RE9NVGVzdE9iaiogcmVxdWVzdCkKK3sKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial92b2lkX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGl0ZW0tPnZvaWRNZXRob2QoKTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial92b2lk
X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywg
Y29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHJfYXJnKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KG9ial9hcmcpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cl9hcmcpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRf
b2JqX2FyZyA9IE5VTEw7CisgICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKKyAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZyk7CisgICAgfQorICAgIGl0ZW0tPnZvaWRNZXRob2RX
aXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcpOwor
fQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9pbnRfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludE1l
dGhvZCgpOworICAgIHJldHVybiByZXM7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2ludF9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9h
cmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAgICBXVEY6OlN0cmluZyBjb252
ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlmIChvYmpfYXJn
ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2Jq
X2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAw
KTsKKyAgICB9CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50TWV0aG9kV2l0aEFyZ3MoaW50X2Fy
ZywgY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnKTsKKyAgICByZXR1cm4gcmVz
OworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9vYmpfbWV0aG9k
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5vYmpNZXRob2Qo
KSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
OworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25n
IGludF9hcmcsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJn
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzdHJfYXJnLCAw
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpfYXJnLCAwKTsKKyAgICBXVEY6OlN0cmlu
ZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29ial9hcmcgPSBOVUxMOworICAgIGlmIChv
YmpfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29ial9hcmcgPSBXZWJLaXQ6OmNv
cmUob2JqX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpf
YXJnLCAwKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZlcnRlZF9z
dHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZykpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9
IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX3NlcXVlbmNlX2FyZyhXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01zZXF1ZW5jZSogKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoKTsKKyAgICBXZWJDb3JlOjpzZXF1ZW5jZSAqIGNvbnZlcnRlZF8gPSBOVUxMOwor
ICAgIGlmICggIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7
CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0t
Pm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhjb252ZXJ0ZWRfKTsKK30KKworV2ViS2l0RE9NVGVzdE9i
aioKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5k
X3Rocm93cyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2Vi
S2l0RE9NVGVzdE9iaiogb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG9ial9hcmcsIDApOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJn
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cl9hcmcpOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7CisgICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewor
ICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKKyAgICAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOworICAgIH0KKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bWV0aG9kVGhhdFJlcXVpcmVzQWxs
QXJnc0FuZFRocm93cyhjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcsIGVjKSk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Cisg
ICAgfQorICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgp
KTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nlcmlh
bGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiBzZXJpYWxpemVkX2FyZykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlcmlhbGl6ZWRfYXJnKTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUg
KiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBOVUxMOworICAgIGlmIChzZXJpYWxpemVkX2Fy
ZyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyA9IFdlYktpdDo6
Y29yZShzZXJpYWxpemVkX2FyZyk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVk
X3NlcmlhbGl6ZWRfYXJnKTsKKyAgICB9CisgICAgaXRlbS0+c2VyaWFsaXplZFZhbHVlKGNvbnZl
cnRlZF9zZXJpYWxpemVkX2FyZyk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfaWRi
X2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGtleSk7CisgICAgV2ViQ29yZTo6SURCS2V5ICog
Y29udmVydGVkX2tleSA9IE5VTEw7CisgICAgaWYgKGtleSAhPSBOVUxMKSB7CisgICAgICAgIGNv
bnZlcnRlZF9rZXkgPSBXZWJLaXQ6OmNvcmUoa2V5KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfa2V5KTsKKyAgICB9CisgICAgaXRlbS0+aWRiS2V5KGNvbnZlcnRlZF9rZXkp
OworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTURpY3Rpb25hcnkqIG9vLCBXZWJLaXRET01EaWN0aW9u
YXJ5KiBvb28pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChvbyk7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChvb28pOworICAgIFdlYkNvcmU6OkRpY3Rpb25hcnkgKiBjb252ZXJ0ZWRf
b28gPSBOVUxMOworICAgIGlmIChvbyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9vbyA9
IFdlYktpdDo6Y29yZShvbyk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29v
KTsKKyAgICB9CisgICAgV2ViQ29yZTo6RGljdGlvbmFyeSAqIGNvbnZlcnRlZF9vb28gPSBOVUxM
OworICAgIGlmIChvb28gIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfb29vID0gV2ViS2l0
Ojpjb3JlKG9vbyk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX29vbyk7Cisg
ICAgfQorICAgIGl0ZW0tPm9wdGlvbnNPYmplY3QoY29udmVydGVkX29vLCBjb252ZXJ0ZWRfb29v
KTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24o
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+bWV0aG9kV2l0aEV4Y2Vw
dGlvbihlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2Mu
bmFtZSk7CisgICAgfQorfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0
X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT53aXRoU2NyaXB0U3RhdGVWb2lkKCk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqKCkpOworICAgIFdlYktp
dERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4g
cmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3Zv
aWRfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPndp
dGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRpb24oZWMpOworICAgIGlmIChlYykgeworICAgICAgICBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19z
ZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIp
LCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVzdE9i
aioKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9i
akV4Y2VwdGlvbihlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9u
X2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUo
KTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihlYykpOworICAgIGlmIChlYykgeworICAg
ICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAg
ICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lU
X0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01U
ZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsK
K30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tZXRob2RX
aXRoT3B0aW9uYWxBcmcob3B0KTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgbm9uX29wdCwgZ2xvbmcgb3B0KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0t
Pm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbl9vcHQsIG9wdCk7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFsX2Fy
Z19hbmRfdHdvX29wdGlvbmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgbm9u
X29wdCwgZ2xvbmcgb3B0MSwgZ2xvbmcgb3B0MikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uX29wdCwgb3B0MSwgb3B0
Mik7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxf
c3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKyAgICBpdGVtLT5tZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmcoY29udmVydGVkX3N0cik7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc3RyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNV
bmRlZmluZWQoY29udmVydGVkX3N0cik7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX251bGxfc3RyaW5nKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChzdHIpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6
ZnJvbVVURjgoc3RyKTsKKyAgICBpdGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGxT
dHJpbmcoY29udmVydGVkX3N0cik7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9j
b25kaXRpb25hbF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPmNvbmRpdGlvbmFsTWV0aG9kMSgpKTsKKyAgICByZXR1cm4gcmVzOwor
I2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikK
KyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKwor
dm9pZAord2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9tZXRob2QyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRp
b24yKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNvbmRpdGlvbmFsTWV0aG9kMigpOworI2Vsc2UKKyNp
ZiAhRU5BQkxFKENvbmRpdGlvbjEpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMSIpCisjZW5kaWYKKyNpZiAhRU5BQkxFKENvbmRpdGlvbjIpCisgICAgV0VC
S0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYKKyNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMyhXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDMoKTsKKyNlbHNlCisgICAg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGl0ZW0tPmNsYXNzTWV0aG9kKCk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIGFyZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y2xh
c3NNZXRob2RXaXRoT3B0aW9uYWwoYXJnKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyBhcmcpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+b3ZlcmxvYWRlZE1ldGhvZDEoYXJnKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2Qx
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlKQoreworI2lmIEVOQUJM
RShDb25kaXRpb24xKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHlwZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX3R5cGUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodHlwZSk7
CisgICAgaXRlbS0+b3ZlcmxvYWRlZE1ldGhvZDEoY29udmVydGVkX3R5cGUpOworI2Vsc2UKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9j
b252ZXJ0MShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hKiApCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdlYkNvcmU6OmEgKiBjb252ZXJ0ZWRfID0g
TlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6
Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAgIH0KKyAg
ICBpdGVtLT5jb252ZXJ0MShjb252ZXJ0ZWRfKTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01iKiApCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdlYkNvcmU6OmIgKiBjb252ZXJ0
ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkXyA9IFdl
YktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAg
IH0KKyAgICBpdGVtLT5jb252ZXJ0Mihjb252ZXJ0ZWRfKTsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0MyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01jKiAp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdlYkNvcmU6OmMgKiBj
b252ZXJ0ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVk
XyA9IFdlYktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8p
OworICAgIH0KKyAgICBpdGVtLT5jb252ZXJ0Myhjb252ZXJ0ZWRfKTsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9jb252ZXJ0NChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRE
T01kKiApCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdlYkNvcmU6
OmQgKiBjb252ZXJ0ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAgICAgY29u
dmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF8pOworICAgIH0KKyAgICBpdGVtLT5jb252ZXJ0NChjb252ZXJ0ZWRfKTsKK30KKwordm9p
ZAord2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0NShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01lKiApCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdl
YkNvcmU6OmUgKiBjb252ZXJ0ZWRfID0gTlVMTDsKKyAgICBpZiAoICE9IE5VTEwpIHsKKyAgICAg
ICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOworICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF8pOworICAgIH0KKyAgICBpdGVtLT5jb252ZXJ0NShjb252ZXJ0ZWRfKTsKK30K
KworV2ViS2l0RE9NU1ZHUG9pbnQqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFibGVfcG9pbnRf
ZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5t
dXRhYmxlUG9pbnRGdW5jdGlvbigpKTsKKyAgICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2Vi
S2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVNW
R1BvaW50Kgord2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFibGVfcG9pbnRfZnVuY3Rpb24oV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5pbW11dGFibGVQb2lu
dEZ1bmN0aW9uKCkpOworICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9vcmFuZ2UoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVt
LT5vcmFuZ2UoKTsKK30KKworV2ViS2l0RE9NYm9vbCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfc3Ry
aWN0X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIsIGdm
bG9hdCBhLCBnaW50IGIsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzdHIsIDApOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9z
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OmJvb2w+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+c3RyaWN0RnVuY3Rpb24oY29udmVydGVkX3N0ciwgYSwgYiwgZWMpKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
CisgICAgV2ViS2l0RE9NYm9vbCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAg
IHJldHVybiByZXM7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29u
bHlfaW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzID0gaXRlbS0+cmVhZE9ubHlJbnRBdHRyKCk7CisgICAgcmV0dXJuIHJlczsK
K30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIq
IHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+cmVhZE9ubHlTdHJpbmdBdHRyKCkpOwor
ICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+cmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKKyAgICBXZWJLaXRE
T01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJl
czsKK30KKworZ3Nob3J0Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdzaG9ydCByZXMgPSBp
dGVtLT5zaG9ydEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdzaG9ydCB2
YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTaG9ydEF0dHIodmFsdWUpOworfQorCitn
dXNob3J0Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVzID0g
aXRlbS0+dW5zaWduZWRTaG9ydEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGd1c2hvcnQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5zaWdu
ZWRTaG9ydEF0dHIodmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRf
aW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2xvbmcgcmVzID0gaXRlbS0+aW50QXR0cigpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGdsb25nIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludEF0dHIodmFsdWUpOwor
fQorCitnaW50NjQKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdpbnQ2NCByZXMgPSBp
dGVtLT5sb25nTG9uZ0F0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBn
aW50NjQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVl
KTsKK30KKworZ3VpbnQ2NAord2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19s
b25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z3VpbnQ2NCByZXMgPSBpdGVtLT51bnNpZ25lZExvbmdMb25nQXR0cigpOworICAgIHJldHVybiBy
ZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9u
Z19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgdmFsdWUpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodmFsdWUpOworfQorCitnY2hhcioK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0U3RyaW5nQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwor
fQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9i
akF0dHIoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9i
aiogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVl
ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVl
KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAg
ICBpdGVtLT5zZXRUZXN0T2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOworfQorCitXZWJLaXRET01U
ZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT54bWxPYmpBdHRyKCkpOworICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1
cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAg
ICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRYTUxPYmpB
dHRyKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK2dib29sZWFuCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aXNDcmVhdGUoKTsKKyAgICByZXR1cm4gcmVzOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q3JlYXRlKHZh
bHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3Ry
aW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVz
OworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIGNvbnZl
cnRlZF92YWx1ZSk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0
ZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpOworICAgIHJldHVybiByZXM7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50
ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOworfQorCitndWxvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1bG9uZyByZXMgPSBpdGVtLT5nZXRVbnNpZ25l
ZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRp
bnRlZ3JhbGF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0VW5z
aWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2ln
bmVkaW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbgord2Via2l0X2RvbV90
ZXN0X29ial9nZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOworICAgIHJl
dHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9i
b29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgdmFsdWUpOworfQorCitnY2hhcioKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxh
dHRyQXR0cikpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBn
Y2hhciogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZh
bHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1cmxhdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKK30KKworZ2NoYXIqCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJp
bmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0
cmluZ0F0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90
ZXN0X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZh
bHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKK30KKworZ2xv
bmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyBy
ZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3Rv
bUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
c2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50
ZWdyYWxBdHRyQXR0ciwgdmFsdWUpOworfQorCitnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X29i
al9nZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Cisg
ICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVj
dGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4g
dmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIHZhbHVlKTsKK30KKwor
Z2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2Vs
ZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiBy
ZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOworICAgIHJldHVybiByZXM7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0
dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRl
ZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0QXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252
ZXJ0ZWRfdmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93
aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJy
b3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0
cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFs
dWUsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1
YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7
CisgICAgfQorfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3Nl
dHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhf
c2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vy
cm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKKyAg
ICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVj
ZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJv
bV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9
Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9n
ZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihlYykpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitnY2hhcioKK3dlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigp
KTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9z
dHJpbmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnZl
cnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKHZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGUoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0Ojpr
aXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29u
dmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBj
b252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERP
TVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRy
aWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTVRlc3RP
YmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVl
LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBp
ZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Cisg
ICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGl0ZW0tPnNldFdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9
CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3Njcmlw
dF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIEdFcnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVz
ID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJy
b3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVz
Yy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAq
KmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAh
PSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7
CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
fQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiog
cmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3Zv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0
X2FuZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAg
IGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6
Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsK
KyAgICB9CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOworfQorCitXZWJLaXRET01UZXN0T2JqKgor
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5k
X3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdF
cnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyhlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0
ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29k
ZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0
X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVRlc3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVl
ID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFs
dWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF92YWx1ZSk7CisgICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBn
X3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9N
IiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQorCitXZWJLaXRET01UZXN0
T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRl
eHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0
T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCkpOworICAgIFdlYktpdERPTVRlc3RP
YmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29u
dGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3Zh
bHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRf
dmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNv
bnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7
Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKQorICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIxKCk7CisgICAg
cmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMSIpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKKyNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUp
Cit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29uZGl0
aW9uYWxBdHRyMSh2YWx1ZSk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkNvbmRpdGlvbjEiKQogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworfQor
CitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRpdGlv
bmFsQXR0cjIoKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyNpZiAhRU5BQkxFKENvbmRpdGlv
bjEpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisj
ZW5kaWYKKyNpZiAhRU5BQkxFKENvbmRpdGlvbjIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxf
YXR0cjIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJjb25kaXRpb25hbC1hdHRyMiIsIC8qIG5h
bWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRlc3Rfb2JqX2NvbmRpdGlvbmFsLWF0dHIyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouY29uZGl0aW9uYWwtYXR0cjIiLCAv
KiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NSU5MT05HLCAvKiBtaW4gKi8KLUdfTUFYTE9ORywgLyogbWF4ICovCi0wLCAvKiBkZWZhdWx0
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRD
b25kaXRpb25hbEF0dHIyKHZhbHVlKTsKKyNlbHNlCisjaWYgIUVOQUJMRShDb25kaXRpb24xKQor
ICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorI2VuZGlm
CisjaWYgIUVOQUJMRShDb25kaXRpb24yKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmCiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
ICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29i
al9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIzIiwg
LyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRy
MyIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRl
ZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnbG9uZyByZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIzKCk7CisgICAgcmV0dXJuIHJlczsK
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIp
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJjb250ZW50LWRvY3VtZW50IiwgLyogbmFtZSAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdF9vYmpfY29udGVudC1kb2N1bWVudCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZWFkLW9ubHkgIFdlYktpdERPTURvY3VtZW50KiBUZXN0T2JqLmNvbnRlbnQtZG9jdW1lbnQi
LCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfRE9NX0RPQ1VNRU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01V
VEFCTEVfUE9JTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KCJtdXRhYmxlLXBvaW50IiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfbXV0
YWJsZS1wb2ludCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJL
aXRET01TVkdQb2ludCogVGVzdE9iai5tdXRhYmxlLXBvaW50IiwgLyogbG9uZ2VyIC0gY291bGQg
ZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9T
VkdfUE9JTlQsIC8qIGdvYmplY3QgdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lNTVVUQUJMRV9QT0lOVCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoImlt
bXV0YWJsZS1wb2ludCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2ltbXV0YWJsZS1wb2ludCIs
IC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJLaXRET01TVkdQb2lu
dCogVGVzdE9iai5pbW11dGFibGUtcG9pbnQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNv
bWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NWR19QT0lOVCwg
LyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSQVdCRVJSWSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoInN0cmF3YmVycnkiLCAvKiBuYW1l
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X29ial9zdHJhd2JlcnJ5IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtd3JpdGUgIGdpbnQgVGVzdE9iai5zdHJhd2JlcnJ5IiwgLyogbG9uZ2VyIC0gY291bGQg
ZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOSU5ULCAvKiBtaW4g
Ki8KLUdfTUFYSU5ULCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJJQ1Rf
RkxPQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxvYXQoInN0cmljdC1mbG9hdCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmljdC1mbG9h
dCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnZmxvYXQgVGVzdE9i
ai5zdHJpY3QtZmxvYXQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9j
IHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsIC8qIG1pbiAqLwotR19NQVhGTE9BVCwgLyog
bWF4ICovCi0wLjAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwot
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9ERVNDUklQVElPTiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19sb25nKCJkZXNjcmlwdGlv
biIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2Rlc2NyaXB0aW9uIiwgLyogc2hvcnQgZGVzY3Jp
cHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlYWQtb25seSAgZ2xvbmcgVGVzdE9iai5kZXNjcmlwdGlvbiIsIC8qIGxv
bmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01J
TkxPTkcsIC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2xvbmcoImlkIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfaWQiLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5pZCIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcs
IC8qIG1pbiAqLwotR19NQVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9IQVNILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X3N0cmluZygiaGFzaCIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2hhc2giLCAvKiBzaG9ydCBk
ZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBnY2hhciogVGVzdE9iai5oYXNoIiwgLyogbG9u
Z2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAv
KiBkZWZhdWx0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQogCit2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyhXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Q29uZGl0aW9uYWxBdHRyMyh2YWx1ZSk7
CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEi
KQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAor
V2ViS2l0RE9NRG9jdW1lbnQqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3Vt
ZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y29udGVu
dERvY3VtZW50KCkpOworICAgIFdlYktpdERPTURvY3VtZW50KiByZXMgPSBXZWJLaXQ6OmtpdChn
X3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X2Rv
bV90ZXN0X29ial9pbml0KFdlYktpdERPTVRlc3RPYmoqIHJlcXVlc3QpCitXZWJLaXRET01TVkdQ
b2ludCoKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
VkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5tdXRhYmxlUG9pbnQoKSk7CisgICAg
V2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9tdXRhYmxlX3Bv
aW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVNWR1BvaW50KiB2YWx1ZSkKIHsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpTVkdQ
b2ludCAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsK
KyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAg
Z19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRN
dXRhYmxlUG9pbnQoY29udmVydGVkX3ZhbHVlKTsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1X
ZWJLaXRET01UZXN0T2JqKiB3cmFwVGVzdE9iaihXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0
KQorV2ViS2l0RE9NU1ZHUG9pbnQqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbW11dGFibGVf
cG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjb3JlT2JqZWN0LCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTVkdQb2ludD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5pbW11dGFibGVQb2ludCgpKTsK
KyAgICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwor
ICAgIHJldHVybiByZXM7Cit9CiAKLSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVz
aW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmpl
Y3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBm
aW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICov
Ci0gICAgY29yZU9iamVjdC0+cmVmKCk7Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9p
bW11dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQq
IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUg
IT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUp
OworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAg
IGl0ZW0tPnNldEltbXV0YWJsZVBvaW50KGNvbnZlcnRlZF92YWx1ZSk7Cit9CiAKLSAgICByZXR1
cm4gIFdFQktJVF9ET01fVEVTVF9PQkooZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNU
X09CSiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNv
cmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworZ2ludAord2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnaW50IHJlcyA9IGl0ZW0tPmJsdWViZXJyeSgpOworICAgIHJldHVybiByZXM7CiB9
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c3RyYXdiZXJyeShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50IHZhbHVlKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGl0ZW0tPnNldEJsdWViZXJyeSh2YWx1ZSk7Cit9CisKK2dmbG9hdAord2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdmbG9hdCByZXMgPSBpdGVtLT5zdHJpY3RGbG9hdCgpOworICAg
IHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmljdF9m
bG9hdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnZmxvYXQgdmFsdWUpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgaXRlbS0+c2V0U3RyaWN0RmxvYXQodmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90
ZXN0X29ial9nZXRfZGVzY3JpcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+ZGVzY3JpcHRpb24oKTsKKyAgICByZXR1
cm4gcmVzOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+
aWQoKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBpdGVtLT5zZXRJZCh2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfaGFzaChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
Y2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5oYXNoKCkpOworICAgIHJldHVy
biByZXM7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oCmlu
ZGV4IDk2NzIyZjc5NzUzYzM5ZDJkMWFjZDJlYTcwNGJhNzdkZmJiYzU1NjEuLjJmN2FlMmFlYTg3
ZThmMTcwNTZiMmZkNjhlYzU5NTRkZWVmNTRiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9ialByaXZhdGUuaApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRl
c3RPYmouaCIKKworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0T2JqICoK
ICAgICB3cmFwVGVzdE9iaihXZWJDb3JlOjpUZXN0T2JqICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggODQ1YTM3MzdjMWExMmNhYTQ3YTBmMmEwYTE2ZDk0
ZjU2YjhlMjAzMC4uZGE5NTlkZGRiOGNkMjM3MzU0MzY4NGEyMjZmODEyNzM4NzQyZTViMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgpAQCAt
NDIsOCArNDAsMTAgQEAKICNpbmNsdWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdG1hcnNoYWwuaCIKIAorI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMikKKwogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
b2JqLCAwKTsKQEAgLTUzLDE1MyArNTMsMzcgQEAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmEKIAog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZh
bHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNmZXJfbGlzdCkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOwotICAg
IGdfcmV0dXJuX2lmX2ZhaWwodHJhbnNmZXJfbGlzdCk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlICogY29udmVydGVkX2RhdGEgPSBOVUxMOwotICAgIGlmIChkYXRhICE9IE5V
TEwpIHsKLSAgICAgICAgY29udmVydGVkX2RhdGEgPSBXZWJLaXQ6OmNvcmUoZGF0YSk7Ci0gICAg
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2RhdGEpOwotICAgIH0KLSAgICBXZWJDb3Jl
OjpBcnJheSAqIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gTlVMTDsKLSAgICBpZiAodHJhbnNm
ZXJfbGlzdCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gV2Vi
S2l0Ojpjb3JlKHRyYW5zZmVyX2xpc3QpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF90cmFuc2Zlcl9saXN0KTsKLSAgICB9Ci0gICAgaXRlbS0+YWNjZXB0VHJhbnNmZXJMaXN0
KGNvbnZlcnRlZF9kYXRhLCBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7Ci19CiAKLXZvaWQKLXdl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfbXVsdGlfdHJh
bnNmZXJfbGlzdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBz
ZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGZpcnN0LCBXZWJLaXRET01BcnJh
eSogdHgsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2Vjb25kLCBXZWJLaXRET01B
cnJheSogdHh4KQorV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
Y29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiByZXF1ZXN0
KQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoZmlyc3QpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodHgpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2Vjb25kKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHR4eCk7Ci0gICAgV2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX2ZpcnN0ID0gTlVMTDsKLSAgICBpZiAo
Zmlyc3QgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfZmlyc3QgPSBXZWJLaXQ6OmNvcmUo
Zmlyc3QpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9maXJzdCk7Ci0gICAg
fQotICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVydGVkX3R4ID0gTlVMTDsKLSAgICBpZiAodHgg
IT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdHggPSBXZWJLaXQ6OmNvcmUodHgpOwotICAg
ICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90eCk7Ci0gICAgfQotICAgIFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZWNvbmQgPSBOVUxMOwotICAgIGlm
IChzZWNvbmQgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfc2Vjb25kID0gV2ViS2l0Ojpj
b3JlKHNlY29uZCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3NlY29uZCk7
Ci0gICAgfQotICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVydGVkX3R4eCA9IE5VTEw7Ci0gICAg
aWYgKHR4eCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF90eHggPSBXZWJLaXQ6OmNvcmUo
dHh4KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdHh4KTsKLSAgICB9Ci0g
ICAgaXRlbS0+bXVsdGlUcmFuc2Zlckxpc3QoY29udmVydGVkX2ZpcnN0LCBjb252ZXJ0ZWRfdHgs
IGNvbnZlcnRlZF9zZWNvbmQsIGNvbnZlcnRlZF90eHgpOwotfQorICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHJlcXVlc3QsIDApOwogCi1XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1
ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT52YWx1ZSgpKTsKLSAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdl
YktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQorICAgIFdlYkNvcmU6
OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNvcmVPYmplY3QgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oV0VCS0lU
X0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNvcmVPYmplY3QsIDApOwogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9z
Y3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUq
IHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAq
IGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAg
ICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRWYWx1ZShj
b252ZXJ0ZWRfdmFsdWUpOworICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCi1XZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRf
dmFsdWVfaW50ZXJmYWNlX2dldF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQorV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogd3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uo
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCkK
IHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIo
aXRlbS0+cmVhZG9ubHlWYWx1ZSgpKTsKLSAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwogCi1XZWJLaXRET01TZXJp
YWxpemVkU2NyaXB0VmFsdWUqCi13ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFs
dWVfaW50ZXJmYWNlX2dldF9jYWNoZWRfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2FjaGVkVmFsdWUoKSk7Ci0gICAgV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVz
aW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmpl
Y3QKKyAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBm
aW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICov
CisgICAgY29yZU9iamVjdC0+cmVmKCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVk
U2NyaXB0VmFsdWUqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5V
TEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVt
LT5zZXRDYWNoZWRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworICAgIHJldHVybiAgV0VCS0lUX0RP
TV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3Qi
LCBjb3JlT2JqZWN0LCBOVUxMKSk7CiB9CiAKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSoKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0
X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19y
ZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jYWNoZWRSZWFkb25seVZhbHVlKCkpOwotICAgIFdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
OwotICAgIHJldHVybiByZXM7Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2VuZGlmIC8v
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAogR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLCB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlLCBXRUJLSVRfVFlQRV9ET01f
T0JKRUNUKQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiByZXF1ZXN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVl
c3QsIDApOwotCi0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1cm4g
Y29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBlbnVtIHsKICAgICBQUk9Q
XzAsCiAgICAgUFJPUF9WQUxVRSwKQEAgLTIwOCw5ICs5Miw5IEBAIGVudW0gewogICAgIFBST1Bf
Q0FDSEVEX1JFQURPTkxZX1ZBTFVFLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2ZpbmFsaXplKEdPYmplY3QqIG9i
amVjdCkKIHsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAg
ICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0
KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewpAQCAtMjIxLDYgKzEw
NSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCoKIAogICAgICAgICBkb21fb2JqZWN0LT5jb3Jl
T2JqZWN0ID0gTlVMTDsKICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3Nl
cmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOwogfQpAQCAtMzI0LDE5ICsyMDksMTc1IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfaW5pdChXZWJLaXRET01UZXN0
CiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogd3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uo
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZU9iamVjdCkK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vf
YWNjZXB0X3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJL
aXRET01BcnJheSogdHJhbnNmZXJfbGlzdCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
b3JlT2JqZWN0LCAwKTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRyYW5zZmVyX2xpc3QpOworICAgIFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9kYXRhID0gTlVMTDsKKyAg
ICBpZiAoZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9kYXRhID0gV2ViS2l0Ojpj
b3JlKGRhdGEpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9kYXRhKTsKKyAg
ICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IE5VTEw7
CisgICAgaWYgKHRyYW5zZmVyX2xpc3QgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdHJh
bnNmZXJfbGlzdCA9IFdlYktpdDo6Y29yZSh0cmFuc2Zlcl9saXN0KTsKKyAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7CisgICAgfQorICAgIGl0ZW0tPmFj
Y2VwdFRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZGF0YSwgY29udmVydGVkX3RyYW5zZmVyX2xpc3Qp
OworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24x
IikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAK
LSAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50
ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxs
b2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRo
ZQotICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVm
KCk7Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX211bHRpX3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBmaXJzdCwg
V2ViS2l0RE9NQXJyYXkqIHR4LCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlY29u
ZCwgV2ViS2l0RE9NQXJyYXkqIHR4eCkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5faWZfZmFpbChmaXJzdCk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh0eCk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChzZWNvbmQpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHh4KTsKKyAg
ICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRfZmlyc3QgPSBOVUxM
OworICAgIGlmIChmaXJzdCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9maXJzdCA9IFdl
YktpdDo6Y29yZShmaXJzdCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2Zp
cnN0KTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHggPSBOVUxMOwor
ICAgIGlmICh0eCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF90eCA9IFdlYktpdDo6Y29y
ZSh0eCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3R4KTsKKyAgICB9Cisg
ICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3NlY29uZCA9IE5V
TEw7CisgICAgaWYgKHNlY29uZCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9zZWNvbmQg
PSBXZWJLaXQ6OmNvcmUoc2Vjb25kKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0
ZWRfc2Vjb25kKTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHh4ID0g
TlVMTDsKKyAgICBpZiAodHh4ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3R4eCA9IFdl
YktpdDo6Y29yZSh0eHgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90eHgp
OworICAgIH0KKyAgICBpdGVtLT5tdWx0aVRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZmlyc3QsIGNv
bnZlcnRlZF90eCwgY29udmVydGVkX3NlY29uZCwgY29udmVydGVkX3R4eCk7CisjZWxzZQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotICAgIHJldHVybiAg
V0VCS0lUX0RPTV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRfVkFMVUVfSU5URVJG
QUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29y
ZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7CitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUqCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNl
X2dldF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBz
ZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
dmFsdWUoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lU
X1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CisjZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwogfQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSog
dmFsdWUpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92
YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVk
X3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRWYWx1ZShjb252ZXJ0ZWRfdmFs
dWUpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikK
KyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9
CisKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRvbmx5X3ZhbHVlKFdlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCit7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFkb25seVZhbHVlKCkpOwor
ICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKworV2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3Zh
bHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMg
PSBXVEY6OmdldFB0cihpdGVtLT5jYWNoZWRWYWx1ZSgpKTsKKyAgICBXZWJLaXRET01TZXJpYWxp
emVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1
cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X2NhY2hlZF92YWx1ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIHZhbHVlKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBj
b252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAg
IGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0Q2FjaGVkVmFs
dWUoY29udmVydGVkX3ZhbHVlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMiIpCiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCit3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRf
cmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0
ZW0tPmNhY2hlZFJlYWRvbmx5VmFsdWUoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsK
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIp
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisgICAg
cmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25k
aXRpb24yKSAqLworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaApp
bmRleCA4MmU3OWEyNmYxN2Y3Y2U2YjYzNWMzN2Q5ZjI1ZDI3MjQ0ZjNmYjdkLi4zNTMzYzI2ODFj
NWE1M2M2MmExMTc1M2FkZWM1OGU1YTc1YTc4ZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKgogICAgIHdyYXBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UgKmNvcmVPYmplY3QpOwpAQCAtMzYsNCArMzksNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNlbmRpZiAvKiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCisKICNlbmRpZiAvKiBXRUJfS0lUX0RP
TV9URVNUX1NFUklBTElaRURfU0NSSVBUX1ZBTFVFX0lOVEVSRkFDRV9QUklWQVRFX0ggKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133536</attachid>
            <date>2012-03-23 12:39:48 -0700</date>
            <delta_ts>2012-03-23 14:46:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80030-20120323203947.patch</filename>
            <type>text/plain</type>
            <size>260808</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExODg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmIzNGUwNGMzZGJmZGQz
ZGRkYzE4OWFmOTM5Y2UwODEwYWQ0ZmFmYy4uMDI4OGFkNDVmNjJlYTRiMWFkZDJiMGM2N2NhYmUz
OTE1MDg5MTEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAxMi0wMy0yMyAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJp
bmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVkIHdpdGggdGhl
ICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZXMgaW4gQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAg
ICAgIC0gZ3JvdXAgaW1wbGVtZW50YXRpb24gb2YgcHJpdmF0ZSBoZWxwZXJzIGFuZCBndWFyZCB0
aGVtIGluc2lkZQorICAgICAgICBhbiBpZmRlZiBpZiBhIHJvb3QgY29uZGl0aW9uYWwgYXR0cmli
dXRlIGlzIHByZXNlbnQuCisgICAgICAgIC0gYWx3YXlzIGRlZmluZSB0aGUgdHlwZSBvZiBhIEdP
YmplY3QgYmluZGluZywgZXZlbiBpZiB0aGUgcm9vdAorICAgICAgICBjb25kaXRpb25hbCBmZWF0
dXJlIGlzIG5vdCBlbmFibGVkCisgICAgICAgIC0gdGhlIG1ldGhvZHMgYXJlIGdlbmVyYXRlZCBh
cyB3ZWxsLCBidXQgYXJlIHNpbXBseSBzdHVicyBpZiB0aGUKKyAgICAgICAgZmVhdHVyZSBpcyBu
b3QgZW5hYmxlZCwgdGhyb3dpbmcgYSB3YXJuaW5nIHVwb24gaW50ZXJhY3Rpb24uCisgICAgICAg
IC0gaWYgdGhlIG1ldGhvZCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBhIGNvbmRpdGlvbmFsIGF0dHJp
YnV0ZSwKKyAgICAgICAgdGhlIHN0dWIgaW1wbGVtZW50YXRpb24gZ2FpbnMgb25lIG1vcmUgbGV2
ZWwgb2YgZGVwdGgsIHRocm93aW5nCisgICAgICAgIGEgd2FybmluZyBpZiB0aGUgbWV0aG9kJ3Mg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorICAgICAgICBidXQgdGhlIHJvb3Qg
Y29uZGl0aW9uYWwgZmVhdHVyZSBpcy4KKyAgICAgICAgLSBzbWFsbCBzdHlsZSBmaXhlcyBpbiBy
YW5kb20gcGxhY2VzLgorCisgICAgICAgIEFsc28gY2hhbmdlZCBhcmUgR09iamVjdCBiYXNlbGlu
ZXMgZm9yIGJpbmRpbmcgdGVzdHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gbm8gbmV3IHRl
c3RhYmxlIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L0dOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmpl
Y3QucG06CisgICAgICAgIChIdW1hblJlYWRhYmxlQ29uZGl0aW9uYWwpOgorICAgICAgICAoR2Vu
ZXJhdGVDb25kaXRpb25hbFdhcm4pOgorICAgICAgICAoR2VuZXJhdGVQcm9wZXJ0eSk6CisgICAg
ICAgIChHZW5lcmF0ZVByb3BlcnRpZXMpOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbik6Cisg
ICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9ucyk6CisgICAgICAgIChHZW5lcmF0ZUNGaWxlKToKKyAg
ICAgICAgKEdlbmVyYXRlRXZlbnRUYXJnZXRJZmFjZSk6CisgICAgICAgIChHZW5lcmF0ZSk6Cisg
ICAgICAgIChXcml0ZURhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTUZsb2F0NjRBcnJheS5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwRmxvYXQ2NEFycmF5KToKKyAg
ICAgICAgKHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9kb21fZmxvYXQ2NGFycmF5X2Zvbyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdl
YktpdDo6d3JhcFRlc3RBY3RpdmVET01PYmplY3QpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9leGNpdGluZ19mdW5jdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcG9zdF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9hY3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVj
dFByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0Q2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OndyYXBU
ZXN0Q2FsbGJhY2spOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vX3Bh
cmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Ns
YXNzMXBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193
aXRoX2NsYXNzMnBhcmFtKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxs
YmFja193aXRoX25vbl9ib29sX3JldHVybl90eXBlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Omtp
dCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZmluYWxpemUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3Ry
dWN0b3JfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVj
dG9yX2dldF9hdHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfY29uc3RydWN0
b3JfZ2V0X2F0dHIyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6
OndyYXBUZXN0RXZlbnRUYXJnZXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3Rh
cmdldF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0
ZW0pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9kaXNwYXRjaF9ldmVu
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50VGFyZ2V0UHJpdmF0ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChX
ZWJLaXQ6OndyYXBUZXN0SW50ZXJmYWNlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2VfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zdXBw
bGVtZW50YWxfbWV0aG9kMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1
cHBsZW1lbnRhbF9tZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
c3VwcGxlbWVudGFsX21ldGhvZDQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVyZmFj
ZV9nZXRfc3VwcGxlbWVudGFsX3N0cjEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2ludGVy
ZmFjZV9nZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0cjIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9nZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9tZWRpYV9xdWVyeV9saXN0X2xpc3RlbmVyX2Zp
bmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2Vi
S2l0Ojp3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X25hbWVkX2NvbnN0cnVjdG9yX2ZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvclByaXZhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdE9iaik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9k
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfdm9pZF9tZXRob2Rfd2l0aF9hcmdzKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZCk6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfb2JqX21ldGhvZCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX29i
al9tZXRob2Rfd2l0aF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfc2VxdWVuY2VfYXJnKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NlcmlhbGl6ZWRfdmFsdWUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9pZGJfa2V5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3Qp
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9leGNlcHRpb24pOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV92b2lkKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24p
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhj
ZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21f
dGVzdF9vYmpfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9v
YmpfZXhjZXB0aW9uKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdfYW5kX29w
dGlvbmFsX2FyZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25v
bl9vcHRpb25hbF9hcmdfYW5kX3R3b19vcHRpb25hbF9hcmdzKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfc3RyaW5nX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmlu
Z19pc19udWxsX3N0cmluZyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlv
bmFsX21ldGhvZDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9jb25kaXRpb25hbF9t
ZXRob2QyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9k
Myk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZCk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX29wdGlvbmFsKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfY29udmVydDEpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29i
al9jb252ZXJ0Mik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9jb252ZXJ0NSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX211dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9pbW11dGFi
bGVfcG9pbnRfZnVuY3Rpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcmFuZ2Up
OgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24pOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVhZF9vbmx5X2ludF9hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cik6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWFkX29ubHlfdGVzdF9vYmpfYXR0cik6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9nZXRfdW5zaWduZWRfc2hvcnRfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X2ludF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9h
dHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9uZ19hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19hdHRyKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Rlc3Rfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF94bWxfb2JqX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfeG1sX29i
al9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cik6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfaW50ZWdyYWxfYXR0cik6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50
ZWdyYWxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Ym9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF9ib29sZWFuX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX3VybF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3Rl
ZF91cmxfYXR0cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
Y3VzdG9tX2ludGVncmFsX2F0dHIpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRf
cmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fYm9vbGVhbl9hdHRyKToKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0
cik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0
dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dp
dGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9h
dHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKToKKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpbmdfYXR0cl93
aXRoX3NldHRlcl9leGNlcHRpb24pOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRf
d2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9zZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hdHRy
aWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2Ny
aXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Njcmlw
dF9zdGF0ZV9hdHRyaWJ1dGUpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0
aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2Nv
bnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3Jp
cHRfc3RhdGVfYXR0cmlidXRlX3JhaXNlcyk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhf
c3BhY2VzX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRo
X3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9h
dHRyMSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRy
MSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMik6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMik6Cisg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMyk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250ZW50X2RvY3VtZW50KToKKyAgICAgICAgKHdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X211dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfbXV0YWJsZV9wb2ludCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9pbW11dGFibGVfcG9pbnQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfaW1tdXRhYmxlX3BvaW50KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0
cmljdF9mbG9hdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJpY3RfZmxv
YXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfZGVzY3JpcHRpb24pOgorICAg
ICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9zZXRfaWQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfaGFzaCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
alByaXZhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgor
ICAgICAgICAoV2ViS2l0Ojp3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJm
YWNlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QpOgorICAgICAgICAod2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zl
cl9saXN0KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0X3ZhbHVlKToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRvbmx5X3Zh
bHVlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X2NhY2hlZF92YWx1ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX3NldF9jYWNoZWRfdmFsdWUpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
Y2FjaGVkX3JlYWRvbmx5X3ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0
ZS5oOgorCiAyMDEyLTAzLTIzICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc4ODM5ODc+IEFTU0VSVElPTiBGQUlMRUQ6IEFTU0VSVChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0RW5kVGltZXJGaXJlZCB8fCBpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0UGxheVN0YXRlUGF1c2VkKSBpbiBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUgY2F1c2luZyBtdWx0aXBsZSAiY3Jhc2hlcyIgb24gTGlvbiBJbnRlbCBEZWJ1
ZyBXZWJLaXQgdGVzdGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDg5ZjNhOWFhMzg5YzI2YzI5Mzhj
NjNlZDc4OTc4NzNmOThjNjEzZTAuLmFkMTNmMGQ4NzA3MDliN2NkYjc0YWM0NjU4NTgwOWU1Yzlj
ODAzZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0yMyAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorCisgICAgICAgIFtHT2JqZWN0IGJp
bmRpbmdzXSBTdXBwbGVtZW50YWwgaW50ZXJmYWNlcyBhcmUgbm90IGRpc2FibGVkIHdpdGggdGhl
ICJDb25kaXRpb25hbCIgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04MDAzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBhIHByaXZhdGUgbWFjcm8gdGhhdCBjYW4gYmUgdXNlZCB3aGVu
IG5lY2Vzc2FyeSB0byB0aHJvdyBhIHdhcm5pbmcKKyAgICAgICAgYWJvdXQgYSBmdXR1cmUgbm90
IGVuYWJsZWQgYXQgY29tcGlsZS10aW1lLgorCisgICAgICAgICogd2Via2l0L3dlYmtpdGdsb2Jh
bHNwcml2YXRlLmg6CisKIDIwMTItMDMtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBhIHdheSB0byBleHBvc2Ugd2VsbCBr
bm93biBuYW1lcyBmb3IgaXRlbXMgaW4gdGhlIGRlZmF1bHQgY29udGV4dCBtZW51CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9HTlVtYWtlZmlsZS5hbQppbmRleCBhNTEyODBm
OTU4MWQwNzhlNjUwZGQ1ZWExNzljNjM5NmVhYjVlYzUxLi42NjBiNzhhMzJjMTVmMjhiZjExYTJl
NjY1YjA5MDRkYzdmNzA4Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dvYmpl
Y3QvR05VbWFrZWZpbGUuYW0KQEAgLTY2LDYgKzY2LDggQEAgd2Via2l0Z3RrX2dkb21fYnVpbHRf
c291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZpbGVMaXN0LmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUZpbGVMaXN0UHJpdmF0ZS5oIFwK
IAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NRmlsZVByaXZhdGUuaCBcCisJRGVyaXZl
ZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uLmNwcCBcCisJRGVyaXZlZFNvdXJj
ZXMvd2Via2l0L1dlYktpdERPTUdlb2xvY2F0aW9uUHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291cmNl
cy93ZWJraXQvV2ViS2l0RE9NSGlzdG9yeS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9X
ZWJLaXRET01IaXN0b3J5UHJpdmF0ZS5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0
RE9NSFRNTEFuY2hvckVsZW1lbnQuY3BwIFwKQEAgLTI5Myw2ICsyOTUsNyBAQCB3ZWJraXRndGtf
YnVpbHRfaF9hcGkgKz0gXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01CbG9iLmgg
XAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01GaWxlLmggXAogCURlcml2ZWRTb3Vy
Y2VzL3dlYmtpdC9XZWJLaXRET01GaWxlTGlzdC5oIFwKKwlEZXJpdmVkU291cmNlcy93ZWJraXQv
V2ViS2l0RE9NR2VvbG9jYXRpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50LmggXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC9XZWJLaXRET01I
VE1MQXBwbGV0RWxlbWVudC5oIFwKIAlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NSFRN
TEFyZWFFbGVtZW50LmggXApAQCAtMzg2LDE0ICszODksNiBAQCB3ZWJraXRndGtfYnVpbHRfaF9h
cGkgKz0gXAogCURlcml2ZWRTb3VyY2VzL3dlYmtpdC93ZWJraXRkb20uaCBcCiAJRGVyaXZlZFNv
dXJjZXMvd2Via2l0L3dlYmtpdGRvbWRlZmluZXMuaAogCi1pZiBFTkFCTEVfR0VPTE9DQVRJT04K
LXdlYmtpdGd0a19idWlsdF9oX2FwaSArPSBcCi0JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3Vy
Y2VzL3dlYmtpdC9XZWJLaXRET01HZW9sb2NhdGlvbi5oCi13ZWJraXRndGtfZ2RvbV9idWlsdF9z
b3VyY2VzICs9IFwKLQlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NR2VvbG9jYXRpb24u
Y3BwIFwKLQlEZXJpdmVkU291cmNlcy93ZWJraXQvV2ViS2l0RE9NR2VvbG9jYXRpb25Qcml2YXRl
LmgKLWVuZGlmCi0KIGlmIEVOQUJMRV9WSURFTwogd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwK
IAkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUhUTUxBdWRp
b0VsZW1lbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQppbmRleCAyMTEzNGQ0N2I1YzBkYmFjNTcwZDcyMjA4
YzdkYWM2ZWJlZWQyZjJkLi44NDRmYWM4YWNlYjkwY2JlNDgwNDY0MDhlYjZiMzg3ODJhZWRlZDZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckdPYmplY3QucG0KQEAgLTExNCw2ICsxMTQsMjEgQEAgc3ViIEZpeFVwRGVjYW1lbGl6
ZWROYW1lIHsKICAgICByZXR1cm4gJGNsYXNzbmFtZTsKIH0KIAorc3ViIEh1bWFuUmVhZGFibGVD
b25kaXRpb25hbCB7CisgICAgbXkgQGNvbmRpdGlvbmFsID0gc3BsaXQoJ18nLCBzaGlmdCk7Cisg
ICAgbXkgQHVwcGVyQ2FzZUV4Y2VwdGlvbnMgPSAoIlNRTCIsICJBUEkiKTsKKyAgICBteSBAaHVt
YW5SZWFkYWJsZTsKKworICAgIGZvciAkcGFydCAoQGNvbmRpdGlvbmFsKSB7CisgICAgICAgIGlm
ICghZ3JlcCB7JF8gZXEgJHBhcnR9IEB1cHBlckNhc2VFeGNlcHRpb25zKSB7CisgICAgICAgICAg
ICAkcGFydCA9IGNhbWVsaXplKGxjKCRwYXJ0KSk7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChA
aHVtYW5SZWFkYWJsZSwgJHBhcnQpOworICAgIH0KKworICAgIHJldHVybiBqb2luKCcgJywgQGh1
bWFuUmVhZGFibGUpOworfQorCiBzdWIgQ2xhc3NOYW1lVG9HT2JqZWN0VHlwZSB7CiAgICAgbXkg
JGNsYXNzTmFtZSA9IHNoaWZ0OwogICAgIG15ICRDTEFTU19OQU1FID0gdWMoZGVjYW1lbGl6ZSgk
Y2xhc3NOYW1lKSk7CkBAIC0zNDQsNiArMzU5LDMyIEBAIHN1YiBHZW5lcmF0ZUNvbmRpdGlvbmFs
U3RyaW5nCiAgICAgfQogfQogCitzdWIgR2VuZXJhdGVDb25kaXRpb25hbFdhcm4KK3sKKyAgICBt
eSAkbm9kZSA9IHNoaWZ0OworICAgIG15ICRjb25kaXRpb25hbCA9ICRub2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifTsKKyAgICBteSBAd2FybjsKKworICAgIGlmICgkY29u
ZGl0aW9uYWwpIHsKKyAgICAgICAgaWYgKCRjb25kaXRpb25hbCA9fiAvJi8pIHsKKyAgICAgICAg
ICAgIG15IEBzcGxpdENvbmRpdGlvbmFscyA9IHNwbGl0KC8mLywgJGNvbmRpdGlvbmFsKTsKKyAg
ICAgICAgICAgIGZvcmVhY2ggJGNvbmRpdGlvbiAoQHNwbGl0Q29uZGl0aW9uYWxzKSB7CisgICAg
ICAgICAgICAgICAgcHVzaChAd2FybiwgIiNpZiAhRU5BQkxFKCRjb25kaXRpb24pXG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEB3YXJuLCAiICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoXCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb24pIC4gIlwiKVxu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAd2FybiwgIiNlbmRpZlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzaWYgKCRjb25kaXRpb25hbCA9fiAvXHwvKSB7CisgICAgICAgICAg
ICBmb3JlYWNoICRjb25kaXRpb24gKHNwbGl0KC9cfC8sICRjb25kaXRpb25hbCkpIHsKKyAgICAg
ICAgICAgICAgICBwdXNoKEB3YXJuLCAiICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNF
TlQoXCIiIC4gSHVtYW5SZWFkYWJsZUNvbmRpdGlvbmFsKCRjb25kaXRpb24pIC4gIlwiKVxuIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEB3YXJu
LCAiICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoXCIiIC4gSHVtYW5SZWFkYWJs
ZUNvbmRpdGlvbmFsKCRjb25kaXRpb25hbCkgLiAiXCIpXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBAd2FybjsKK30KKwogc3ViIEdlbmVyYXRlUHJvcGVydHkgewogICAgIG15
ICRhdHRyaWJ1dGUgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwpAQCAt
MzU4LDkgKzM5OSw5IEBAIHN1YiBHZW5lcmF0ZVByb3BlcnR5IHsKICAgICBteSAkcHJvcE5hbWVD
YXBzID0gdWMoJHByb3BOYW1lKTsKICAgICAkcHJvcE5hbWUgPX4gcy9fLy0vZzsKICAgICBteSAk
e3Byb3BFbnVtfSA9ICJQUk9QXyR7cHJvcE5hbWVDYXBzfSI7Ci0gICAgcHVzaChAY0JvZHlQcml2
LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7Ci0g
ICAgcHVzaChAY0JvZHlQcml2LCAiICAgICR7cHJvcEVudW19LFxuIik7Ci0gICAgcHVzaChAY0Jv
ZHlQcml2LCAiI2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAiI2lmICR7Y29uZGl0aW9u
YWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHVzaChAY0JvZHlQcm9w
ZXJ0aWVzLCAiICAgICR7cHJvcEVudW19LFxuIik7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVz
LCAiI2VuZGlmIC8qICR7Y29uZGl0aW9uYWxTdHJpbmd9ICovXG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiAKICAgICBteSAkcHJvcFR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7
CiAgICAgbXkgJHtwcm9wR1R5cGV9ID0gZGVjYW1lbGl6ZSgkcHJvcFR5cGUpOwpAQCAtNDg2LDYg
KzUyNywxNCBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzIHsKICAgICBteSAkY2xzQ2FwcyA9IHN1
YnN0cihDbGFzc05hbWVUb0dPYmplY3RUeXBlKCRjbGFzc05hbWUpLCAxMik7CiAgICAgbXkgJGxv
d2VyQ2FzZUlmYWNlTmFtZSA9ICJ3ZWJraXRfZG9tXyIgLiAoRml4VXBEZWNhbWVsaXplZE5hbWUo
ZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkpKTsKIAorICAgIG15ICRjb25kaXRpb25HdWFyZFN0
YXJ0ID0gIiI7CisgICAgbXkgJGNvbmRpdGlvbkd1YXJkRW5kID0gIiI7CisgICAgbXkgJGNvbmRp
dGlvbmFsU3RyaW5nID0gR2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkZGF0YU5vZGUpOworICAg
IGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKKyAgICAgICAgJGNvbmRpdGlvbkd1YXJkU3RhcnQg
PSAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9IjsKKyAgICAgICAgJGNvbmRpdGlvbkd1YXJkRW5k
ID0gIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfSI7CisgICAgfQorCiAgICAgIyBQcm9w
ZXJ0aWVzCiAgICAgbXkgJGltcGxDb250ZW50ID0gIiI7CiAKQEAgLTQ5NCw3ICs1NDMsNyBAQCBz
dWIgR2VuZXJhdGVQcm9wZXJ0aWVzIHsKIGVudW0gewogICAgIFBST1BfMCwKIEVPRgotICAgIHB1
c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMs
ICRpbXBsQ29udGVudCk7CiAKICAgICBteSBAcmVhZGFibGVQcm9wZXJ0aWVzID0gR2V0UmVhZGFi
bGVQcm9wZXJ0aWVzKCRkYXRhTm9kZS0+YXR0cmlidXRlcyk7CiAKQEAgLTUxMSw3ICs1NjAsNyBA
QCBFT0YKICAgICAke2NsYXNzTmFtZX0qIHNlbGYgPSBXRUJLSVRfRE9NXyR7Y2xzQ2Fwc30ob2Jq
ZWN0KTsKICAgICAkcHJpdkZ1bmN0aW9uCiBFT0YKLSAgICBwdXNoKEB0eHRHZXRQcm9wcywgJHR4
dEdldFByb3ApOworICAgICAgICBwdXNoKEB0eHRHZXRQcm9wcywgJHR4dEdldFByb3ApOwogICAg
IH0KIAogICAgICR0eHRHZXRQcm9wID0gPDwgIkVPRiI7CkBAIC01NDgsNyArNTk3LDcgQEAgRU9G
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXNoKEBjQm9keVByaXYsICJ9O1xuXG4iKTsKKyAg
ICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICJ9O1xuXG4iKTsKIAogICAgICR0eHRHZXRQcm9wID0g
PDwgIkVPRiI7CiAgICAgZGVmYXVsdDoKQEAgLTU3Miw5ICs2MjEsOSBAQCBFT0YKICAgICAkIiA9
ICIiOwogCiAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7Ci0KIHN0YXRpYyB2b2lkICR7bG93
ZXJDYXNlSWZhY2VOYW1lfV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CiskY29uZGl0aW9u
R3VhcmRTdGFydAogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsK
QEAgLTU4NSw2ICs2MzQsNyBAQCBzdGF0aWMgdm9pZCAke2xvd2VyQ2FzZUlmYWNlTmFtZX1fZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3Qg
PSBOVUxMOwogICAgIH0KKyRjb25kaXRpb25HdWFyZEVuZAogCiAgICAgR19PQkpFQ1RfQ0xBU1Mo
JHtsb3dlckNhc2VJZmFjZU5hbWV9X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9
CkBAIC01OTYsNyArNjQ2LDcgQEAgc3RhdGljIHZvaWQgJHtsb3dlckNhc2VJZmFjZU5hbWV9X2Zp
bmFsaXplKEdPYmplY3QqIG9iamVjdCkKIHN0YXRpYyB2b2lkICR7bG93ZXJDYXNlSWZhY2VOYW1l
fV9jb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7CiBFT0YKLSAgICBwdXNoKEBjQm9keVBy
aXYsICRpbXBsQ29udGVudCk7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENvbnRl
bnQpOwogCiAgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CiBAdHh0SW5zdGFsbEV2ZW50TGlz
dGVuZXJzCkBAIC02MjEsNyArNjcxLDcgQEAgc3RhdGljIHZvaWQgJHtsb3dlckNhc2VJZmFjZU5h
bWV9X2luaXQoJHtjbGFzc05hbWV9KiByZXF1ZXN0KQogfQogCiBFT0YKLSAgICBwdXNoKEBjQm9k
eVByaXYsICRpbXBsQ29udGVudCk7CisgICAgcHVzaChAY0JvZHlQcm9wZXJ0aWVzLCAkaW1wbENv
bnRlbnQpOwogfQogCiBzdWIgR2VuZXJhdGVIZWFkZXIgewpAQCAtNzI1LDcgKzc3NSw3IEBAIHN1
YiBhZGRJbmNsdWRlSW5Cb2R5IHsKIH0KIAogc3ViIEdlbmVyYXRlRnVuY3Rpb24gewotICAgIG15
ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAkcHJlZml4KSA9IEBfOworICAg
IG15ICgkb2JqZWN0LCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uLCAkcHJlZml4LCAkcGFyZW50
Tm9kZSkgPSBAXzsKIAogICAgIG15ICRkZWNhbWVsaXplID0gRml4VXBEZWNhbWVsaXplZE5hbWUo
ZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkpOwogCkBAIC03NDIsNyArNzkyLDExIEBAIHN1YiBH
ZW5lcmF0ZUZ1bmN0aW9uIHsKICAgICBteSAkZnVuY3Rpb25OYW1lID0gIndlYmtpdF9kb21fIiAu
ICRkZWNhbWVsaXplIC4gIl8iIC4gJHByZWZpeCAuIGRlY2FtZWxpemUoJGZ1bmN0aW9uU2lnTmFt
ZSk7CiAgICAgbXkgJHJldHVyblR5cGUgPSBHZXRHbGliVHlwZU5hbWUoJGZ1bmN0aW9uU2lnVHlw
ZSk7CiAgICAgbXkgJHJldHVyblZhbHVlSXNHRE9NVHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkZnVu
Y3Rpb25TaWdUeXBlKTsKKwogICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmcoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOworICAgIG15ICRwYXJlbnRDb25k
aXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJHBhcmVudE5vZGUpOwor
ICAgIG15IEBjb25kaXRpb25hbFdhcm4gPSBHZW5lcmF0ZUNvbmRpdGlvbmFsV2FybigkZnVuY3Rp
b24tPnNpZ25hdHVyZSk7CisgICAgbXkgQHBhcmVudENvbmRpdGlvbmFsV2FybiA9IEdlbmVyYXRl
Q29uZGl0aW9uYWxXYXJuKCRwYXJlbnROb2RlKTsKIAogICAgIG15ICRmdW5jdGlvblNpZyA9ICIk
e2NsYXNzTmFtZX0qIHNlbGYiOwogCkBAIC04MTYsNiArODcwLDcgQEAgc3ViIEdlbmVyYXRlRnVu
Y3Rpb24gewogICAgIHB1c2goQGhCb2R5LCAiXG4iKTsKIAogICAgIHB1c2goQGNCb2R5LCAiJHJl
dHVyblR5cGVcbiRmdW5jdGlvbk5hbWUoJGZ1bmN0aW9uU2lnKVxue1xuIik7CisgICAgcHVzaChA
Y0JvZHksICIjaWYgJHtwYXJlbnRDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRwYXJlbnRDb25k
aXRpb25hbFN0cmluZzsKICAgICBwdXNoKEBjQm9keSwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogCiAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2
b2lkIikgewpAQCAtMTAxNywxNSArMTA3MiwyOSBAQCBFT0YKICAgICB9CiAKICAgICBpZiAoJGNv
bmRpdGlvbmFsU3RyaW5nKSB7CisgICAgICAgIHB1c2goQGNCb2R5LCAiI2Vsc2VcbiIpOworICAg
ICAgICBwdXNoKEBjQm9keSwgQGNvbmRpdGlvbmFsV2FybikgaWYgc2NhbGFyKEBjb25kaXRpb25h
bFdhcm4pOworICAgICAgICBpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiKSB7CisgICAgICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
JHtyZXR1cm5UeXBlfT4oMCk7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAY0JvZHksICIgICAgcmV0dXJuIE5VTEw7XG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBwdXNoKEBjQm9keSwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFs
U3RyaW5nfSAqL1xuIik7CisgICAgfQorCisgICAgaWYgKCRwYXJlbnRDb25kaXRpb25hbFN0cmlu
ZykgeworICAgICAgICBwdXNoKEBjQm9keSwgIiNlbHNlXG4iKTsKKyAgICAgICAgcHVzaChAY0Jv
ZHksIEBwYXJlbnRDb25kaXRpb25hbFdhcm4pIGlmIHNjYWxhcihAcGFyZW50Q29uZGl0aW9uYWxX
YXJuKTsKICAgICAgICAgaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgewotICAgICAgICAgICAg
cHVzaChAY0JvZHksICIjZWxzZVxuIik7CiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzTm9uUG9pbnRlclR5cGUoJGZ1bmN0aW9uU2lnVHlwZSkpIHsKICAgICAgICAgICAgICAgICBw
dXNoKEBjQm9keSwgIiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtyZXR1cm5UeXBlfT4oMCk7XG4i
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgcmV0dXJuIE5VTEw7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBw
dXNoKEBjQm9keSwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIikgaWYgJGNv
bmRpdGlvbmFsU3RyaW5nOworICAgICAgICBwdXNoKEBjQm9keSwgIiNlbmRpZiAvKiAke3BhcmVu
dENvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIik7CiAgICAgfQogCiAgICAgcHVzaChAY0JvZHksICJ9
XG5cbiIpOwpAQCAtMTA0Nyw3ICsxMTE2LDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25zIHsKICAg
ICBteSAoJG9iamVjdCwgJGludGVyZmFjZU5hbWUsICRkYXRhTm9kZSkgPSBAXzsKIAogICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9uKCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICIiKTsK
KyAgICAgICAgJG9iamVjdC0+R2VuZXJhdGVGdW5jdGlvbigkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0
aW9uLCAiIiwgJGRhdGFOb2RlKTsKICAgICB9CiAKICAgICBUT1A6CkBAIC0xMDgwLDcgKzExNDks
NyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbnMgewogICAgICAgICBteSAkZnVuY3Rpb24gPSBuZXcg
ZG9tRnVuY3Rpb24oKTsKICAgICAgICAgJGZ1bmN0aW9uLT5zaWduYXR1cmUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlKTsKICAgICAgICAgJGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zKCRhdHRyaWJ1
dGUtPmdldHRlckV4Y2VwdGlvbnMpOwotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9u
KCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJnZXRfIik7CisgICAgICAgICRvYmplY3QtPkdl
bmVyYXRlRnVuY3Rpb24oJGludGVyZmFjZU5hbWUsICRmdW5jdGlvbiwgImdldF8iLCAkZGF0YU5v
ZGUpOwogCiAgICAgICAgICMgRklYTUU6IFdlIGFyZSBub3QgZ2VuZXJhdGluZyBzZXR0ZXJzIGZv
ciAnUmVwbGFjZWFibGUnCiAgICAgICAgICMgYXR0cmlidXRlcyBub3csIGJ1dCB3ZSBzaG91bGQg
c29tZWhvdy4KQEAgLTExMDgsNyArMTE3Nyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9ucyB7CiAg
ICAgICAgIAogICAgICAgICAkZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnMoJGF0dHJpYnV0ZS0+
c2V0dGVyRXhjZXB0aW9ucyk7CiAgICAgICAgIAotICAgICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1
bmN0aW9uKCRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb24sICJzZXRfIik7CisgICAgICAgICRvYmpl
Y3QtPkdlbmVyYXRlRnVuY3Rpb24oJGludGVyZmFjZU5hbWUsICRmdW5jdGlvbiwgInNldF8iLCAk
ZGF0YU5vZGUpOwogICAgIH0KIH0KIApAQCAtMTEyNyw4ICsxMTk2LDEwIEBAIHN1YiBHZW5lcmF0
ZUNGaWxlIHsKICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKICR7ZGVmaW5lVHlwZU1hY3Jv
fSgke2NsYXNzTmFtZX0sICR7bG93ZXJDYXNlSWZhY2VOYW1lfSwgJHtwYXJlbnRHT2JqVHlwZX0k
e2RlZmluZVR5cGVJbnRlcmZhY2VJbXBsZW1lbnRhdGlvbn0KIAotbmFtZXNwYWNlIFdlYktpdCB7
CitFT0YKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICRpbXBsQ29udGVudCk7CiAKKyAgICAk
aW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIGNvcmUo
JHtjbGFzc05hbWV9KiByZXF1ZXN0KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVl
c3QsIDApOwpAQCAtMTEzOSwxNSArMTIxMCwxMyBAQCBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
KiBjb3JlKCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKICAgICByZXR1cm4gY29yZU9iamVjdDsKIH0K
IAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBFT0YKLQogICAgIHB1c2goQGNCb2R5UHJpdiwgJGlt
cGxDb250ZW50KTsKKwogICAgICRvYmplY3QtPkdlbmVyYXRlUHJvcGVydGllcygkaW50ZXJmYWNl
TmFtZSwgJGRhdGFOb2RlKTsKICAgICAkb2JqZWN0LT5HZW5lcmF0ZUZ1bmN0aW9ucygkaW50ZXJm
YWNlTmFtZSwgJGRhdGFOb2RlKTsKIAogICAgIG15ICR3cmFwTWV0aG9kID0gPDwgIkVPRiI7Ci1u
YW1lc3BhY2UgV2ViS2l0IHsKICR7Y2xhc3NOYW1lfSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2Vi
Q29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZU9iamVjdCkKIHsKICAgICBnX3JldHVybl92YWxf
aWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKQEAgLTExNjEsNyArMTIzMCw3IEBAICR7Y2xhc3NOYW1l
fSogd3JhcCR7aW50ZXJmYWNlTmFtZX0oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogY29yZU9i
amVjdCkKICAgICByZXR1cm4gIFdFQktJVF9ET01fJHtjbHNDYXBzfShnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NXyR7Y2xzQ2Fwc30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKIH0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCiBFT0YKICAgICBwdXNoKEBjQm9keVByaXYsICR3cmFwTWV0
aG9kKTsKIH0KQEAgLTEyMjksNyArMTI5OCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fZXZl
bnRfdGFyZ2V0X2luaXQoV2ViS2l0RE9NRXZlbnRUYXJnZXRJZmFjZSogaWZhY2UpCiAKIEVPRgog
Ci0gICAgcHVzaChAY0JvZHksICRpbXBsKTsKKyAgICBwdXNoKEBjQm9keVByb3BlcnRpZXMsICRp
bXBsKTsKIAogICAgICRkZWZpbmVUeXBlTWFjcm8gPSAiR19ERUZJTkVfVFlQRV9XSVRIX0NPREUi
OwogICAgICRkZWZpbmVUeXBlSW50ZXJmYWNlSW1wbGVtZW50YXRpb24gPSAiLCBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UoV0VCS0lUX1RZUEVfRE9NX0VWRU5UX1RBUkdFVCwgd2Via2l0X2RvbV9ldmVu
dF90YXJnZXRfaW5pdCkpIjsKQEAgLTEyNDIsMTEgKzEzMTEsNiBAQCBzdWIgR2VuZXJhdGUgewog
ICAgIG15ICRwYXJlbnRHT2JqVHlwZSA9IEdldFBhcmVudEdPYmpUeXBlKCRkYXRhTm9kZSk7CiAg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CiAKLSAgICAjIEFkZCB0aGUg
Z3VhcmQgaWYgdGhlICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlIGV4aXN0cwotICAg
IG15ICRjb25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFO
b2RlKTsKLSAgICBwdXNoKEBjb25kaXRpb25HdWFyZFN0YXJ0LCAiI2lmICR7Y29uZGl0aW9uYWxT
dHJpbmd9XG5cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKLSAgICBwdXNoKEBjb25kaXRpb25H
dWFyZEVuZCwgIiNlbmRpZiAvKiAke2NvbmRpdGlvbmFsU3RyaW5nfSAqL1xuIikgaWYgJGNvbmRp
dGlvbmFsU3RyaW5nOwotCiAgICAgIyBBZGQgdGhlIGRlZmF1bHQgaW1wbCBoZWFkZXIgdGVtcGxh
dGUKICAgICBAY1ByZWZpeCA9IHNwbGl0KCJcciIsICRsaWNlbmNlVGVtcGxhdGUpOwogICAgIHB1
c2goQGNQcmVmaXgsICJcbiIpOwpAQCAtMTI2Nyw4ICsxMzMxLDYgQEAgc3ViIEdlbmVyYXRlIHsK
IAogICAgIGlmICghVXNlc01hbnVhbEtpdEltcGxlbWVudGF0aW9uKCRpbnRlcmZhY2VOYW1lKSkg
ewogICAgICAgICBteSAkY29udmVydGVyID0gPDwgIkVPRiI7Ci1uYW1lc3BhY2UgV2ViS2l0IHsK
LSAgICAKICR7Y2xhc3NOYW1lfSoga2l0KFdlYkNvcmU6OiRpbnRlcmZhY2VOYW1lKiBvYmopCiB7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTEyNzgsMTEgKzEzNDAsOSBA
QCAke2NsYXNzTmFtZX0qIGtpdChXZWJDb3JlOjokaW50ZXJmYWNlTmFtZSogb2JqKQogCiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PCR7Y2xhc3NOYW1lfSo+KERPTU9iamVjdENhY2hlOjpwdXQob2Jq
LCBXZWJLaXQ6OndyYXAke2ludGVyZmFjZU5hbWV9KG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdCAvLwogCiBFT0YKLSAgICBwdXNoKEBjQm9keSwgJGNvbnZlcnRlcik7Cisg
ICAgcHVzaChAY0JvZHlQcml2LCAkY29udmVydGVyKTsKICAgICB9CiAKICAgICAkb2JqZWN0LT5H
ZW5lcmF0ZUhlYWRlcigkaW50ZXJmYWNlTmFtZSwgJHBhcmVudENsYXNzTmFtZSk7CkBAIC0xMzAx
LDYgKzEzNjEsOSBAQCBzdWIgV3JpdGVEYXRhIHsKICAgICBteSAkZ3VhcmQgPSB1YyhkZWNhbWVs
aXplKCRjbGFzc05hbWUpKSAuICJfUFJJVkFURV9IIjsKICAgICBteSAkcGFyZW50Q2xhc3NOYW1l
ID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7CiAKKyAgICAjIEFkZCB0aGUgZ3VhcmQg
aWYgdGhlICdDb25kaXRpb25hbCcgZXh0ZW5kZWQgYXR0cmlidXRlIGV4aXN0cworICAgIG15ICRj
b25kaXRpb25hbFN0cmluZyA9IEdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGRhdGFOb2RlKTsK
KwogICAgIG9wZW4oUFJJVkhFQURFUiwgIj4kZmlsZW5hbWUiKSBvciBkaWUgIkNvdWxkbid0IG9w
ZW4gZmlsZSAkZmlsZW5hbWUgZm9yIHdyaXRpbmciOwogCiAgICAgcHJpbnQgUFJJVkhFQURFUiBz
cGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKQEAgLTEzMTMsMTIgKzEzNzYsMTUgQEAgc3Vi
IFdyaXRlRGF0YSB7CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
JHtwYXJlbnRDbGFzc05hbWV9Lmg+CiAjaW5jbHVkZSAiJHtpbnRlcmZhY2VOYW1lfS5oIgorCiBF
T0YKIAogICAgIHByaW50IFBSSVZIRUFERVIgJHRleHQ7CisgICAgcHJpbnQgUFJJVkhFQURFUiAi
I2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICBw
cmludCBQUklWSEVBREVSIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWhk
clByb3BJbmNsdWRlcyk7CiAgICAgcHJpbnQgUFJJVkhFQURFUiAiXG4iIGlmIGtleXMoJWhkclBy
b3BJbmNsdWRlcyk7CiAgICAgJHRleHQgPSA8PCAiRU9GIjsKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAgICAgJHtjbGFzc05hbWV9ICoKICAgICB3cmFwJHtpbnRlcmZhY2VOYW1lfShXZWJDb3JlOjok
e2ludGVyZmFjZU5hbWV9ICpjb3JlT2JqZWN0KTsKQEAgLTEzNDIsOSArMTQwOCwxMCBAQCBFT0YK
ICAgICAkdGV4dCA9IDw8ICJFT0YiOwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZiAv
KiAke2d1YXJkfSAqLwogRU9GCiAgICAgcHJpbnQgUFJJVkhFQURFUiAkdGV4dDsKKyAgICBwcmlu
dCBQUklWSEVBREVSICIjZW5kaWYgLyogJHtjb25kaXRpb25hbFN0cmluZ30gKi9cblxuIiBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CisgICAgcHJpbnQgUFJJVkhFQURFUiAiI2VuZGlmIC8qICR7Z3Vh
cmR9ICovXG4iOwogCiAgICAgY2xvc2UoUFJJVkhFQURFUik7CiAKQEAgLTEzNzYsMTYgKzE0NDMs
MTkgQEAgRU9GCiAgICAgcHJpbnQgSU1QTCBAY1ByZWZpeDsKICAgICBwcmludCBJTVBMICIjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD5cbiI7CiAgICAgcHJpbnQgSU1QTCAiI2luY2x1ZGUgXCJjb25m
aWcuaFwiXG5cbiI7Ci0gICAgcHJpbnQgSU1QTCBAY29uZGl0aW9uR3VhcmRTdGFydDsKICAgICBw
cmludCBJTVBMICIjaW5jbHVkZSA8d3RmL0dldFB0ci5oPlxuIjsKICAgICBwcmludCBJTVBMICIj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPlxuIjsKICAgICBwcmludCBJTVBMIG1hcCB7ICIjaW5jbHVk
ZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWltcGxJbmNsdWRlcyk7CiAgICAgcHJpbnQgSU1QTCAi
XG4iIGlmIGtleXMoJWltcGxJbmNsdWRlcyk7Ci0gICAgcHJpbnQgSU1QTCBAY0JvZHk7CisgICAg
cHJpbnQgSU1QTCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwogCi0gICAgcHJpbnQgSU1QTCAiXG4iOworICAgIHByaW50IElNUEwgIm5hbWVzcGFj
ZSBXZWJLaXQge1xuXG4iOwogICAgIHByaW50IElNUEwgQGNCb2R5UHJpdjsKLSAgICBwcmludCBJ
TVBMIEBjb25kaXRpb25HdWFyZEVuZDsKKyAgICBwcmludCBJTVBMICJ9IC8vIG5hbWVzcGFjZSBX
ZWJLaXRcblxuIjsKKyAgICBwcmludCBJTVBMICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmlu
Z31cblxuIiBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CisKKyAgICBwcmludCBJTVBMIEBjQm9keVBy
b3BlcnRpZXM7CisgICAgcHJpbnQgSU1QTCBAY0JvZHk7CiAKICAgICBjbG9zZShJTVBMKTsKIApA
QCAtMTM5Nyw2ICsxNDY3LDcgQEAgRU9GCiAgICAgQGNQcmVmaXggPSAoKTsKICAgICBAY0JvZHkg
PSAoKTsKICAgICBAY0JvZHlQcml2ID0gKCk7CisgICAgQGNCb2R5UHJvcGVydGllcyA9ICgpOwog
fQogCiBzdWIgR2VuZXJhdGVJbnRlcmZhY2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZs
b2F0NjRBcnJheS5jcHAKaW5kZXggMzQwMzNkZTYyNWJjMjY4NDFlYTgyZjcwMDY2Y2Y2YTlkYmM3
ZTMyMy4uMmI2ZDA2ZjdjYWZhNTY5OTFhYWNmZmEyNDIzZGU1ODVjMjc1YzRjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
RmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXkuY3BwCkBAIC00MSw3ICs0MSw3IEBACiAj
aW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwog
V2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBraXQoV2ViQ29yZTo6RmxvYXQ2NEFycmF5KiBvYmopCiB7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTUxLDMwICs1MSw2IEBAIFdl
YktpdERPTUZsb2F0NjRBcnJheSoga2l0KFdlYkNvcmU6OkZsb2F0NjRBcnJheSogb2JqKQogCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTUZsb2F0NjRBcnJheSo+KERPTU9iamVjdENh
Y2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBGbG9hdDY0QXJyYXkob2JqKSkpOwogfQotICAgIAot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLVdlYktpdERPTUludDMyQXJyYXkqCi13ZWJraXRf
ZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiBzZWxmLCBXZWJLaXRE
T01GbG9hdDMyQXJyYXkqIGFycmF5KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpGbG9hdDY0QXJyYXkgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKGFycmF5LCAwKTsKLSAgICBXZWJDb3JlOjpGbG9hdDMyQXJyYXkgKiBj
b252ZXJ0ZWRfYXJyYXkgPSBOVUxMOwotICAgIGlmIChhcnJheSAhPSBOVUxMKSB7Ci0gICAgICAg
IGNvbnZlcnRlZF9hcnJheSA9IFdlYktpdDo6Y29yZShhcnJheSk7Ci0gICAgICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9hcnJheSwgMCk7Ci0gICAgfQotICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SW50MzJBcnJheT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5mb28oY29udmVy
dGVkX2FycmF5KSk7Ci0gICAgV2ViS2l0RE9NSW50MzJBcnJheSogcmVzID0gV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLQotR19ERUZJTkVfVFlQRShXZWJL
aXRET01GbG9hdDY0QXJyYXksIHdlYmtpdF9kb21fZmxvYXQ2NGFycmF5LCBXRUJLSVRfVFlQRV9E
T01fQVJSQVlfQlVGRkVSX1ZJRVcpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJDb3JlOjpG
bG9hdDY0QXJyYXkqIGNvcmUoV2ViS2l0RE9NRmxvYXQ2NEFycmF5KiByZXF1ZXN0KQogewpAQCAt
ODYsMTQgKzYyLDMxIEBAIFdlYkNvcmU6OkZsb2F0NjRBcnJheSogY29yZShXZWJLaXRET01GbG9h
dDY0QXJyYXkqIHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKK1dlYktpdERP
TUZsb2F0NjRBcnJheSogd3JhcEZsb2F0NjRBcnJheShXZWJDb3JlOjpGbG9hdDY0QXJyYXkqIGNv
cmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisK
KyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50
ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAgKiBpbiBhIEMtYWxs
b2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRo
ZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29yZU9iamVjdC0+cmVm
KCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fRkxPQVQ2NEFSUkFZKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9ET01fRkxPQVQ2NEFSUkFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTUZsb2F0
NjRBcnJheSwgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXksIFdFQktJVF9UWVBFX0RPTV9BUlJBWV9C
VUZGRVJfVklFVykKKwogZW51bSB7CiAgICAgUFJPUF8wLAogfTsKIAotCiBzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAg
ICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3Qp
OwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0xMDUsNiArOTgs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9maW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0K
IAorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfcGFyZW50X2Ns
YXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTUzLDE4ICsxNDcsMjAgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV9mbG9hdDY0YXJyYXlfaW5pdChXZWJLaXRET01GbG9hdDY0QXJyYXkq
IHJlcXVlc3QpCiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NRmxvYXQ2NEFy
cmF5KiB3cmFwRmxvYXQ2NEFycmF5KFdlYkNvcmU6OkZsb2F0NjRBcnJheSogY29yZU9iamVjdCkK
K1dlYktpdERPTUludDMyQXJyYXkqCit3ZWJraXRfZG9tX2Zsb2F0NjRhcnJheV9mb28oV2ViS2l0
RE9NRmxvYXQ2NEFycmF5KiBzZWxmLCBXZWJLaXRET01GbG9hdDMyQXJyYXkqIGFycmF5KQogewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2Fs
bCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2Ug
Y2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0
IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRj
aGluZyBkZXJlZigpLgotICAgICAqLwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0
dXJuICBXRUJLSVRfRE9NX0ZMT0FUNjRBUlJBWShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X0ZMT0FUNjRBUlJBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpGbG9hdDY0QXJyYXkgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGFycmF5LCAwKTsKKyAgICBXZWJDb3JlOjpG
bG9hdDMyQXJyYXkgKiBjb252ZXJ0ZWRfYXJyYXkgPSBOVUxMOworICAgIGlmIChhcnJheSAhPSBO
VUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9hcnJheSA9IFdlYktpdDo6Y29yZShhcnJheSk7Cisg
ICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZF9hcnJheSwgMCk7CisgICAgfQor
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW50MzJBcnJheT4gZ19yZXMgPSBXVEY6OmdldFB0cihp
dGVtLT5mb28oY29udmVydGVkX2FycmF5KSk7CisgICAgV2ViS2l0RE9NSW50MzJBcnJheSogcmVz
ID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7CiB9Ci19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFycmF5UHJpdmF0ZS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NRmxvYXQ2NEFy
cmF5UHJpdmF0ZS5oCmluZGV4IGIwZWM2MTRmMmJjZjFlZjlhNjBkZDM2YjA4Y2EzYTNhOTgxNTZl
NWUuLmMyYTdmNzc3MDU0MjkwZmQ5YmE1MTllZTg3MTYzYWY1ZGUwNzQ1ZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTUZs
b2F0NjRBcnJheVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01GbG9hdDY0QXJyYXlQcml2YXRlLmgKQEAgLTI0LDYgKzI0
LDggQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRE
T01BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlICJGbG9hdDY0QXJyYXkuaCIKKworCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01GbG9hdDY0QXJyYXkgKgogICAgIHdyYXBGbG9h
dDY0QXJyYXkoV2ViQ29yZTo6RmxvYXQ2NEFycmF5ICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYzkzYTky
Y2Q5ZjRmODFkODc4MDZlOWQ1MDMwZjFjMDdlZDA1ZTMwMS4uNzE1MDJjNThmZDlmM2IzNjEzNTAz
MWJjYjNmNzJjOWMyODRiMDFmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJ3ZWJr
aXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotICAgIAorCiBXZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0KiBraXQoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogb2JqKQog
ewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00OCw0OSArNDgsNiBAQCBX
ZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiBraXQoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9i
amVjdCogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RBY3RpdmVE
T01PYmplY3QqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEFjdGl2
ZURPTU9iamVjdChvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5nX2Z1bmN0aW9u
KFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktpdERPTU5vZGUqIG5leHRf
Y2hpbGQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVj
dCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChuZXh0
X2NoaWxkKTsKLSAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVkX25leHRfY2hpbGQgPSBOVUxM
OwotICAgIGlmIChuZXh0X2NoaWxkICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX25leHRf
Y2hpbGQgPSBXZWJLaXQ6OmNvcmUobmV4dF9jaGlsZCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX25leHRfY2hpbGQpOwotICAgIH0KLSAgICBpdGVtLT5leGNpdGluZ0Z1bmN0
aW9uKGNvbnZlcnRlZF9uZXh0X2NoaWxkKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0X3Bvc3RfbWVzc2FnZShXZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0
KiBzZWxmLCBjb25zdCBnY2hhciogbWVzc2FnZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKG1lc3NhZ2UpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9t
ZXNzYWdlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpOwotICAgIGl0ZW0tPnBvc3RN
ZXNzYWdlKGNvbnZlcnRlZF9tZXNzYWdlKTsKLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9h
Y3RpdmVfZG9tX29iamVjdF9nZXRfZXhjaXRpbmdfYXR0cihXZWJLaXRET01UZXN0QWN0aXZlRE9N
T2JqZWN0KiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
QWN0aXZlRE9NT2JqZWN0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyBy
ZXMgPSBpdGVtLT5leGNpdGluZ0F0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi0KLUdfREVG
SU5FX1RZUEUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCwgd2Via2l0X2RvbV90ZXN0X2Fj
dGl2ZV9kb21fb2JqZWN0LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKIAogV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCogY29yZShXZWJLaXRET01UZXN0
QWN0aXZlRE9NT2JqZWN0KiByZXF1ZXN0KQogewpAQCAtMTAyLDE1ICs1OSwzMiBAQCBXZWJDb3Jl
OjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3JlKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3Qq
IHJlcXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKK1dlYktpdERPTVRlc3RBY3Rp
dmVET01PYmplY3QqIHdyYXBUZXN0QWN0aXZlRE9NT2JqZWN0KFdlYkNvcmU6OlRlc3RBY3RpdmVE
T01PYmplY3QqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9i
amVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysr
IHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAg
KiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgp
IGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29y
ZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9BQ1RJVkVfRE9N
X09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQUNUSVZFX0RPTV9PQkpF
Q1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCwgd2Via2l0X2Rv
bV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCiBlbnVt
IHsKICAgICBQUk9QXzAsCiAgICAgUFJPUF9FWENJVElOR19BVFRSLAogfTsKIAotCiBzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZmluYWxpemUoR09iamVjdCog
b2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RP
TV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkg
ewpAQCAtMTIyLDYgKzk2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9k
b21fb2JqZWN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgZG9tX29iamVjdC0+
Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQogCisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKIH0KIApAQCAtMTg2LDE4ICsxNjEsMzkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X2FjdGl2ZV9kb21fb2JqZWN0X2luaXQoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCoKIHsK
IH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0KiB3
cmFwVGVzdEFjdGl2ZURPTU9iamVjdChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2JqZWN0KiBjb3Jl
T2JqZWN0KQordm9pZAord2Via2l0X2RvbV90ZXN0X2FjdGl2ZV9kb21fb2JqZWN0X2V4Y2l0aW5n
X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RBY3RpdmVET01PYmplY3QqIHNlbGYsIFdlYktpdERPTU5v
ZGUqIG5leHRfY2hpbGQpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwg
MCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChuZXh0X2NoaWxk
KTsKKyAgICBXZWJDb3JlOjpOb2RlICogY29udmVydGVkX25leHRfY2hpbGQgPSBOVUxMOworICAg
IGlmIChuZXh0X2NoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX25leHRfY2hpbGQg
PSBXZWJLaXQ6OmNvcmUobmV4dF9jaGlsZCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29u
dmVydGVkX25leHRfY2hpbGQpOworICAgIH0KKyAgICBpdGVtLT5leGNpdGluZ0Z1bmN0aW9uKGNv
bnZlcnRlZF9uZXh0X2NoaWxkKTsKK30KIAotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRo
YW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysr
IG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUg
dGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAg
ICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9hY3Rp
dmVfZG9tX29iamVjdF9wb3N0X21lc3NhZ2UoV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCog
c2VsZiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5faWZfZmFpbChtZXNzYWdlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfbWVz
c2FnZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKTsKKyAgICBpdGVtLT5wb3N0TWVz
c2FnZShjb252ZXJ0ZWRfbWVzc2FnZSk7Cit9CiAKLSAgICByZXR1cm4gIFdFQktJVF9ET01fVEVT
VF9BQ1RJVkVfRE9NX09CSkVDVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQUNU
SVZFX0RPTV9PQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK2dsb25nCit3ZWJraXRf
ZG9tX3Rlc3RfYWN0aXZlX2RvbV9vYmplY3RfZ2V0X2V4Y2l0aW5nX2F0dHIoV2ViS2l0RE9NVGVz
dEFjdGl2ZURPTU9iamVjdCogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2xvbmcgcmVzID0gaXRlbS0+ZXhjaXRpbmdBdHRyKCk7CisgICAgcmV0dXJuIHJlczsKIH0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJp
dmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZhdGUuaAppbmRleCBmMjhjN2Y5ZDFlMDA2YmJh
YWIyZjcxOGJjZjY2NDE1OTA0MGY3MGQ3Li4yNWI1NDU1OGQwY2ViYmY4YjFiNTlhMGM5ZDcyYWNl
Y2NiYTEyNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0QWN0aXZlRE9NT2JqZWN0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RB
Y3RpdmVET01PYmplY3RQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRl
ICJUZXN0QWN0aXZlRE9NT2JqZWN0LmgiCisKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2Vi
S2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdCAqCiAgICAgd3JhcFRlc3RBY3RpdmVET01PYmplY3Qo
V2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdCAqY29yZU9iamVjdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
Q2FsbGJhY2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAppbmRleCBkYjdiYzVkYmNjMDFmMDA3NjA1NWQ0
OGNkNDlkMjI1NjNlZTBjMWRmLi40MTdmYzQ5ZmY1OTFjMGE1NTk3NWUzZTAxZjI1NmRkOTY4NzNj
NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKQEAgLTIx
LDggKzIxLDYgQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgImNvbmZpZy5o
IgogCi0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLQogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKQEAg
LTQ1LDggKzQzLDEwIEBACiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNs
dWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBraXQoV2ViQ29y
ZTo6VGVzdENhbGxiYWNrKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAw
KTsKQEAgLTU2LDIyICs1NiwxMjMgQEAgV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBraXQoV2ViQ29y
ZTo6VGVzdENhbGxiYWNrKiBvYmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9N
VGVzdENhbGxiYWNrKj4oRE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RD
YWxsYmFjayhvYmopKSk7CiB9CisKK1dlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZShXZWJLaXRE
T01UZXN0Q2FsbGJhY2sqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVx
dWVzdCwgMCk7CisKKyAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7
CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworV2ViS2l0RE9NVGVzdENhbGxiYWNrKiB3
cmFwVGVzdENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZU9iamVjdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIC8qIFdlIGNhbGwg
cmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNh
bid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBz
dHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0Y2hp
bmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKworICAgIHJldHVy
biAgV0VCS0lUX0RPTV9URVNUX0NBTExCQUNLKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01f
VEVTVF9DQUxMQkFDSywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0RE9NVGVzdENhbGxiYWNrLCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2ssIFdF
QktJVF9UWVBFX0RPTV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAgICBXZWJLaXRET01PYmplY3QqIGRvbV9v
YmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0IC8vCisgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3QpIHsKKyAgICAgICAgV2Vi
Q29yZTo6VGVzdENhbGxiYWNrKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVz
dENhbGxiYWNrICo+KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOworCisgICAgICAgIFdlYktpdDo6
RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKKyAgICAgICAgY29yZU9iamVjdC0+
ZGVyZWYoKTsKKworICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKworICAg
IGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfcGFyZW50X2NsYXNz
KS0+Y29uc3RydWN0ZWQpCisgICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9j
YWxsYmFja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0Q2Fs
bGJhY2tDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXplOworICAgIGdvYmplY3RD
bGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX3NldF9wcm9wZXJ0
eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9jYWxs
YmFja19nZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19jb25zdHJ1Y3RlZDsKKworCisKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2luaXQoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiByZXF1
ZXN0KQoreworfQogCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNr
X3dpdGhfbm9fcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmKQogeworI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CiAgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RD
YWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgZ2Jvb2xlYW4gcmVzID0g
aXRlbS0+Y2FsbGJhY2tXaXRoTm9QYXJhbSgpOwogICAgIHJldHVybiByZXM7CisjZWxzZQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIpCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKKyNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFC
QVNFKSAqLwogfQogCiBnYm9vbGVhbgogd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNr
X3dpdGhfY2xhc3MxcGFyYW0oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJLaXRET01D
bGFzczEqIGNsYXNzMXBhcmFtKQogeworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwogICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CkBAIC04MywxMSArMTg0LDE2IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFj
a19jYWxsYmFja193aXRoX2NsYXNzMXBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwK
ICAgICB9CiAgICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoQ2xhc3MxUGFyYW0o
Y29udmVydGVkX2NsYXNzMXBhcmFtKTsKICAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkg
Ki8KIH0KIAogZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRo
X2NsYXNzMnBhcmFtKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3My
KiBjbGFzczJwYXJhbSwgY29uc3QgZ2NoYXIqIHN0cl9hcmcpCiB7CisjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKICAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNr
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKQEAgLTEwMSwxMSArMjA3LDE2IEBAIHdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2NsYXNzMnBhcmFtKFdlYktpdERPTVRl
c3RDYWxsYmFjayogc2VsZiwKICAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChzdHJfYXJnKTsKICAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5j
YWxsYmFja1dpdGhDbGFzczJQYXJhbShjb252ZXJ0ZWRfY2xhc3MycGFyYW0sIGNvbnZlcnRlZF9z
dHJfYXJnKTsKICAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9v
bGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KIH0KIAogZ2xvbmcK
IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX25vbl9ib29sX3JldHVybl90
eXBlKFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NQ2xhc3MzKiBjbGFzczNw
YXJhbSkKIHsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwpA
QCAtMTE3LDExICsyMjgsMTYgQEAgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dp
dGhfbm9uX2Jvb2xfcmV0dXJuX3R5cGUoV2ViS2l0RE9NVGVzdENhbGxiYWMKICAgICB9CiAgICAg
Z2xvbmcgcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29udmVydGVk
X2NsYXNzM3BhcmFtKTsKICAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRBQkFTRSkgKi8KIH0KIAogZ2Jv
b2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3N0cmluZ19saXN0
KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgV2ViS2l0RE9NRE9NU3RyaW5nTGlzdCogbGlz
dF9wYXJhbSkKIHsKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOwogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKICAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwpAQCAtMTMzLDExMyArMjQ5LDI0IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFj
a193aXRoX3N0cmluZ19saXN0KFdlYktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwKICAgICB9CiAg
ICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+Y2FsbGJhY2tXaXRoU3RyaW5nTGlzdChjb252ZXJ0ZWRf
bGlzdF9wYXJhbSk7CiAgICAgcmV0dXJuIHJlczsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVB
VFVSRV9OT1RfUFJFU0VOVCgiU1FMIERhdGFiYXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKIGdi
b29sZWFuCiB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tfd2l0aF9ib29sZWFuKFdl
YktpdERPTVRlc3RDYWxsYmFjayogc2VsZiwgZ2Jvb2xlYW4gYm9vbF9wYXJhbSkKIHsKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwog
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBXZWJDb3JlOjpU
ZXN0Q2FsbGJhY2sgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIGdib29sZWFuIHJl
cyA9IGl0ZW0tPmNhbGxiYWNrV2l0aEJvb2xlYW4oYm9vbF9wYXJhbSk7CiAgICAgcmV0dXJuIHJl
czsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiU1FMIERhdGFi
YXNlIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2Jvb2xlYW4+KDApOworI2VuZGlmIC8qIEVO
QUJMRShTUUxfREFUQUJBU0UpICovCiB9CiAKLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0
Q2FsbGJhY2ssIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFjaywgV0VCS0lUX1RZUEVfRE9NX09CSkVD
VCkKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVdlYkNvcmU6OlRlc3RDYWxsYmFjayogY29yZShX
ZWJLaXRET01UZXN0Q2FsbGJhY2sqIHJlcXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwocmVxdWVzdCwgMCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVPYmplY3Qg
PSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqPihXRUJLSVRfRE9NX09CSkVDVChy
ZXF1ZXN0KS0+Y29yZU9iamVjdCk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVj
dCwgMCk7Ci0KLSAgICByZXR1cm4gY29yZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci1lbnVtIHsKLSAgICBQUk9QXzAsCi19OwotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21f
dGVzdF9jYWxsYmFja19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV2ViS2l0RE9N
T2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKLSAgICAKLSAg
ICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgewotICAgICAgICBXZWJDb3JlOjpUZXN0Q2Fs
bGJhY2sqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0Q2FsbGJhY2sgKj4o
ZG9tX29iamVjdC0+Y29yZU9iamVjdCk7Ci0KLSAgICAgICAgV2ViS2l0OjpET01PYmplY3RDYWNo
ZTo6Zm9yZ2V0KGNvcmVPYmplY3QpOwotICAgICAgICBjb3JlT2JqZWN0LT5kZXJlZigpOwotCi0g
ICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwotICAgIH0KLQotICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfc2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
X2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVj
dCkKLXsKLQotICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tf
cGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCi0gICAgICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2xhc3NfaW5pdChXZWJL
aXRET01UZXN0Q2FsbGJhY2tDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFz
cyAqZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2ZpbmFsaXplOwot
ICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNr
X3NldF9wcm9wZXJ0eTsKLSAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19nZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1
Y3RlZCA9IHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jb25zdHJ1Y3RlZDsKLQotCi0KLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2luaXQoV2ViS2l0RE9NVGVzdENh
bGxiYWNrKiByZXF1ZXN0KQotewotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRl
c3RDYWxsYmFjayogd3JhcFRlc3RDYWxsYmFjayhXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmVP
YmplY3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAg
ICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIg
YmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2Nh
dGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQot
ICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7
Ci0KLSAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9DQUxMQkFDSyhnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfRE9NX1RFU1RfQ0FMTEJBQ0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKLX0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2tQcml2YXRlLmgKaW5k
ZXggM2FkNmZmNDQ0MWE5YzA0YjZjYTUwMjBhNDdiNWRmMzBjOTZhNTA3ZS4uODk3ZDY2NGU1OTk3
NDBmMjk2MTYzZjAzYzJiYjQxMTVlOTBhODBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaApAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERPTU9iamVjdC5oPgogI2lu
Y2x1ZGUgIlRlc3RDYWxsYmFjay5oIgorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0RE9NVGVzdENhbGxiYWNrICoKICAgICB3cmFwVGVz
dENhbGxiYWNrKFdlYkNvcmU6OlRlc3RDYWxsYmFjayAqY29yZU9iamVjdCk7CkBAIC0zNiw0ICsz
OSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2Vu
ZGlmIC8qIEVOQUJMRShTUUxfREFUQUJBU0UpICovCisKICNlbmRpZiAvKiBXRUJfS0lUX0RPTV9U
RVNUX0NBTExCQUNLX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggZWE2NDhmNTY0NjcxNWE0ODY2ZDNk
MzA3ODYzMjY4MWNmMTgxYmIzNC4uMWZiNjI3YzQwNDcwNGE5MzRmNDNhOGJjMTkzY2M1OGU2ZDUy
ZTUxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5o
IgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiBraXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBvYmopCiB7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqLCAwKTsKQEAgLTQ2LDI0ICs0Niw2IEBAIFdlYktpdERP
TVRlc3RDdXN0b21OYW1lZEdldHRlcioga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRl
ciogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlcio+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rp
b24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3Ry
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwot
ICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3Ry
KTsKLSAgICBpdGVtLT5hbm90aGVyRnVuY3Rpb24oY29udmVydGVkX3N0cik7Ci19Ci0KLQotR19E
RUZJTkVfVFlQRShXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIsIHdlYmtpdF9kb21fdGVz
dF9jdXN0b21fbmFtZWRfZ2V0dGVyLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjb3JlKFdlYktp
dERPTVRlc3RDdXN0b21OYW1lZEdldHRlciogcmVxdWVzdCkKIHsKQEAgLTc1LDE0ICs1NywzMSBA
QCBXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKiByZXF1ZXN0KQogICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCitXZWJL
aXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHdyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoV2Vi
Q29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRo
ZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUg
YSBDKysgb2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4g
IFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigp
LgorICAgICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIsIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyLCBXRUJL
SVRfVFlQRV9ET01fT0JKRUNUKQorCiBlbnVtIHsKICAgICBQUk9QXzAsCiB9OwogCi0KIHN0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKIHsKKwogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJ
VF9ET01fT0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmpl
Y3QpIHsKQEAgLTk0LDYgKzkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3Rv
bV9uYW1lZF9nZXR0ZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgICAgICBkb21fb2Jq
ZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CiAKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7CiB9CiAKQEAgLTE0MiwxOCArMTQyLDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2luaXQoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVk
R2V0CiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1l
ZEdldHRlciogY29yZU9iamVjdCkKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRf
Z2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBz
ZWxmLCBjb25zdCBnY2hhciogc3RyKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVP
YmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMr
KyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0gICAg
ICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUo
KSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwotICAgIGNv
cmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfQ1VTVE9NX05B
TUVEX0dFVFRFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ1VTVE9NX05BTUVE
X0dFVFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9z
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKyAgICBpdGVtLT5hbm90aGVyRnVuY3Rp
b24oY29udmVydGVkX3N0cik7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJpdmF0
ZS5oCmluZGV4IGZlZGQxNGFmYzEyMmFkNzAwNjBmZDRlMGY3MjRlZjQ1ZTExNWFhZGEuLjU0ODM1
YTQzMDUxZTM1MjEyYzc4MmY2ZTk2ZmM4NWU1NjFhOGFmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21O
YW1lZEdldHRlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgKQEAg
LTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPHdlYmtp
dC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIK
KworCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIgKgogICAgIHdyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoV2ViQ29yZTo6VGVzdEN1c3RvbU5h
bWVkR2V0dGVyICpjb3JlT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCAzNzg4ZjE4NDQ2NDg0MGIyMmYzMzg1N2Qw
MTkxNzU4ZmQ2NjZhMGE3Li43ZjYyMzYyYTY3NTgyZjBkYTBiNTljMDMyYTYwNmQzZDQwZTljYmRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3Iq
IGtpdChXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3Rvciogb2JqKQogewogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC00NiwzMyArNDYsNiBAQCBXZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6OlRlc3RFdmVudENvbnN0cnVjdG9yKiBvYmopCiAK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqPihE
T01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3Io
b2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLWdjaGFyKgotd2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZl
bnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHIxKCkpOwotICAgIHJl
dHVybiByZXM7Ci19Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9y
X2dldF9hdHRyMihXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmF0dHIyKCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLQotR19ERUZJTkVfVFlQ
RShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciwgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2Nv
bnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
IAogV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdEV2ZW50
Q29uc3RydWN0b3IqIHJlcXVlc3QpCiB7CkBAIC04NCwxNiArNTcsMzMgQEAgV2ViQ29yZTo6VGVz
dEV2ZW50Q29uc3RydWN0b3IqIGNvcmUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IqIHJl
cXVlc3QpCiAgICAgcmV0dXJuIGNvcmVPYmplY3Q7CiB9CiAKK1dlYktpdERPTVRlc3RFdmVudENv
bnN0cnVjdG9yKiB3cmFwVGVzdEV2ZW50Q29uc3RydWN0b3IoV2ViQ29yZTo6VGVzdEV2ZW50Q29u
c3RydWN0b3IqIGNvcmVPYmplY3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9i
amVjdCwgMCk7CisKKyAgICAvKiBXZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysr
IHNtYXJ0IHBvaW50ZXIgYmVjYXVzZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKKyAgICAg
KiBpbiBhIEMtYWxsb2NhdGVkIEdPYmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgp
IGNvZGUgZm9yIHRoZQorICAgICAqIG1hdGNoaW5nIGRlcmVmKCkuCisgICAgICovCisgICAgY29y
ZU9iamVjdC0+cmVmKCk7CisKKyAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9FVkVOVF9DT05T
VFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfRVZFTlRfQ09OU1RSVUNU
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3Jl
LW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IsIHdlYmtpdF9k
b21fdGVzdF9ldmVudF9jb25zdHJ1Y3RvciwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCkKKwogZW51
bSB7CiAgICAgUFJPUF8wLAogICAgIFBST1BfQVRUUjEsCiAgICAgUFJPUF9BVFRSMiwKIH07CiAK
LQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKIHsKKwogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9
IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3QtPmNv
cmVPYmplY3QpIHsKQEAgLTEwNSw2ICs5NSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9ldmVudF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGRv
bV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KIAorCiAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX3BhcmVudF9jbGFzcyktPmZpbmFs
aXplKG9iamVjdCk7CiB9CiAKQEAgLTE3OSwxOCArMTcwLDIzIEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9ldmVudF9jb25zdHJ1Y3Rvcl9pbml0KFdlYktpdERPTVRlc3RFdmVudENvbnN0
cnVjdG9yCiB7CiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotV2ViS2l0RE9NVGVzdEV2ZW50Q29u
c3RydWN0b3IqIHdyYXBUZXN0RXZlbnRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0RXZlbnRDb25z
dHJ1Y3RvciogY29yZU9iamVjdCkKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0
cnVjdG9yX2dldF9hdHRyMShXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKIHsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIC8qIFdlIGNh
bGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdl
IGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVj
dCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0
Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPmF0dHIxKCkpOworICAgIHJldHVybiByZXM7Cit9CiAKLSAgICByZXR1cm4gIFdFQktJ
VF9ET01fVEVTVF9FVkVOVF9DT05TVFJVQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9N
X1RFU1RfRVZFTlRfQ09OU1RSVUNUT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK2djaGFy
Kgord2Via2l0X2RvbV90ZXN0X2V2ZW50X2NvbnN0cnVjdG9yX2dldF9hdHRyMihXZWJLaXRET01U
ZXN0RXZlbnRDb25zdHJ1Y3Rvciogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdEV2ZW50Q29uc3RydWN0b3IgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHIyKCkpOwor
ICAgIHJldHVybiByZXM7CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dEV2ZW50Q29uc3RydWN0b3JQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaApp
bmRleCBiYzBlODUyODkwMGUzN2ZjNmIzNjM1ZGNkN2NmMTI2NGJmZTFmZGQ1Li4yNTBhYmM1MzBh
OWQ4N2FmOGJiYTYxNTcxNDk0MTA0ZWY3NDNhODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1
Y3RvclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaApAQCAtMjQsNiAr
MjQsOCBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktp
dERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RFdmVudENvbnN0cnVjdG9yLmgiCisKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IgKgogICAg
IHdyYXBUZXN0RXZlbnRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0RXZlbnRDb25zdHJ1Y3RvciAq
Y29yZU9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
LmNwcAppbmRleCBjNmFkODZlNDM0ZDljMWIyNDQ1MTI1MDBhN2I0N2JlM2I0NjI5MGEwLi4xYTJl
NWUzZjU4NDlmN2Y5OTkzMmFiMDRkYmZmZjVjZTIxYjM5NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRU
YXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNs
dWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotICAgIAorCiBXZWJL
aXRET01UZXN0RXZlbnRUYXJnZXQqIGtpdChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIG9iaikK
IHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNTQsOCArNTQsMzIgQEAg
V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBraXQoV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBv
YmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0Kj4o
RE9NT2JqZWN0Q2FjaGU6OnB1dChvYmosIFdlYktpdDo6d3JhcFRlc3RFdmVudFRhcmdldChvYmop
KSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KKworV2ViQ29yZTo6VGVzdEV2
ZW50VGFyZ2V0KiBjb3JlKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKKworICAgIFdlYkNvcmU6OlRlc3RF
dmVudFRhcmdldCogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudFRh
cmdldCo+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIHJldHVybiBjb3JlT2JqZWN0
OworfQorCitXZWJLaXRET01UZXN0RXZlbnRUYXJnZXQqIHdyYXBUZXN0RXZlbnRUYXJnZXQoV2Vi
Q29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhh
biB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysg
b2JqZWN0CisgICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0
aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAg
ICAqLworICAgIGNvcmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RF
U1RfRVZFTlRfVEFSR0VUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9FVkVOVF9U
QVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZGlzcGF0Y2hf
ZXZlbnQoV2ViS2l0RE9NRXZlbnRUYXJnZXQqIHRhcmdldCwgV2ViS2l0RE9NRXZlbnQqIGV2ZW50
LCBHRXJyb3IqKiBlcnJvcikKIHsKQEAgLTg5LDYxICsxMTMsMTUgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV9ldmVudF90YXJnZXRfaW5pdChXZWJLaXRET01FdmVudFRhcmdldElmYWNlKiBpZmFj
ZSkKICAgICBpZmFjZS0+cmVtb3ZlX2V2ZW50X2xpc3RlbmVyID0gd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9yZW1vdmVfZXZlbnRfbGlzdGVuZXI7CiB9CiAKLVdlYktpdERPTU5vZGUqCi13
ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2l0ZW0oV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0
KiBzZWxmLCBndWxvbmcgaW5kZXgpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RFdmVudFRhcmdldCAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpOb2RlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPml0ZW0oaW5k
ZXgpKTsKLSAgICBXZWJLaXRET01Ob2RlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotZ2Jvb2xlYW4KLXdlYmtpdF9kb21fdGVzdF9ldmVudF90
YXJnZXRfZGlzcGF0Y2hfZXZlbnQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBXZWJL
aXRET01FdmVudCogZXZ0LCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChldnQsIDApOwotICAgIFdlYkNvcmU6OkV2ZW50
ICogY29udmVydGVkX2V2dCA9IE5VTEw7Ci0gICAgaWYgKGV2dCAhPSBOVUxMKSB7Ci0gICAgICAg
IGNvbnZlcnRlZF9ldnQgPSBXZWJLaXQ6OmNvcmUoZXZ0KTsKLSAgICAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoY29udmVydGVkX2V2dCwgMCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmRpc3BhdGNoRXZlbnQoY29u
dmVydGVkX2V2dCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotCi0KIEdfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCwgd2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldCwgV0VCS0lUX1RZUEVfRE9NX09CSkVDVCwgR19JTVBMRU1FTlRfSU5URVJGQUNF
KFdFQktJVF9UWVBFX0RPTV9FVkVOVF9UQVJHRVQsIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2lu
aXQpKQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29yZTo6VGVzdEV2ZW50VGFyZ2V0KiBj
b3JlKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChyZXF1ZXN0LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCog
Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCo+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIGVudW0gewogICAgIFBST1BfMCwKIH07CiAKLQogc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
CiB7CisKICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVD
VChvYmplY3QpOwogICAgIAogICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0x
NTUsNiArMTMzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3Qg
PSBOVUxMOwogICAgIH0KIAorCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2V2
ZW50X3RhcmdldF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0yMDMs
MTggKzE4MiwzNSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfZXZlbnRfdGFyZ2V0X2lu
aXQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiByZXF1ZXN0KQogewogfQogCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLVdlYktpdERPTVRlc3RFdmVudFRhcmdldCogd3JhcFRlc3RFdmVudFRhcmdldChX
ZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXQqIGNvcmVPYmplY3QpCitXZWJLaXRET01Ob2RlKgord2Vi
a2l0X2RvbV90ZXN0X2V2ZW50X3RhcmdldF9pdGVtKFdlYktpdERPTVRlc3RFdmVudFRhcmdldCog
c2VsZiwgZ3Vsb25nIGluZGV4KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmpl
Y3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBz
bWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0gICAgICog
aW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBj
b2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwotICAgIGNvcmVP
YmplY3QtPnJlZigpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0RXZl
bnRUYXJnZXQgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6Tm9kZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5pdGVtKGluZGV4KSk7CisgICAg
V2ViS2l0RE9NTm9kZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVy
biByZXM7Cit9CiAKLSAgICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9FVkVOVF9UQVJHRVQoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX0VWRU5UX1RBUkdFVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9i
amVjdCwgTlVMTCkpOworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9ldmVudF90YXJnZXRfZGlz
cGF0Y2hfZXZlbnQoV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0KiBzZWxmLCBXZWJLaXRET01FdmVu
dCogZXZ0LCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdEV2ZW50VGFyZ2V0ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChldnQsIDApOworICAgIFdlYkNvcmU6OkV2ZW50ICogY29udmVy
dGVkX2V2dCA9IE5VTEw7CisgICAgaWYgKGV2dCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRl
ZF9ldnQgPSBXZWJLaXQ6OmNvcmUoZXZ0KTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29udmVydGVkX2V2dCwgMCk7CisgICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGdib29sZWFuIHJlcyA9IGl0ZW0tPmRpc3BhdGNoRXZlbnQoY29udmVydGVkX2V2
dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzOwogfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RFdmVudFRhcmdldFByaXZhdGUu
aAppbmRleCBlNTYxNmUzZGZkNjU3OGNiOGZjNzRkYTQwYTU1MTJiY2UzYjEwMDRhLi4wOTA4Y2Ux
NTEwNGEzODY0YmRkZDQ1YTZlZmZmNGQwZTA1N2FhNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0RXZlbnRUYXJn
ZXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0UHJpdmF0ZS5oCkBAIC0yNCw2ICsyNCw4IEBA
CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0RE9NT2Jq
ZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdEV2ZW50VGFyZ2V0LmgiCisKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAgICAgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0ICoKICAgICB3cmFwVGVzdEV2ZW50VGFy
Z2V0KFdlYkNvcmU6OlRlc3RFdmVudFRhcmdldCAqY29yZU9iamVjdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGU2YjVhYzIzYzdmMWRkYTNkYTM0
NzQwZDQ0NmIwNWM3ZGNlYzg5YjIuLjA4MmY4ZjJlYThiZjNlMTQ3MTNkNWJiMjIzMTZmZjExNzhh
ODIwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCkBA
IC0yMSw4ICsyMSw2IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlICJjb25m
aWcuaCIKIAotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLQog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVk
ZSAiRE9NT2JqZWN0Q2FjaGUuaCIKQEAgLTQ0LDggKzQyLDEwIEBACiAjaW5jbHVkZSAid2Via2l0
Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisKIG5hbWVzcGFjZSBXZWJLaXQg
ewotICAgIAorCiBXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdEludGVy
ZmFjZSogb2JqKQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CkBAIC01NSwx
NDggKzU1LDM3IEBAIFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIGtpdChXZWJDb3JlOjpUZXN0SW50
ZXJmYWNlKiBvYmopCiAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdEludGVy
ZmFjZSo+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0SW50ZXJmYWNl
KG9iaikpKTsKIH0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2QxKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6
c3VwcGxlbWVudGFsTWV0aG9kMShpdGVtKTsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEp
IHx8IEVOQUJMRShDb25kaXRpb24xMikgKi8KLX0KIAotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdElu
dGVyZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9i
al9hcmcsIEdFcnJvciAqKmVycm9yKQorV2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShXZWJL
aXRET01UZXN0SW50ZXJmYWNlKiByZXF1ZXN0KQogewotI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzdHJfYXJnLCAwKTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmpf
YXJnLCAwKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyX2FyZyA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzdHJfYXJnKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX29i
al9hcmcgPSBOVUxMOwotICAgIGlmIChvYmpfYXJnICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVy
dGVkX29ial9hcmcgPSBXZWJLaXQ6OmNvcmUob2JqX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJnLCAwKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3Jl
cyA9IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1l
dGhvZDIoaXRlbSwgY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJnLCBlYykpOwot
ICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19m
cm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOwotICAg
IH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9pbnRl
cmZhY2Vfc3VwcGxlbWVudGFsX21ldGhvZDQoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZikK
LXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRo
b2Q0KGl0ZW0pOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKSAqLwotfQorICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3QgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVx
dWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3Qs
IDApOwogCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRh
bF9zdHIxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0jaWYgRU5BQkxFKENvbmRp
dGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAg
IGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbFN0cjEoaXRlbSkpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAg
IHJldHVybiBOVUxMOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKSAqLworICAgIHJldHVybiBjb3JlT2JqZWN0OwogfQogCi1nY2hhcioKLXdlYmtp
dF9kb21fdGVzdF9pbnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJ
bnRlcmZhY2UqIHNlbGYpCitXZWJLaXRET01UZXN0SW50ZXJmYWNlKiB3cmFwVGVzdEludGVyZmFj
ZShXZWJDb3JlOjpUZXN0SW50ZXJmYWNlKiBjb3JlT2JqZWN0KQogewotI2lmIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhXZWJDb3JlOjpUZXN0U3VwcGxlbWVu
dGFsOjpzdXBwbGVtZW50YWxTdHIyKGl0ZW0pKTsKLSAgICByZXR1cm4gcmVzOwotI2Vsc2UKLSAg
ICByZXR1cm4gTlVMTDsKLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikgKi8KLX0KKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAw
KTsKIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX3N0
cjIoV2ViS2l0RE9NVGVzdEludGVyZmFjZSogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewot
I2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpdGVtLCBjb252ZXJ0ZWRfdmFs
dWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KSAqLwotfQorICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21h
cnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGlu
IGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29k
ZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2Jq
ZWN0LT5yZWYoKTsKIAotV2ViS2l0RE9NTm9kZSoKLXdlYmtpdF9kb21fdGVzdF9pbnRlcmZhY2Vf
Z2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCi17Ci0j
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpj
b3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Tm9kZT4gZ19yZXMgPSBXVEY6Omdl
dFB0cihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGl0ZW0pKTsK
LSAgICBXZWJLaXRET01Ob2RlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAg
cmV0dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYgLyogRU5BQkxFKENv
bmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCisgICAgcmV0dXJuICBXRUJLSVRf
RE9NX1RFU1RfSU5URVJGQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9JTlRF
UkZBQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJj
b3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90
ZXN0X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFj
ZSogc2VsZiwgV2ViS2l0RE9NTm9kZSogdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6Tm9kZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7
Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2Vi
S2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFs
dWUpOwotICAgIH0KLSAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50
YWxOb2RlKGl0ZW0sIGNvbnZlcnRlZF92YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAorI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIAog
R19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0SW50ZXJmYWNlLCB3ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViQ29yZTo6VGVzdEludGVyZmFjZSogY29yZShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiByZXF1
ZXN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIDApOwotCi0gICAgV2Vi
Q29yZTo6VGVzdEludGVyZmFjZSogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
c3RJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCk7Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICByZXR1cm4gY29y
ZU9iamVjdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiBlbnVtIHsKICAgICBQUk9QXzAs
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0yMTAs
OSArOTksOSBAQCBlbnVtIHsKICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJM
RShDb25kaXRpb24xMikgKi8KIH07CiAKLQogc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X2lu
dGVyZmFjZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVj
dCA9IFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCk7CiAgICAgCiAgICAgaWYgKGRvbV9vYmplY3Qt
PmNvcmVPYmplY3QpIHsKQEAgLTIyMyw2ICsxMTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfaW50ZXJmYWNlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIAogICAgICAgICBkb21f
b2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2RvbV90ZXN0X2ludGVyZmFjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpA
QCAtMzMyLDE5ICsyMjIsMTkwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfaW5pdChXZWJLaXRET01UZXN0SW50ZXJmYWNlKiByZXF1ZXN0KQogewogfQogCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHdyYXBUZXN0SW50ZXJmYWNlKFdl
YkNvcmU6OlRlc3RJbnRlcmZhY2UqIGNvcmVPYmplY3QpCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rf
aW50ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2QxKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNl
bGYpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CisjaWYgRU5B
QkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lmIEVOQUJMRShDb25kaXRp
b24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6
OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDEoaXRlbSk7CisjZWxzZQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjExIikKKyAgICBXRUJL
SVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIpCisjZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpICovCisjZWxzZQorICAgIFdF
QktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotICAgIC8qIFdlIGNhbGwg
cmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNh
bid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBz
dHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hp
bmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK1dlYktpdERPTVRl
c3RPYmoqCit3ZWJraXRfZG9tX3Rlc3RfaW50ZXJmYWNlX3N1cHBsZW1lbnRhbF9tZXRob2QyKFdl
YktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRE
T01UZXN0T2JqKiBvYmpfYXJnLCBHRXJyb3IgKiplcnJvcikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0
aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMTIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHN0cl9hcmcsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9ial9hcmcs
IDApOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHN0cl9hcmcpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2Fy
ZyA9IE5VTEw7CisgICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRf
b2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOworICAgIH0KKyAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0g
V1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9k
MihpdGVtLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcsIGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29u
ZGl0aW9uMTIiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05P
VF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CiAKLSAgICByZXR1cm4g
IFdFQktJVF9ET01fVEVTVF9JTlRFUkZBQ0UoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9U
RVNUX0lOVEVSRkFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOwordm9pZAord2Via2l0X2Rv
bV90ZXN0X2ludGVyZmFjZV9zdXBwbGVtZW50YWxfbWV0aG9kNChXZWJLaXRET01UZXN0SW50ZXJm
YWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRo
b2Q0KGl0ZW0pOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0
aW9uMTIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24y
IikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
CiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3RfaW50
ZXJmYWNlX2dldF9zdXBwbGVtZW50YWxfc3RyMShXZWJLaXRET01UZXN0SW50ZXJmYWNlKiBzZWxm
KQoreworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpdGVtKSk7CisgICAgcmV0dXJuIHJlczsK
KyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTEi
KQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEyIikKKyAg
ICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikgKi8KKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29u
ZGl0aW9uMiIpCisgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9p
bnRlcmZhY2VfZ2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNl
bGYpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGl0ZW0pKTsKKyAgICByZXR1cm4gcmVz
OworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24x
MSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMTIiKQor
ICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJD
b25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9u
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9p
bnRlcmZhY2Vfc2V0X3N1cHBsZW1lbnRhbF9zdHIyKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNl
bGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIpCisjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdEludGVyZmFjZSAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGl0
ZW0sIGNvbnZlcnRlZF92YWx1ZSk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjExIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpICovCisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMikgKi8KK30KKworV2ViS2l0RE9NTm9kZSoKK3dlYmtpdF9kb21fdGVzdF9pbnRlcmZh
Y2VfZ2V0X3N1cHBsZW1lbnRhbF9ub2RlKFdlYktpdERPTVRlc3RJbnRlcmZhY2UqIHNlbGYpCit7
CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0SW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGU+IGdfcmVzID0gV1RGOjpnZXRQdHIoV2Vi
Q29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9kZShpdGVtKSk7CisgICAgV2Vi
S2l0RE9NTm9kZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiBy
ZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlv
bjExIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xMiIp
CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMTIpICovCisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BS
RVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQo
IkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X2ludGVyZmFjZV9zZXRfc3VwcGxlbWVudGFsX25vZGUoV2ViS2l0RE9NVGVzdEludGVyZmFjZSog
c2VsZiwgV2ViS2l0RE9NTm9kZSogdmFsdWUpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8
IEVOQUJMRShDb25kaXRpb24yKQorI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RJbnRlcmZhY2UgKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwor
ICAgIFdlYkNvcmU6Ok5vZGUgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1
ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1
ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9Cisg
ICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsTm9kZShpdGVtLCBj
b252ZXJ0ZWRfdmFsdWUpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24xMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgi
Q29uZGl0aW9uMTIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKSAqLworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpICovCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNl
UHJpdmF0ZS5oCmluZGV4IDBhNGUzYTIwN2M2MDY2Y2ViMGYyMDQ2MmY0NGNkMTQwYjFjYmUxMDku
LjEwMjBlMDJlN2ZkNGI0M2JhNmMzNDM1MzgzNWNmOTIzZTA5Y2I5OTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJ
bnRlcmZhY2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaApAQCAtMjQsNiArMjQs
OSBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dlYktpdERP
TU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKKworI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAg
V2ViS2l0RE9NVGVzdEludGVyZmFjZSAqCiAgICAgd3JhcFRlc3RJbnRlcmZhY2UoV2ViQ29yZTo6
VGVzdEludGVyZmFjZSAqY29yZU9iamVjdCk7CkBAIC0zNiw0ICszOSw2IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2VuZGlmIC8qIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKwogI2VuZGlmIC8qIFdFQl9LSVRfRE9N
X1RFU1RfSU5URVJGQUNFX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IDU5NDZlYzBj
MDBjZTczZWY1ZDMwMTVjZDk3OGQzMTIyZGRkYWUwYTAuLmI1MTY4NjNjNjEzYzE5NDgxZTFkNWM1
NTkwMWRhZjg1NjY1ZjBhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNp
bmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotICAgIAorCiBX
ZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcioga2l0KFdlYkNvcmU6OlRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2Jq
LCAwKTsKQEAgLTQ2LDEzICs0Niw2IEBAIFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyKiBraXQoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIG9iCiAKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihE
T01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIob2JqKSkpOwogfQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCi0KLQotR19E
RUZJTkVfVFlQRShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciwgd2Via2l0X2Rv
bV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXIsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1Qp
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogY29yZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogcmVxdWVzdCkK
IHsKQEAgLTY0LDE0ICs1NywzMSBAQCBXZWJDb3JlOjpUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciogY29yZShXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogcgogICAgIHJldHVy
biBjb3JlT2JqZWN0OwogfQogCitXZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciog
d3JhcFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKFdlYkNvcmU6OlRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiBjb3JlT2JqZWN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVP
YmplY3QsIDApOworCisgICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMr
KyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0CisgICAg
ICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUo
KSBjb2RlIGZvciB0aGUKKyAgICAgKiBtYXRjaGluZyBkZXJlZigpLgorICAgICAqLworICAgIGNv
cmVPYmplY3QtPnJlZigpOworCisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfTUVESUFfUVVF
UllfTElTVF9MSVNURU5FUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfTUVESUFf
UVVFUllfTElTVF9MSVNURU5FUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgTlVMTCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lciwgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXIs
IFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCisKIGVudW0gewogICAgIFBST1BfMCwKIH07CiAKLQog
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogeworCiAgICAgV2ViS2l0RE9NT2JqZWN0KiBkb21fb2Jq
ZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKICAgICAKICAgICBpZiAoZG9tX29iamVj
dC0+Y29yZU9iamVjdCkgewpAQCAtODMsNiArOTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9t
X3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
CiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KIAorCiAgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X21lZGlhX3F1ZXJ5X2xpc3RfbGlzdGVuZXJf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTMxLDE4ICsxNDIsMyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3RfbWVkaWFfcXVlcnlfbGlzdF9saXN0ZW5lcl9p
bml0KFdlYktpdERPTVRlc3RNZWRpYVF1ZQogewogfQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdl
YktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB3cmFwVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGNvcmVPYmplY3Qp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7Ci0KLSAgICAvKiBX
ZSBjYWxsIHJlZigpIHJhdGhlciB0aGFuIHVzaW5nIGEgQysrIHNtYXJ0IHBvaW50ZXIgYmVjYXVz
ZSB3ZSBjYW4ndCBzdG9yZSBhIEMrKyBvYmplY3QKLSAgICAgKiBpbiBhIEMtYWxsb2NhdGVkIEdP
YmplY3Qgc3RydWN0dXJlLiAgU2VlIHRoZSBmaW5hbGl6ZSgpIGNvZGUgZm9yIHRoZQotICAgICAq
IG1hdGNoaW5nIGRlcmVmKCkuCi0gICAgICovCi0gICAgY29yZU9iamVjdC0+cmVmKCk7Ci0KLSAg
ICByZXR1cm4gIFdFQktJVF9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9NRURJQV9RVUVSWV9MSVNUX0xJU1RFTkVSLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmpl
Y3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJQcml2YXRlLmgKaW5kZXggNWZjNjUyZjNlMTBhZmM2ZTBlZjk5YWI5ZTE5YTg2MmU4
MTkyYjQwMS4uYWMyNzA4OGU4MzRkYTgyNzk1MzY3NjkwZmE5MmY5NTcxNGM2ZDVjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAg
IFdlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyICoKICAgICB3cmFwVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgKmNv
cmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29u
c3RydWN0b3IuY3BwCmluZGV4IDYwNDE3Mjk3OTAxZjhmNThkZTZlOThkZDYyZjNjZjNjNWVjNmMy
OWYuLmVmZDUyOGY5NDliZTdmMTkwMTIzZTEzMzE5N2EyYWNjNDdiMzllNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAKICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewotICAgIAorCiBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcioga2l0KFdlYkNvcmU6
OlRlc3ROYW1lZENvbnN0cnVjdG9yKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
b2JqLCAwKTsKQEAgLTQ2LDEzICs0Niw2IEBAIFdlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9y
KiBraXQoV2ViQ29yZTo6VGVzdE5hbWVkQ29uc3RydWN0b3IqIG9iaikKIAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvcio+KERPTU9iamVjdENhY2hl
OjpwdXQob2JqLCBXZWJLaXQ6OndyYXBUZXN0TmFtZWRDb25zdHJ1Y3RvcihvYmopKSk7CiB9Ci0g
ICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KLQotCi1HX0RFRklORV9UWVBFKFdlYktpdERP
TVRlc3ROYW1lZENvbnN0cnVjdG9yLCB3ZWJraXRfZG9tX3Rlc3RfbmFtZWRfY29uc3RydWN0b3Is
IFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJDb3Jl
OjpUZXN0TmFtZWRDb25zdHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
ciogcmVxdWVzdCkKIHsKQEAgLTY0LDE0ICs1NywzMSBAQCBXZWJDb3JlOjpUZXN0TmFtZWRDb25z
dHJ1Y3RvciogY29yZShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3RvciogcmVxdWVzdCkKICAg
ICByZXR1cm4gY29yZU9iamVjdDsKIH0KIAorV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iq
IHdyYXBUZXN0TmFtZWRDb25zdHJ1Y3RvcihXZWJDb3JlOjpUZXN0TmFtZWRDb25zdHJ1Y3Rvciog
Y29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsK
KworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9p
bnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1h
bGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3Ig
dGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5y
ZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX05BTUVEX0NPTlNUUlVDVE9SKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9OQU1FRF9DT05TVFJVQ1RPUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgTlVMTCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rvciwgd2Via2l0X2RvbV90ZXN0X25h
bWVkX2NvbnN0cnVjdG9yLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQorCiBlbnVtIHsKICAgICBQ
Uk9QXzAsCiB9OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1
Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7CisKICAgICBXZWJLaXRET01PYmplY3Qq
IGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAgIAogICAgIGlmIChk
b21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC04Myw2ICs5Myw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF9kb21fdGVzdF9uYW1lZF9jb25zdHJ1Y3Rvcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
CiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KIAorCiAgICAg
R19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKQEAgLTEzMSwxOCArMTQyLDMgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X25hbWVkX2NvbnN0cnVjdG9yX2luaXQoV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1XZWJLaXRET01U
ZXN0TmFtZWRDb25zdHJ1Y3Rvciogd3JhcFRlc3ROYW1lZENvbnN0cnVjdG9yKFdlYkNvcmU6OlRl
c3ROYW1lZENvbnN0cnVjdG9yKiBjb3JlT2JqZWN0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyogV2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1
c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2Jq
ZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBHT2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUg
ZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAgKiBtYXRjaGluZyBkZXJlZigpLgotICAgICAq
LwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1Rf
TkFNRURfQ09OU1RSVUNUT1IoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNUX05BTUVE
X0NPTlNUUlVDVE9SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBOVUxMKSk7Ci19Ci19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3ROYW1lZENvbnN0cnVjdG9yUHJpdmF0ZS5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVk
Q29uc3RydWN0b3JQcml2YXRlLmgKaW5kZXggYjU4NTE3MWMyMGU5NmE5MDI4ODdmYzk2OGM5ZTk2
NTlmMzk5MzIzZS4uNWJhZDcwYjAxZGMxMmUyNzVjMzA0ODM0MDdlZWJlY2MzM2UxNzkwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0b3JQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE5hbWVkQ29uc3RydWN0
b3JQcml2YXRlLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KICNpbmNsdWRlICJUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oIgorCisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RO
YW1lZENvbnN0cnVjdG9yICoKICAgICB3cmFwVGVzdE5hbWVkQ29uc3RydWN0b3IoV2ViQ29yZTo6
VGVzdE5hbWVkQ29uc3RydWN0b3IgKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmNwcAppbmRleCBjN2VkMTY1ZTliZjUxNzdhYWNmZGVkZWU0NDc0YTlkZThhNDZhMjJi
Li5mNzNiNThiNGI2ODNjMjFlZjJhNDJlZmZlMmRhN2EzNGQ1OWIyYjE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtNjQsNyArNjQsNyBAQAogI2luY2x1ZGUgIndlYmtp
dG1hcnNoYWwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0gICAgCisKIFdlYktpdERPTVRlc3RP
YmoqIGtpdChXZWJDb3JlOjpUZXN0T2JqKiBvYmopCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwob2JqLCAwKTsKQEAgLTc0LDE5NzkgKzc0LDUyMSBAQCBXZWJLaXRET01UZXN0T2JqKiBraXQo
V2ViQ29yZTo6VGVzdE9iaiogb2JqKQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERP
TVRlc3RPYmoqPihET01PYmplY3RDYWNoZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdE9iaihv
YmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KIAotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial92b2lkX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorV2ViQ29y
ZTo6VGVzdE9iaiogY29yZShXZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0KQogewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGl0ZW0tPnZvaWRNZXRob2QoKTsKLX0KKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1
ZXN0LCAwKTsKIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial92b2lkX21ldGhvZF93aXRoX2Fy
Z3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0
cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzdHJfYXJnKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKG9ial9hcmcpOwotICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7
Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9
IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0
ZWRfb2JqX2FyZyk7Ci0gICAgfQotICAgIGl0ZW0tPnZvaWRNZXRob2RXaXRoQXJncyhpbnRfYXJn
LCBjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcpOwotfQorICAgIFdlYkNvcmU6
OlRlc3RPYmoqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0T2JqKj4oV0VC
S0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpOworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNvcmVPYmplY3QsIDApOwogCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9pbnRf
bWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGds
b25nIHJlcyA9IGl0ZW0tPmludE1ldGhvZCgpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJu
IGNvcmVPYmplY3Q7CiB9CiAKLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2ludF9tZXRob2Rf
d2l0aF9hcmdzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGludF9hcmcsIGNvbnN0IGdj
aGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnKQorV2ViS2l0RE9NVGVzdE9i
aiogd3JhcFRlc3RPYmooV2ViQ29yZTo6VGVzdE9iaiogY29yZU9iamVjdCkKIHsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc3RyX2FyZywgMCk7Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0
cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKLSAgICBpZiAob2JqX2FyZyAhPSBOVUxM
KSB7Ci0gICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOwot
ICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb252ZXJ0ZWRfb2JqX2FyZywgMCk7Ci0gICAg
fQotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmludE1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZl
cnRlZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZyk7Ci0gICAgcmV0dXJuIHJlczsKLX0KKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKIAotV2ViS2l0RE9NVGVzdE9i
aioKLXdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZChXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0aG9kKCkpOwotICAgIFdlYktpdERPTVRlc3RP
YmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQor
ICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRl
ciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxv
Y2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhl
CisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYo
KTsKIAotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZF93
aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2No
YXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCi17Ci0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKG9ial9hcmcsIDApOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJn
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBjb252ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewot
ICAgICAgICBjb252ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOwotICAgIH0KLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
b2JqTWV0aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9v
YmpfYXJnKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfT0JK
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3Qs
IE5VTEwpKTsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9zZXF1
ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVuY2UqICkKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6c2VxdWVuY2Ug
KiBjb252ZXJ0ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVy
dGVkXyA9IFdlYktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF8pOwotICAgIH0KLSAgICBpdGVtLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoY29udmVydGVkXyk7
Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfbWV0aG9kX3RoYXRfcmVxdWlyZXNfYWxsX2FyZ3NfYW5kX3Rocm93cyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2ViS2l0RE9NVGVzdE9i
aiogb2JqX2FyZywgR0Vycm9yICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9i
al9hcmcsIDApOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cl9hcmcpOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRf
b2JqX2FyZyA9IE5VTEw7Ci0gICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKLSAgICAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOwotICAgIH0KLSAgICBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdf
cmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
cyhjb252ZXJ0ZWRfc3RyX2FyZywgY29udmVydGVkX29ial9hcmcsIGVjKSk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMp
OwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5n
KCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIFdl
YktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1
cm4gcmVzOwotfQorR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T2JqLCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqLCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQogCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NlcmlhbGl6ZWRfdmFsdWUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVkX2FyZykKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlcmlhbGl6ZWRfYXJnKTsKLSAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcgPSBOVUxMOwotICAgIGlmIChzZXJp
YWxpemVkX2FyZyAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyA9
IFdlYktpdDo6Y29yZShzZXJpYWxpemVkX2FyZyk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKLSAgICB9Ci0gICAgaXRlbS0+c2VyaWFsaXplZFZh
bHVlKGNvbnZlcnRlZF9zZXJpYWxpemVkX2FyZyk7Ci19CitlbnVtIHsKKyAgICBQUk9QXzAsCisg
ICAgUFJPUF9SRUFEX09OTFlfSU5UX0FUVFIsCisgICAgUFJPUF9SRUFEX09OTFlfU1RSSU5HX0FU
VFIsCisgICAgUFJPUF9SRUFEX09OTFlfVEVTVF9PQkpfQVRUUiwKKyAgICBQUk9QX1NIT1JUX0FU
VFIsCisgICAgUFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSLAorICAgIFBST1BfSU5UX0FUVFIsCisg
ICAgUFJPUF9MT05HX0xPTkdfQVRUUiwKKyAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRS
LAorICAgIFBST1BfU1RSSU5HX0FUVFIsCisgICAgUFJPUF9URVNUX09CSl9BVFRSLAorICAgIFBS
T1BfWE1MX09CSl9BVFRSLAorICAgIFBST1BfQ1JFQVRFLAorICAgIFBST1BfUkVGTEVDVEVEX1NU
UklOR19BVFRSLAorICAgIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFIsCisgICAgUFJPUF9S
RUZMRUNURURfVU5TSUdORURfSU5URUdSQUxfQVRUUiwKKyAgICBQUk9QX1JFRkxFQ1RFRF9CT09M
RUFOX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfVVJMX0FUVFIsCisgICAgUFJPUF9SRUZMRUNU
RURfU1RSSU5HX0FUVFIsCisgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFMX0FUVFIs
CisgICAgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUiwKKyAgICBQUk9QX1JFRkxF
Q1RFRF9DVVNUT01fVVJMX0FUVFIsCisgICAgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TiwKKyAgICBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OLAorICAgIFBST1BfU1RSSU5H
X0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OLAorICAgIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9T
RVRURVJfRVhDRVBUSU9OLAorICAgIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFLAor
ICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFLAorICAgIFBS
T1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUywKKyAgICBQUk9QX1dJVEhfU0NS
SVBUX0VYRUNVVElPTl9DT05URVhUX0FUVFJJQlVURV9SQUlTRVMsCisgICAgUFJPUF9XSVRIX1ND
UklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FUVFJJQlVURSwKKyAgICBQ
Uk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklC
VVRFX1JBSVNFUywKKyAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9T
Q1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFLAorICAgIFBST1BfV0lUSF9TQ1JJUFRf
QVJHVU1FTlRTX0FORF9DQUxMX1NUQUNLX0FUVFJJQlVURSwKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKKyAgICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSAqLworI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAg
ICBQUk9QX0NPTkRJVElPTkFMX0FUVFIyLAorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCisgICAgUFJPUF9DT05ESVRJT05BTF9BVFRSMywKKyNlbmRpZiAvKiBFTkFC
TEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCisgICAgUFJPUF9DT05URU5U
X0RPQ1VNRU5ULAorICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKKyAgICBQUk9QX0lNTVVUQUJMRV9Q
T0lOVCwKKyAgICBQUk9QX1NUUkFXQkVSUlksCisgICAgUFJPUF9TVFJJQ1RfRkxPQVQsCisgICAg
UFJPUF9ERVNDUklQVElPTiwKKyAgICBQUk9QX0lELAorICAgIFBST1BfSEFTSCwKK307CiAKLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01JREJLZXkqIGtleSkKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
a2V5KTsKLSAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRfa2V5ID0gTlVMTDsKLSAgICBp
ZiAoa2V5ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX2tleSA9IFdlYktpdDo6Y29yZShr
ZXkpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9rZXkpOworCisgICAgV2Vi
S2l0RE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gV0VCS0lUX0RPTV9PQkpFQ1Qob2JqZWN0KTsKKyAg
ICAKKyAgICBpZiAoZG9tX29iamVjdC0+Y29yZU9iamVjdCkgeworICAgICAgICBXZWJDb3JlOjpU
ZXN0T2JqKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaiAqPihkb21f
b2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpm
b3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNvcmVPYmplY3QtPmRlcmVmKCk7CisKKyAgICAg
ICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5VTEw7CiAgICAgfQotICAgIGl0ZW0tPmlkYktl
eShjb252ZXJ0ZWRfa2V5KTsKKworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0
X29ial9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCi12b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTURpY3Rpb25hcnkqIG9vLCBXZWJLaXRET01EaWN0aW9uYXJ5KiBvb28pCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQogewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwob28pOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwob29v
KTsKLSAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5ICogY29udmVydGVkX29vID0gTlVMTDsKLSAgICBp
ZiAob28gIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUob28p
OwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vbyk7CisgICAgV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2JqZWN0KTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqKiBjb3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBzd2l0Y2ggKHBy
b3BfaWQpIHsKKyAgICBjYXNlIFBST1BfVU5TSUdORURfU0hPUlRfQVRUUjoKKyAgICB7CisgICAg
ICAgIGNvcmVTZWxmLT5zZXRVbnNpZ25lZFNob3J0QXR0cigoZ192YWx1ZV9nZXRfdWludCh2YWx1
ZSkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIFdlYkNvcmU6OkRpY3Rpb25hcnkgKiBj
b252ZXJ0ZWRfb29vID0gTlVMTDsKLSAgICBpZiAob29vICE9IE5VTEwpIHsKLSAgICAgICAgY29u
dmVydGVkX29vbyA9IFdlYktpdDo6Y29yZShvb28pOwotICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF9vb28pOworICAgIGNhc2UgUFJPUF9JTlRfQVRUUjoKKyAgICB7CisgICAgICAg
IGNvcmVTZWxmLT5zZXRJbnRBdHRyKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOworICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNv
bnZlcnRlZF9vb28pOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRo
X2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoRXhjZXB0aW9uKGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xp
dGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNv
ZGUsIGVjZGVzYy5uYW1lKTsKKyAgICBjYXNlIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFI6
CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoKGdfdmFs
dWVfZ2V0X3VpbnQ2NCh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotfQotCi12b2lk
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWQoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0U3RhdGVWb2lkKCk7
Ci19Ci0KLVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0
X3N0YXRlX29iaihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+
d2l0aFNjcmlwdFN0YXRlT2JqKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktp
dDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X3N0YXRlX3ZvaWRfZXhjZXB0aW9uKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPndpdGhTY3JpcHRTdGF0ZVZvaWRFeGNlcHRp
b24oZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwg
Z19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5h
bWUpOworICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxm
LT5zZXRTdHJpbmdBdHRyKFdURjo6U3RyaW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLX0KLQotV2ViS2l0RE9NVGVzdE9iaioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRTdGF0ZU9iakV4
Y2VwdGlvbihlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOworICAgIGNhc2UgUFJPUF9DUkVBVEU6CisgICAgeworICAgICAgICBjb3JlU2Vs
Zi0+c2V0Q3JlYXRlKChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOworICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMu
Z2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
d2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKLSAgICBpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBp
dGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKCk7Ci19Ci0KLVdl
YktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1dGlv
bl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfb2JqX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxm
LCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBn
X3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVPYmpFeGNlcHRpb24oZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19B
VFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX1JFRkxFQ1RFRF9JTlRFR1JBTF9BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYt
PnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdy
YWxhdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFI6Cisg
ICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgKGdfdmFs
dWVfZ2V0X3Vsb25nKHZhbHVlKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
Uk9QX1JFRkxFQ1RFRF9CT09MRUFOX0FUVFI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRy
QXR0ciwgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOgorICAgIHsKKyAgICAgICAgY29y
ZVNlbGYtPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJB
dHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRU
UjoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdURjo6U3RyaW5nOjpmcm9tVVRGOChn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9JTlRFR1JBTF9BVFRSOgorICAgIHsKKyAgICAgICAg
Y29yZVNlbGYtPnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudEludGVncmFsQXR0ckF0dHIsIChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVB
Tl9BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldEJvb2xlYW5BdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCAoZ192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJP
UF9SRUZMRUNURURfQ1VTVE9NX1VSTF9BVFRSOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwg
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElP
TjoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAg
ICBjb3JlU2VsZi0+c2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oKGdfdmFsdWVfZ2V0X2xvbmco
dmFsdWUpKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0FUVFJf
V0lUSF9TRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBST1BfU1RSSU5HX0FUVFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgorICAgIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGNvcmVTZWxm
LT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEY6OlN0cmluZzo6ZnJvbVVURjgo
Z192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT046CisgICAgewor
ICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY29yZVNlbGYt
PnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURjo6U3RyaW5nOjpmcm9tVVRGOChn
X3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX1NUQVRFX0FUVFJJQlVURToKKyAgICB7CisgICAgICAg
IGNvcmVTZWxmLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKGdfdmFsdWVfZ2V0X2xvbmco
dmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
KyAgICBjYXNlIFBST1BfQ09ORElUSU9OQUxfQVRUUjE6CisgICAgeworICAgICAgICBjb3JlU2Vs
Zi0+c2V0Q29uZGl0aW9uYWxBdHRyMSgoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworI2lmIEVO
QUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBjYXNlIFBST1BfQ09O
RElUSU9OQUxfQVRUUjI6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0Q29uZGl0aW9uYWxB
dHRyMigoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
I2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgY2FzZSBQUk9Q
X0NPTkRJVElPTkFMX0FUVFIzOgorICAgIHsKKyAgICAgICAgY29yZVNlbGYtPnNldENvbmRpdGlv
bmFsQXR0cjMoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICov
CisgICAgY2FzZSBQUk9QX1NUUklDVF9GTE9BVDoKKyAgICB7CisgICAgICAgIGNvcmVTZWxmLT5z
ZXRTdHJpY3RGbG9hdCgoZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFBST1BfSUQ6CisgICAgeworICAgICAgICBjb3JlU2VsZi0+c2V0
SWQoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXZWJLaXRE
T01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJl
czsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3Jp
cHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlcyhXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9i
aiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5tZXRo
b2RXaXRoT3B0aW9uYWxBcmcob3B0KTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgZ2xvbmcgbm9uX29wdCwgZ2xvbmcgb3B0KQotewotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0
ZW0tPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKG5vbl9vcHQsIG9wdCk7
CiB9CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfbm9uX29wdGlvbmFs
X2FyZ19hbmRfdHdvX29wdGlvbmFsX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcg
bm9uX29wdCwgZ2xvbmcgb3B0MSwgZ2xvbmcgb3B0MikKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5t
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uX29wdCwgb3B0MSwg
b3B0Mik7Ci19CiAKLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9u
YWxfc3RyaW5nKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiBzdHIpCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQogewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0
ZWRfc3RyID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0
aE9wdGlvbmFsU3RyaW5nKGNvbnZlcnRlZF9zdHIpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc191bmRlZmluZWQoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHN0cik7Ci0gICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHIpOwotICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lz
VW5kZWZpbmVkKGNvbnZlcnRlZF9zdHIpOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X21ldGhvZF93aXRoX29wdGlvbmFsX3N0cmluZ19pc19udWxsX3N0cmluZyhXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc3RyKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHN0cik7Ci0gICAgaXRlbS0+bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxs
U3RyaW5nKGNvbnZlcnRlZF9zdHIpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Y29uZGl0aW9uYWxfbWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJM
RShDb25kaXRpb24xKQotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5jb25kaXRpb25hbE1ldGhvZDEoKSk7Ci0gICAgcmV0dXJuIHJlczsK
LSNlbHNlCi0gICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICov
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDIoKTsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMyhXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5jb25kaXRpb25hbE1ldGhvZDMoKTsKLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCi19Ci0KLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+Y2xhc3NNZXRob2QoKTsKLX0KLQotZ2xvbmcKLXdlYmtp
dF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhfb3B0aW9uYWwoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgYXJnKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDAp
OwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBp
dGVtLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIGFyZykKLXsKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBpdGVtLT5vdmVybG9hZGVkTWV0aG9kMShhcmcpOwotI2VuZGlmIC8qIEVOQUJMRShD
b25kaXRpb24xKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX292ZXJsb2FkZWRf
bWV0aG9kMShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdHlwZSkKLXsKLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHR5cGUp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF90eXBlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4
KHR5cGUpOwotICAgIGl0ZW0tPm92ZXJsb2FkZWRNZXRob2QxKGNvbnZlcnRlZF90eXBlKTsKLSNl
bmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hKiApCi17Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OmEgKiBjb252ZXJ0
ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkXyA9IFdl
YktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAg
IFdlYktpdERPTVRlc3RPYmoqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiogY29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
c3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1JFQURfT05MWV9JTlRfQVRUUjoKKyAg
ICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5yZWFkT25seUlu
dEF0dHIoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVtLT5jb252ZXJ0MShjb252
ZXJ0ZWRfKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9jb252ZXJ0MihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01iKiApCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OmIgKiBjb252ZXJ0ZWRfID0gTlVMTDsKLSAgICBpZiAo
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOwotICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAgIGNhc2UgUFJPUF9SRUFEX09OTFlf
U1RSSU5HX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBj
b252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5yZWFkT25seVN0cmluZ0F0dHIoKSkpOworICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgaXRlbS0+Y29udmVydDIoY29udmVydGVkXyk7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfY29udmVydDMoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NYyogKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoKTsKLSAg
ICBXZWJDb3JlOjpjICogY29udmVydGVkXyA9IE5VTEw7Ci0gICAgaWYgKCAhPSBOVUxMKSB7Ci0g
ICAgICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKLSAgICAgICAgZ19yZXR1cm5faWZf
ZmFpbChjb252ZXJ0ZWRfKTsKKyAgICBjYXNlIFBST1BfUkVBRF9PTkxZX1RFU1RfT0JKX0FUVFI6
CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYt
PnJlYWRPbmx5VGVzdE9iakF0dHIoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGl0
ZW0tPmNvbnZlcnQzKGNvbnZlcnRlZF8pOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NvbnZlcnQ0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWQqICkKLXsKLSAgICBn
X3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6ZCAqIGNvbnZlcnRlZF8g
PSBOVUxMOwotICAgIGlmICggIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0
Ojpjb3JlKCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgY2Fz
ZSBQUk9QX1NIT1JUX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUs
IGNvcmVTZWxmLT5zaG9ydEF0dHIoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpdGVt
LT5jb252ZXJ0NChjb252ZXJ0ZWRfKTsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9j
b252ZXJ0NShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01lKiApCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCgpOwotICAgIFdlYkNvcmU6OmUgKiBjb252ZXJ0ZWRfID0g
TlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6
Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF8pOworICAgIGNhc2Ug
UFJPUF9VTlNJR05FRF9TSE9SVF9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfdWlu
dCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkU2hvcnRBdHRyKCkpOworICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgaXRlbS0+Y29udmVydDUoY29udmVydGVkXyk7Ci19Ci0KLVdlYktpdERPTVNW
R1BvaW50Kgotd2Via2l0X2RvbV90ZXN0X29ial9tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7
Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50RnVu
Y3Rpb24oKSk7Ci0gICAgV2ViS2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVz
LmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1XZWJLaXRET01TVkdQb2ludCoKLXdlYmtp
dF9kb21fdGVzdF9vYmpfaW1tdXRhYmxlX3BvaW50X2Z1bmN0aW9uKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9p
bnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnRGdW5jdGlvbigpKTsK
LSAgICBXZWJLaXRET01TVkdQb2ludCogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwot
ICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfb3JhbmdlKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+b3JhbmdlKCk7Ci19
Ci0KLVdlYktpdERPTWJvb2wqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3N0cmljdF9mdW5jdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogc3RyLCBnZmxvYXQgYSwgZ2ludCBi
LCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc3RyLCAwKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3RyID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpib29sPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnN0
cmljdEZ1bmN0aW9uKGNvbnZlcnRlZF9zdHIsIGEsIGIsIGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAg
ICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJL
SVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgY2FzZSBQUk9QX0lOVF9B
VFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmlu
dEF0dHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfTE9OR19MT05H
X0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2YWx1ZSwgY29yZVNlbGYt
PmxvbmdMb25nQXR0cigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9V
TlNJR05FRF9MT05HX0xPTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQ2
NCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+c3Ry
aW5nQXR0cigpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfVEVTVF9P
QkpfQVRUUjoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBj
b3JlU2VsZi0+dGVzdE9iakF0dHIoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9YTUxfT0JKX0FUVFI6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0dHIoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgUFJPUF9DUkVBVEU6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9i
b29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aXNDcmVhdGUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgorICAgIHsKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+
Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVH
UkFMX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2Vs
Zi0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRl
Z3JhbGF0dHJBdHRyKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfUkVG
TEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3Nl
dF91bG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9PTEVBTl9BVFRS
OgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhh
c0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0cikp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRU
UjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VU
RjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVybGF0dHJBdHRyKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
Uk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfdGFrZV9z
dHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0lOVEVHUkFM
X0FUVFI6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3JlU2VsZi0+
Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50
ZWdyYWxBdHRyQXR0cikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1JF
RkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX1VSTF9BVFRSOgorICAgIHsKKyAgICAgICAg
Z192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+
Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJB
dHRyKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9H
RVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5hdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihlYykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQ
Uk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9z
ZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVS
X0VYQ0VQVElPTjoKKyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5n
KGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENF
UFRJT046CisgICAgeworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0
VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVf
QVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNl
bGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRSSUJVVEU6Cisg
ICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoK
KyAgICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBS
ZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyhlYyk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2Vi
S2l0OjpraXQocHRyLmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBS
T1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNFUzoKKyAgICB7
CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8
V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzKGVjKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBUX1NUQVRFX0FU
VFJJQlVURToKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBj
b3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5n
ZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBU
X0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JBSVNFUzoKKyAg
ICB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpOworICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FO
RF9TQ1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFOgorICAgIHsKKyAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgpOworICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5UU19BTkRfQ0FM
TF9TVEFDS19BVFRSSUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9i
aj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUoKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIu
Z2V0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIEVOQUJMRShDb25kaXRpb24xKQor
ICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMToKKyAgICB7CisgICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIxKCkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorICAgIGNhc2UgUFJPUF9DT05ESVRJ
T05BTF9BVFRSMjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVT
ZWxmLT5jb25kaXRpb25hbEF0dHIyKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYg
LyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBjYXNlIFBST1BfQ09ORElU
SU9OQUxfQVRUUjM6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBjb3Jl
U2VsZi0+Y29uZGl0aW9uYWxBdHRyMygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlm
IC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KKyAgICBjYXNl
IFBST1BfQ09OVEVOVF9ET0NVTUVOVDoKKyAgICB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpE
b2N1bWVudD4gcHRyID0gY29yZVNlbGYtPmNvbnRlbnREb2N1bWVudCgpOworICAgICAgICBnX3Zh
bHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6CisgICAgeworICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0ciA9IGNvcmVTZWxmLT5tdXRhYmxlUG9pbnQo
KTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0
KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9JTU1VVEFCTEVfUE9J
TlQ6CisgICAgeworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0ciA9IGNvcmVT
ZWxmLT5pbW11dGFibGVQb2ludCgpOworICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUs
IFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQUk9QX1NUUkFXQkVSUlk6CisgICAgeworICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUs
IGNvcmVTZWxmLT5ibHVlYmVycnkoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFBST1BfU1RSSUNUX0ZMT0FUOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIGNvcmVTZWxmLT5zdHJpY3RGbG9hdCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUFJPUF9ERVNDUklQVElPTjoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmco
dmFsdWUsIGNvcmVTZWxmLT5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgUFJPUF9JRDoKKyAgICB7CisgICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUs
IGNvcmVTZWxmLT5pZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUFJPUF9I
QVNIOgorICAgIHsKKyAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRv
VVRGOFN0cmluZyhjb3JlU2VsZi0+aGFzaCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBXZWJLaXRE
T01ib29sKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsK
LX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMg
PSBpdGVtLT5yZWFkT25seUludEF0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1nY2hhcioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVy
dFRvVVRGOFN0cmluZyhpdGVtLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJl
czsKIH0KIAotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRf
b25seV90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0
cihpdGVtLT5yZWFkT25seVRlc3RPYmpBdHRyKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHJl
cyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQogCi1nc2hv
cnQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQoR09iamVj
dCogb2JqZWN0KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnc2hvcnQgcmVzID0gaXRlbS0+c2hv
cnRBdHRyKCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfc2hvcnRfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnc2hvcnQgdmFsdWUpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0U2hvcnRBdHRyKHZhbHVlKTsKKyAgICBpZiAoR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkK
KyAgICAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X29ial9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3RlZChvYmplY3QpOwogfQogCi1ndXNob3J0Ci13ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdE9iakNsYXNz
KiByZXF1ZXN0Q2xhc3MpCiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGd1c2hvcnQgcmVzID0gaXRl
bS0+dW5zaWduZWRTaG9ydEF0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF91bnNpZ25lZF9zaG9ydF9hdHRyKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGd1c2hvcnQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWduZWRT
aG9ydEF0dHIodmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW50
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xv
bmcgcmVzID0gaXRlbS0+aW50QXR0cigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2ludF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGds
b25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldEludEF0dHIodmFsdWUpOwotfQot
Ci1naW50NjQKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2xvbmdfbG9uZ19hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdpbnQ2NCByZXMgPSBpdGVt
LT5sb25nTG9uZ0F0dHIoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnaW50
NjQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0TG9uZ0xvbmdBdHRyKHZhbHVlKTsK
LX0KLQotZ3VpbnQ2NAotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdW5zaWduZWRfbG9uZ19sb25n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ3Vp
bnQ2NCByZXMgPSBpdGVtLT51bnNpZ25lZExvbmdMb25nQXR0cigpOwotICAgIHJldHVybiByZXM7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vuc2lnbmVkX2xvbmdfbG9uZ19h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1aW50NjQgdmFsdWUpCi17Ci0gICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgaXRlbS0+c2V0VW5zaWduZWRMb25nTG9uZ0F0dHIodmFsdWUpOwotfQotCi1nY2hhcioKLXdl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5n
KGl0ZW0tPnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0
X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQot
Ci1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfdGVzdF9vYmpfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+dGVzdE9iakF0
dHIoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0
KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiog
dmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9
IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsK
LSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBp
dGVtLT5zZXRUZXN0T2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0
T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT54bWxPYmpBdHRyKCkpOwotICAgIFdlYktp
dERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4g
cmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF94bWxfb2JqX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCi17Ci0gICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNv
bnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAgICAgICAg
Y29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRYTUxPYmpBdHRy
KGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdib29sZWFuCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2Jvb2xlYW4gcmVzID0gaXRlbS0+aXNDcmVhdGUoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jcmVhdGUoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q3JlYXRlKHZhbHVl
KTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5n
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2No
YXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gcmVzOwot
fQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIGNvbnZlcnRl
ZF92YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRf
aW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
LSAgICBnbG9uZyByZXMgPSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2Zh
aWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0t
PnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdy
YWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1ndWxvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3JlZmxlY3RlZF91bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGd1bG9uZyByZXMgPSBpdGVtLT5nZXRVbnNpZ25lZElu
dGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRl
Z3JhbGF0dHJBdHRyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX3NldF9yZWZsZWN0ZWRfdW5zaWduZWRfaW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBndWxvbmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
LSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0VW5zaWdu
ZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVk
aW50ZWdyYWxhdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwotICAgIHJldHVy
biByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9ib29s
ZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFsdWUpCi17Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7Ci0gICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nY2hhcioKLXdlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhp
dGVtLT5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRy
QXR0cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpf
c2V0X3JlZmxlY3RlZF91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hh
ciogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAg
V1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKLSAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1
cmxhdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9yZWZsZWN0ZWRfc3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX3N0cmluZ19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVl
KTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodmFsdWUpOwotICAgIGl0ZW0tPnNldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKLX0KLQotZ2xvbmcK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMg
PSBpdGVtLT5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRJbnRlZ3JhbEF0dHJBdHRyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2ludGVncmFsX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2Vi
Q29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdy
YWxBdHRyQXR0ciwgdmFsdWUpOwotfQotCi1nYm9vbGVhbgotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVmbGVjdGVkX2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2Jvb2xlYW4gcmVzID0gaXRlbS0+aGFzQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVk
X2N1c3RvbV9ib29sZWFuX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2Jvb2xlYW4gdmFs
dWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIHZhbHVlKTsKLX0KLQotZ2No
YXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX3VybF9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMg
PSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwotICAgIHJldHVybiByZXM7Ci19Ci0K
LXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF92
YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgaXRlbS0+c2V0QXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBjb252ZXJ0
ZWRfdmFsdWUpOwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRo
X2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3Ip
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGdsb25nIHJlcyA9IGl0ZW0tPmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfYXR0cl93
aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUs
IEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGl0ZW0tPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKHZhbHVlLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlv
biBlY2Rlc2MoZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJr
X2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0g
ICAgfQotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXR0cl93aXRoX3NldHRl
cl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0g
ICAgZ2xvbmcgcmVzID0gaXRlbS0+YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKTsKLSAgICByZXR1
cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfc2V0
dGVyX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9y
ICoqZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaXRlbS0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVz
YyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9z
dHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19
Ci0KLWdjaGFyKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5nX2F0dHJfd2l0aF9nZXR0
ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBn
Y2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihlYykpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJvciAqKmVycm9yKQotewotICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdURjo6U3RyaW5nIGNvbnZl
cnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oY29udmVydGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1nY2hhcioKLXdlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzID0gY29u
dmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
LSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJp
bmdfYXR0cl93aXRoX3NldHRlcl9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29u
c3QgZ2NoYXIqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdmFsdWUgPSBXVEY6
OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOwotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGl0ZW0tPnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKGNvbnZlcnRl
ZF92YWx1ZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChl
cnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNk
ZXNjLm5hbWUpOwotICAgIH0KLX0KLQotZ2xvbmcKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dp
dGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xv
bmcgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKHZhbHVlKTsKLX0KLQotV2ViS2l0RE9NVGVzdE9iaioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRl
c3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQo
Z19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZShXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVRl
c3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGVf
cmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoqIHZhbHVlLCBH
RXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsK
LSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAo
dmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUo
dmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAg
fQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGl0ZW0tPnNldFdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhl
Yyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJp
bmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKLSAgICB9Ci19Ci0K
LVdlYktpdERPTVRlc3RPYmoqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9l
eGVjdXRpb25fY29udGV4dF9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IEdFcnJvciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXMoZWMpKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7Ci0gICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKLSAgICB9Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJpYnV0ZV9yYWlzZXMoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAqKmVy
cm9yKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBO
VUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0g
ICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOwotICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQot
Ci1XZWJLaXRET01UZXN0T2JqKgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpU
ZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKSk7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogcmVz
ID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQK
LXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2Fu
ZF9zY3JpcHRfc3RhdGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TVRlc3RPYmoqIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUp
OwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlm
ICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29y
ZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAg
ICB9Ci0gICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZShjb252ZXJ0ZWRfdmFsdWUpOwotfQotCi1XZWJLaXRET01UZXN0T2JqKgotd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3Nj
cmlwdF9zdGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
ciAqKmVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZVJhaXNlcyhlYykpOwotICAgIGlmIChlYykgewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKLSAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJh
bChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwg
ZWNkZXNjLm5hbWUpOwotICAgIH0KLSAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6
OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9z
dGF0ZV9hdHRyaWJ1dGVfcmFpc2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRl
c3RPYmoqIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9p
Zl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0g
TlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF92YWx1ZSk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoY29udmVydGVkX3ZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOwotICAgICAgICBnX3Nl
dF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiks
IGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7Ci0gICAgfQotfQotCi1XZWJLaXRET01UZXN0T2Jq
Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRf
YW5kX3NjcmlwdF9zdGF0ZV93aXRoX3NwYWNlc19hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCkpOwotICAgIFdlYktpdERPTVRlc3RPYmoq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4
dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhfc3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVl
ID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFs
dWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZl
cnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKGNvbnZlcnRlZF92YWx1ZSk7Ci19
Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMShXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5jb25kaXRpb25hbEF0dHIxKCk7Ci0gICAgcmV0
dXJuIHJlczsKLSNlbHNlCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdsb25nPigwKTsKLSNlbmRp
ZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9zZXRfY29uZGl0aW9uYWxfYXR0cjEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFs
dWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Q29u
ZGl0aW9uYWxBdHRyMSh2YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi19
Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMihXZWJL
aXRET01UZXN0T2JqKiBzZWxmKQotewotI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMikKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0
aW9uYWxBdHRyMigpOwotICAgIHJldHVybiByZXM7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxnbG9uZz4oMCk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKSAqLwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRp
b25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKLXsKLSNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5faWZf
ZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0g
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRl
bS0+c2V0Q29uZGl0aW9uYWxBdHRyMih2YWx1ZSk7Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotfQotCi1nbG9uZwotd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSNp
ZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjMoKTsKLSAgICByZXR1cm4g
cmVzOwotI2Vsc2UKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+KDApOwotI2VuZGlmIC8q
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KLX0KLQotdm9pZAot
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfY29uZGl0aW9uYWxfYXR0cjMoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgZ2xvbmcgdmFsdWUpCi17Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjModmFs
dWUpOwotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KLX0KLQotV2ViS2l0RE9NRG9jdW1lbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb250
ZW50X2RvY3VtZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRl
bS0+Y29udGVudERvY3VtZW50KCkpOwotICAgIFdlYktpdERPTURvY3VtZW50KiByZXMgPSBXZWJL
aXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotV2ViS2l0RE9NU1ZH
UG9pbnQqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9tdXRhYmxlX3BvaW50KFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U1ZHUG9pbnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+bXV0YWJsZVBvaW50KCkpOwotICAg
IFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfbXV0YWJsZV9w
b2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TVkdQb2ludCogdmFsdWUpCi17
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAgV2ViQ29yZTo6U1ZH
UG9pbnQgKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7
Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0
TXV0YWJsZVBvaW50KGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLVdlYktpdERPTVNWR1BvaW50Kgot
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfaW1tdXRhYmxlX3BvaW50KFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U1ZHUG9p
bnQ+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+aW1tdXRhYmxlUG9pbnQoKSk7Ci0gICAgV2Vi
S2l0RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1
cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9pbW11dGFibGVfcG9p
bnQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQotewot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6OlNWR1Bv
aW50ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewot
ICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBn
X3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldElt
bXV0YWJsZVBvaW50KGNvbnZlcnRlZF92YWx1ZSk7Ci19Ci0KLWdpbnQKLXdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3N0cmF3YmVycnkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7Ci0gICAgZ2ludCByZXMgPSBpdGVtLT5ibHVlYmVycnkoKTsKLSAgICByZXR1cm4gcmVz
OwotfQotCi12b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJhd2JlcnJ5KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdpbnQgdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgaXRlbS0+c2V0Qmx1
ZWJlcnJ5KHZhbHVlKTsKLX0KLQotZ2Zsb2F0Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJp
Y3RfZmxvYXQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAg
Z2Zsb2F0IHJlcyA9IGl0ZW0tPnN0cmljdEZsb2F0KCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQot
dm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdmbG9hdCB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBpdGVtLT5zZXRTdHJpY3RG
bG9hdCh2YWx1ZSk7Ci19Ci0KLWdsb25nCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlw
dGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnbG9u
ZyByZXMgPSBpdGVtLT5kZXNjcmlwdGlvbigpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLWdsb25n
Ci13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewot
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKLSAgICBnbG9uZyByZXMgPSBpdGVtLT5pZCgpOwotICAgIHJldHVybiBy
ZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2lkKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdsb25nIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGl0ZW0tPnNldElkKHZhbHVl
KTsKLX0KLQotZ2NoYXIqCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9oYXNoKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0
VG9VVEY4U3RyaW5nKGl0ZW0tPmhhc2goKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotCi1HX0RF
RklORV9UWVBFKFdlYktpdERPTVRlc3RPYmosIHdlYmtpdF9kb21fdGVzdF9vYmosIFdFQktJVF9U
WVBFX0RPTV9PQkpFQ1QpCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1XZWJDb3JlOjpUZXN0T2Jq
KiBjb3JlKFdlYktpdERPTVRlc3RPYmoqIHJlcXVlc3QpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwocmVxdWVzdCwgMCk7Ci0KLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBjb3JlT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE9iaio+KFdFQktJVF9ET01fT0JKRUNUKHJlcXVlc3Qp
LT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChjb3JlT2JqZWN0LCAwKTsK
LQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLWVu
dW0gewotICAgIFBST1BfMCwKLSAgICBQUk9QX1JFQURfT05MWV9JTlRfQVRUUiwKLSAgICBQUk9Q
X1JFQURfT05MWV9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1JFQURfT05MWV9URVNUX09CSl9BVFRS
LAotICAgIFBST1BfU0hPUlRfQVRUUiwKLSAgICBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFIsCi0g
ICAgUFJPUF9JTlRfQVRUUiwKLSAgICBQUk9QX0xPTkdfTE9OR19BVFRSLAotICAgIFBST1BfVU5T
SUdORURfTE9OR19MT05HX0FUVFIsCi0gICAgUFJPUF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1RF
U1RfT0JKX0FUVFIsCi0gICAgUFJPUF9YTUxfT0JKX0FUVFIsCi0gICAgUFJPUF9DUkVBVEUsCi0g
ICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCi0gICAgUFJPUF9SRUZMRUNURURfSU5URUdS
QUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSLAotICAg
IFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRU
UiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9D
VVNUT01fSU5URUdSQUxfQVRUUiwKLSAgICBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9B
VFRSLAotICAgIFBST1BfUkVGTEVDVEVEX0NVU1RPTV9VUkxfQVRUUiwKLSAgICBQUk9QX0FUVFJf
V0lUSF9HRVRURVJfRVhDRVBUSU9OLAotICAgIFBST1BfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJ
T04sCi0gICAgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT04sCi0gICAgUFJP
UF9TVFJJTkdfQVRUUl9XSVRIX1NFVFRFUl9FWENFUFRJT04sCi0gICAgUFJPUF9XSVRIX1NDUklQ
VF9TVEFURV9BVFRSSUJVVEUsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVY
VF9BVFRSSUJVVEUsCi0gICAgUFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEVfUkFJU0VT
LAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNF
UywKLSAgICBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RB
VEVfQVRUUklCVVRFLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQU5E
X1NDUklQVF9TVEFURV9BVFRSSUJVVEVfUkFJU0VTLAotICAgIFBST1BfV0lUSF9TQ1JJUFRfRVhF
Q1VUSU9OX0NPTlRFWFRfQU5EX1NDUklQVF9TVEFURV9XSVRIX1NQQUNFU19BVFRSSUJVVEUsCi0g
ICAgUFJPUF9XSVRIX1NDUklQVF9BUkdVTUVOVFNfQU5EX0NBTExfU1RBQ0tfQVRUUklCVVRFLAot
I2lmIEVOQUJMRShDb25kaXRpb24xKQotICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjEsCi0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi0jaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVO
QUJMRShDb25kaXRpb24yKQotICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjIsCi0jZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwotI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBQUk9QX0NPTkRJVElPTkFMX0FU
VFIzLAotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KLSAgICBQUk9QX0NPTlRFTlRfRE9DVU1FTlQsCi0gICAgUFJPUF9NVVRBQkxFX1BPSU5ULAot
ICAgIFBST1BfSU1NVVRBQkxFX1BPSU5ULAotICAgIFBST1BfU1RSQVdCRVJSWSwKLSAgICBQUk9Q
X1NUUklDVF9GTE9BVCwKLSAgICBQUk9QX0RFU0NSSVBUSU9OLAotICAgIFBST1BfSUQsCi0gICAg
UFJPUF9IQVNILAotfTsKLQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXZWJLaXRET01PYmplY3QqIGRvbV9vYmplY3Qg
PSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwotICAgIAotICAgIGlmIChkb21fb2JqZWN0LT5j
b3JlT2JqZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVPYmplY3QgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpUZXN0T2JqICo+KGRvbV9vYmplY3QtPmNvcmVPYmplY3QpOwotCi0g
ICAgICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChjb3JlT2JqZWN0KTsKLSAgICAg
ICAgY29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAgICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9p
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYktpdERPTVRlc3RPYmoqIHNl
bGYgPSBXRUJLSVRfRE9NX1RFU1RfT0JKKG9iamVjdCk7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiog
Y29yZVNlbGYgPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgc3dpdGNoIChwcm9wX2lkKSB7Ci0g
ICAgY2FzZSBQUk9QX1VOU0lHTkVEX1NIT1JUX0FUVFI6Ci0gICAgewotICAgICAgICBjb3JlU2Vs
Zi0+c2V0VW5zaWduZWRTaG9ydEF0dHIoKGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfSU5UX0FUVFI6Ci0gICAgewotICAgICAg
ICBjb3JlU2VsZi0+c2V0SW50QXR0cigoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRVbnNpZ25lZExvbmdMb25nQXR0cigoZ192YWx1
ZV9nZXRfdWludDY0KHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQ
Uk9QX1NUUklOR19BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldFN0cmluZ0F0dHIo
V1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DUkVBVEU6Ci0gICAgewotICAgICAgICBj
b3JlU2VsZi0+c2V0Q3JlYXRlKChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAg
ICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0
X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9S
RUZMRUNURURfSU5URUdSQUxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRJbnRl
Z3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0
dHIsIChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9VTlNJR05FRF9JTlRFR1JBTF9BVFRSOgotICAgIHsKLSAg
ICAgICAgY29yZVNlbGYtPnNldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIsIChnX3ZhbHVlX2dldF91
bG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZM
RUNURURfQk9PTEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldEJvb2xlYW5B
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIChn
X3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBQUk9QX1JFRkxFQ1RFRF9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5z
ZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgV1RG
OjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFI6Ci0gICAg
ewotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3Vz
dG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9Q
X1JFRkxFQ1RFRF9DVVNUT01fSU5URUdSQUxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxm
LT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJ
bnRlZ3JhbEF0dHJBdHRyLCAoZ192YWx1ZV9nZXRfbG9uZyh2YWx1ZSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX0JPT0xFQU5fQVRUUjoK
LSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciwgKGdfdmFsdWVfZ2V0X2Jvb2xl
YW4odmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVD
VEVEX0NVU1RPTV9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIFBST1BfQVRUUl9XSVRIX0dFVFRFUl9FWENFUFRJT046Ci0gICAg
ewotICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgY29yZVNl
bGYtPnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9BVFRSX1dJVEhfU0VU
VEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKGdfdmFs
dWVfZ2V0X2xvbmcodmFsdWUpKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBQUk9QX1NUUklOR19BVFRSX1dJVEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAg
IFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBjb3JlU2VsZi0+c2V0U3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdfdmFsdWVf
Z2V0X3N0cmluZyh2YWx1ZSkpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFBST1BfU1RSSU5HX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ192YWx1ZV9n
ZXRfc3RyaW5nKHZhbHVlKSksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
UFJPUF9XSVRIX1NDUklQVF9TVEFURV9BVFRSSUJVVEU6Ci0gICAgewotICAgICAgICBjb3JlU2Vs
Zi0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0jaWYgRU5BQkxFKENvbmRpdGlvbjEpCi0gICAgY2Fz
ZSBQUk9QX0NPTkRJVElPTkFMX0FUVFIxOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldENv
bmRpdGlvbmFsQXR0cjEoKGdfdmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KLSNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCi0gICAgY2FzZSBQUk9QX0NPTkRJVElPTkFM
X0FUVFIyOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldENvbmRpdGlvbmFsQXR0cjIoKGdf
dmFsdWVfZ2V0X2xvbmcodmFsdWUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICovCi0jaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQotICAgIGNhc2UgUFJPUF9DT05ESVRJ
T05BTF9BVFRSMzoKLSAgICB7Ci0gICAgICAgIGNvcmVTZWxmLT5zZXRDb25kaXRpb25hbEF0dHIz
KChnX3ZhbHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLwotICAgIGNh
c2UgUFJPUF9TVFJJQ1RfRkxPQVQ6Ci0gICAgewotICAgICAgICBjb3JlU2VsZi0+c2V0U3RyaWN0
RmxvYXQoKGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBQUk9QX0lEOgotICAgIHsKLSAgICAgICAgY29yZVNlbGYtPnNldElkKChnX3Zh
bHVlX2dldF9sb25nKHZhbHVlKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJv
cF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiA9IFdFQktJVF9ET01fVEVTVF9PQkoob2JqZWN0KTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqKiBj
b3JlU2VsZiA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBzd2l0Y2ggKHByb3BfaWQpIHsKLSAg
ICBjYXNlIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9z
ZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPnJlYWRPbmx5SW50QXR0cigpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUFEX09OTFlfU1RSSU5HX0FUVFI6Ci0gICAgewot
ICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNv
cmVTZWxmLT5yZWFkT25seVN0cmluZ0F0dHIoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1JFQURfT05MWV9URVNUX09CSl9BVFRSOgotICAgIHsKLSAgICAgICAgUmVm
UHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT5yZWFkT25seVRlc3RPYmpBdHRy
KCk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdl
dCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfU0hPUlRfQVRUUjoK
LSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgY29yZVNlbGYtPnNob3J0QXR0
cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9VTlNJR05FRF9TSE9S
VF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgY29yZVNlbGYt
PnVuc2lnbmVkU2hvcnRBdHRyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQ
Uk9QX0lOVF9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29y
ZVNlbGYtPmludEF0dHIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1Bf
TE9OR19MT05HX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9pbnQ2NCh2YWx1ZSwg
Y29yZVNlbGYtPmxvbmdMb25nQXR0cigpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9VTlNJR05FRF9MT05HX0xPTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQ2NCh2YWx1ZSwgY29yZVNlbGYtPnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSOgotICAgIHsKLSAg
ICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhjb3Jl
U2VsZi0+c3RyaW5nQXR0cigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBS
T1BfVEVTVF9PQkpfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBwdHIgPSBjb3JlU2VsZi0+dGVzdE9iakF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FUVFI6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0dHIoKTsKLSAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9DUkVBVEU6Ci0gICAgewotICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aXNDcmVhdGUoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklOR19BVFRSOgotICAgIHsK
LSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhj
b3JlU2VsZi0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5n
YXR0ckF0dHIpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfUkVGTEVD
VEVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVl
LCBjb3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFBST1BfUkVGTEVDVEVEX1VOU0lHTkVEX0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBn
X3ZhbHVlX3NldF91bG9uZyh2YWx1ZSwgY29yZVNlbGYtPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0
dHIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQk9P
TEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29y
ZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5h
dHRyQXR0cikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1JFRkxFQ1RF
RF9VUkxfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNv
bnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjoKLSAgICB7Ci0gICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmdldEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9N
X0lOVEVHUkFMX0FUVFI6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZhbHVlLCBj
b3JlU2VsZi0+Z2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBQUk9QX1JFRkxFQ1RFRF9DVVNUT01fQk9PTEVBTl9BVFRSOgotICAgIHsKLSAgICAgICAgZ192
YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29yZVNlbGYtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9SRUZMRUNURURfQ1VTVE9NX1VSTF9BVFRSOgotICAgIHsK
LSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgY29udmVydFRvVVRGOFN0cmluZyhj
b3JlU2VsZi0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFVSTEF0dHJBdHRyKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX0FU
VFJfV0lUSF9HRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxm
LT5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQUk9QX0FUVFJfV0lUSF9TRVRURVJfRVhDRVBUSU9OOgotICAgIHsKLSAgICAgICAg
Z192YWx1ZV9zZXRfbG9uZyh2YWx1ZSwgY29yZVNlbGYtPmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1NUUklOR19BVFRSX1dJ
VEhfR0VUVEVSX0VYQ0VQVElPTjoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCBjb252ZXJ0VG9V
VEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9TVFJJTkdfQVRUUl9XSVRIX1NF
VFRFUl9FWENFUFRJT046Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbigpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJ
UFRfU1RBVEVfQVRUUklCVVRFOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRfbG9uZyh2YWx1
ZSwgY29yZVNlbGYtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BVFRS
SUJVVEU6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29y
ZVNlbGYtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCk7Ci0gICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRF
X1JBSVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhlYyk7Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFBST1BfV0lUSF9TQ1JJUFRfRVhFQ1VUSU9OX0NPTlRFWFRfQVRUUklCVVRFX1JBSVNF
UzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKGVjKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUFJPUF9XSVRIX1NDUklQVF9FWEVDVVRJT05fQ09OVEVYVF9BTkRfU0NSSVBU
X1NUQVRFX0FUVFJJQlVURToKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2Jq
PiBwdHIgPSBjb3JlU2VsZi0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6
a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJ
VEhfU0NSSVBUX0VYRUNVVElPTl9DT05URVhUX0FORF9TQ1JJUFRfU1RBVEVfQVRUUklCVVRFX1JB
SVNFUzoKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoZWMpOwotICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0VYRUNVVElPTl9D
T05URVhUX0FORF9TQ1JJUFRfU1RBVEVfV0lUSF9TUEFDRVNfQVRUUklCVVRFOgotICAgIHsKLSAg
ICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgpOwotICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX1dJVEhfU0NSSVBUX0FSR1VNRU5U
U19BTkRfQ0FMTF9TVEFDS19BVFRSSUJVVEU6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6
OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2lmIEVOQUJMRShDb25k
aXRpb24xKQotICAgIGNhc2UgUFJPUF9DT05ESVRJT05BTF9BVFRSMToKLSAgICB7Ci0gICAgICAg
IGdfdmFsdWVfc2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIxKCkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCi0j
aWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQotICAgIGNhc2UgUFJP
UF9DT05ESVRJT05BTF9BVFRSMjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xvbmcodmFs
dWUsIGNvcmVTZWxmLT5jb25kaXRpb25hbEF0dHIyKCkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0jZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLwot
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKLSAgICBjYXNlIFBS
T1BfQ09ORElUSU9OQUxfQVRUUjM6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9sb25nKHZh
bHVlLCBjb3JlU2VsZi0+Y29uZGl0aW9uYWxBdHRyMygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8K
LSAgICBjYXNlIFBST1BfQ09OVEVOVF9ET0NVTUVOVDoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxX
ZWJDb3JlOjpEb2N1bWVudD4gcHRyID0gY29yZVNlbGYtPmNvbnRlbnREb2N1bWVudCgpOwotICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQUk9QX01VVEFCTEVfUE9JTlQ6Ci0gICAg
ewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0ciA9IGNvcmVTZWxmLT5tdXRh
YmxlUG9pbnQoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6Omtp
dChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JTU1V
VEFCTEVfUE9JTlQ6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6U1ZHUG9pbnQ+IHB0
ciA9IGNvcmVTZWxmLT5pbW11dGFibGVQb2ludCgpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgY2FzZSBQUk9QX1NUUkFXQkVSUlk6Ci0gICAgewotICAgICAgICBnX3ZhbHVlX3NldF9p
bnQodmFsdWUsIGNvcmVTZWxmLT5ibHVlYmVycnkoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFBST1BfU1RSSUNUX0ZMT0FUOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV9zZXRf
ZmxvYXQodmFsdWUsIGNvcmVTZWxmLT5zdHJpY3RGbG9hdCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgUFJPUF9ERVNDUklQVElPTjoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVf
c2V0X2xvbmcodmFsdWUsIGNvcmVTZWxmLT5kZXNjcmlwdGlvbigpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgUFJPUF9JRDoKLSAgICB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2xv
bmcodmFsdWUsIGNvcmVTZWxmLT5pZCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgUFJPUF9IQVNIOgotICAgIHsKLSAgICAgICAgZ192YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwg
Y29udmVydFRvVVRGOFN0cmluZyhjb3JlU2VsZi0+aGFzaCgpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0K
LQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnN0cnVjdGVkKEdPYmplY3Qq
IG9iamVjdCkKLXsKLQotICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQotICAgICAgICBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0
T2JqQ2xhc3MqIHJlcXVlc3RDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7Ci0gICAgZ29iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZmluYWxpemU7Ci0gICAgZ29iamVjdENsYXNzLT5z
ZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9wcm9wZXJ0eTsKLSAgICBnb2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5
OwotICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2Nv
bnN0cnVjdGVkOworICAgIEdPYmplY3RDbGFzcyAqZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MocmVxdWVzdENsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X2Rv
bV90ZXN0X29ial9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENs
YXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9kb21fdGVzdF9vYmpfY29uc3RydWN0ZWQ7CiAKICAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkVBRF9PTkxZX0lOVF9BVFRSLApAQCAt
MjMwNCwxMjIgKzg0NiwxNjEyIEBAIEdfTUFYTE9ORywgLyogbWF4ICovCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBF
X0RPTV9URVNUX09CSiwgLyogZ29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiY29uZGl0aW9uYWwtYXR0cjEiLCAvKiBuYW1lICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0X29ial9jb25kaXRpb25hbC1hdHRyMSIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlvbmFsLWF0dHIxIiwgLyogbG9u
Z2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlO
TE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0NPTkRJVElPTkFMX0FUVFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2xvbmcoImNvbmRpdGlvbmFsLWF0dHIxIiwgLyogbmFtZSAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGVzdF9vYmpfY29uZGl0aW9uYWwtYXR0cjEiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVhZC13cml0ZSAgZ2xvbmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMSIsIC8qIGxvbmdl
ciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxP
TkcsIC8qIG1pbiAqLworR19NQVhMT05HLCAvKiBtYXggKi8KKzAsIC8qIGRlZmF1bHQgKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAq
LworI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiY29uZGl0aW9uYWwt
YXR0cjIiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jb25kaXRpb25hbC1hdHRyMiIsIC8qIHNo
b3J0IGRlc2NyaXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlv
bmFsLWF0dHIyIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVm
ZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCitHX01BWExPTkcsIC8qIG1heCAqLwor
MCwgLyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisjZW5kaWYgLyog
RU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfQ09ORElUSU9OQUxfQVRUUjMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBuYW1l
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0ZXN0X29ial9jb25kaXRpb25hbC1hdHRyMyIsIC8qIHNob3J0IGRlc2NyaXB0aW9u
ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJyZWFkLXdyaXRlICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlvbmFsLWF0dHIzIiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUlOTE9ORywgLyogbWluICovCitHX01BWExPTkcsIC8qIG1heCAqLworMCwgLyogZGVmYXVsdCAq
LworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9DT05URU5UX0RPQ1VNRU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiY29udGVudC1kb2N1bWVudCIsIC8qIG5hbWUgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRlc3Rfb2JqX2NvbnRlbnQtZG9jdW1lbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicmVhZC1vbmx5ICBXZWJLaXRET01Eb2N1bWVudCogVGVzdE9iai5jb250ZW50LWRvY3VtZW50
IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX0RPTV9ET0NVTUVOVCwgLyogZ29iamVjdCB0eXBlICovCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9N
VVRBQkxFX1BPSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX29iamVjdCgibXV0YWJsZS1wb2ludCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX211
dGFibGUtcG9pbnQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgV2Vi
S2l0RE9NU1ZHUG9pbnQqIFRlc3RPYmoubXV0YWJsZS1wb2ludCIsIC8qIGxvbmdlciAtIGNvdWxk
IGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01f
U1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkp
OworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JTU1VVEFCTEVfUE9JTlQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJp
bW11dGFibGUtcG9pbnQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9pbW11dGFibGUtcG9pbnQi
LCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9NU1ZHUG9p
bnQqIFRlc3RPYmouaW1tdXRhYmxlLXBvaW50IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBz
b21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9TVkdfUE9JTlQs
IC8qIGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NUUkFXQkVSUlksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KCJzdHJhd2JlcnJ5IiwgLyogbmFt
ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGVzdF9vYmpfc3RyYXdiZXJyeSIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZWFkLXdyaXRlICBnaW50IFRlc3RPYmouc3RyYXdiZXJyeSIsIC8qIGxvbmdlciAtIGNvdWxk
IGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTklOVCwgLyogbWlu
ICovCitHX01BWElOVCwgLyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSUNU
X0ZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2Zsb2F0KCJzdHJpY3QtZmxvYXQiLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9zdHJpY3QtZmxv
YXQiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2Zsb2F0IFRlc3RP
Ymouc3RyaWN0LWZsb2F0IiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRv
YyBzdHVmZiBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULCAvKiBtaW4gKi8KK0dfTUFYRkxPQVQsIC8q
IG1heCAqLworMC4wLCAvKiBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVTQ1JJUFRJT04sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiZGVzY3JpcHRp
b24iLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9kZXNjcmlwdGlvbiIsIC8qIHNob3J0IGRlc2Ny
aXB0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZWFkLW9ubHkgIGdsb25nIFRlc3RPYmouZGVzY3JpcHRpb24iLCAvKiBs
b25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19N
SU5MT05HLCAvKiBtaW4gKi8KK0dfTUFYTE9ORywgLyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19sb25nKCJpZCIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX2lkIiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIGdsb25nIFRlc3RPYmouaWQiLCAvKiBsb25nZXIg
LSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NSU5MT05H
LCAvKiBtaW4gKi8KK0dfTUFYTE9ORywgLyogbWF4ICovCiswLCAvKiBkZWZhdWx0ICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfSEFTSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19zdHJpbmcoImhhc2giLCAvKiBuYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9oYXNoIiwgLyogc2hvcnQg
ZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgZ2NoYXIqIFRlc3RPYmouaGFzaCIsIC8qIGxv
bmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwg
LyogZGVmYXVsdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfaW5pdChXZWJLaXRET01UZXN0T2JqKiByZXF1ZXN0
KQoreworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+dm9pZE1ldGhvZCgpOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3ZvaWRfbWV0aG9kX3dpdGhfYXJncyhXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBnbG9uZyBpbnRfYXJnLCBjb25zdCBnY2hhciogc3RyX2FyZywgV2Vi
S2l0RE9NVGVzdE9iaiogb2JqX2FyZykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHN0cl9hcmcpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob2JqX2FyZyk7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyX2FyZyk7Cisg
ICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVMTDsKKyAgICBpZiAo
b2JqX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9vYmpfYXJnID0gV2ViS2l0Ojpj
b3JlKG9ial9hcmcpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vYmpfYXJn
KTsKKyAgICB9CisgICAgaXRlbS0+dm9pZE1ldGhvZFdpdGhBcmdzKGludF9hcmcsIGNvbnZlcnRl
ZF9zdHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZyk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2ludF9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+aW50TWV0aG9kKCk7CisgICAgcmV0dXJuIHJlczsK
K30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfaW50X21ldGhvZF93aXRoX2FyZ3MoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcs
IFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9i
al9hcmcsIDApOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHN0cl9hcmcpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRf
b2JqX2FyZyA9IE5VTEw7CisgICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKKyAgICAgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOworICAgIH0KKyAgICBnbG9uZyByZXMg
PSBpdGVtLT5pbnRNZXRob2RXaXRoQXJncyhpbnRfYXJnLCBjb252ZXJ0ZWRfc3RyX2FyZywgY29u
dmVydGVkX29ial9hcmcpOworICAgIHJldHVybiByZXM7Cit9CisKK1dlYktpdERPTVRlc3RPYmoq
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3Jl
cyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm9iak1ldGhvZCgpKTsKKyAgICBXZWJLaXRET01UZXN0T2Jq
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwor
V2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2Fy
Z3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywgY29uc3QgZ2NoYXIqIHN0
cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0cl9hcmcsIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKG9ial9hcmcsIDApOworICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9zdHJfYXJnID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHN0cl9hcmcpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252
ZXJ0ZWRfb2JqX2FyZyA9IE5VTEw7CisgICAgaWYgKG9ial9hcmcgIT0gTlVMTCkgeworICAgICAg
ICBjb252ZXJ0ZWRfb2JqX2FyZyA9IFdlYktpdDo6Y29yZShvYmpfYXJnKTsKKyAgICAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoY29udmVydGVkX29ial9hcmcsIDApOworICAgIH0KKyAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+b2JqTWV0
aG9kV2l0aEFyZ3MoaW50X2FyZywgY29udmVydGVkX3N0cl9hcmcsIGNvbnZlcnRlZF9vYmpfYXJn
KSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkp
OworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9k
X3dpdGhfc2VxdWVuY2VfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTXNlcXVl
bmNlKiApCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCgpOworICAgIFdlYkNvcmU6
OnNlcXVlbmNlICogY29udmVydGVkXyA9IE5VTEw7CisgICAgaWYgKCAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF8gPSBXZWJLaXQ6OmNvcmUoKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfKTsKKyAgICB9CisgICAgaXRlbS0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKGNv
bnZlcnRlZF8pOworfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIGNvbnN0IGdjaGFyKiBzdHJfYXJnLCBXZWJLaXRET01UZXN0T2JqKiBvYmpfYXJnLCBH
RXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc3RyX2FyZywgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwob2JqX2FyZywgMCk7Cisg
ICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0cl9hcmcgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyX2FyZyk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRlZF9vYmpfYXJnID0gTlVM
TDsKKyAgICBpZiAob2JqX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9vYmpfYXJn
ID0gV2ViS2l0Ojpjb3JlKG9ial9hcmcpOworICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
b252ZXJ0ZWRfb2JqX2FyZywgMCk7CisgICAgfQorICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT5tZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnZlcnRlZF9z
dHJfYXJnLCBjb252ZXJ0ZWRfb2JqX2FyZywgZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdf
c2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00i
KSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9i
aiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2VyaWFsaXplZF92YWx1ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6ZWRfYXJn
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VyaWFsaXplZF9hcmcpOworICAg
IFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9zZXJpYWxpemVkX2Fy
ZyA9IE5VTEw7CisgICAgaWYgKHNlcmlhbGl6ZWRfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgY29u
dmVydGVkX3NlcmlhbGl6ZWRfYXJnID0gV2ViS2l0Ojpjb3JlKHNlcmlhbGl6ZWRfYXJnKTsKKyAg
ICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2VyaWFsaXplZF9hcmcpOworICAgIH0K
KyAgICBpdGVtLT5zZXJpYWxpemVkVmFsdWUoY29udmVydGVkX3NlcmlhbGl6ZWRfYXJnKTsKK30K
Kwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTUlEQktleSoga2V5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoa2V5KTsKKyAgICBXZWJDb3JlOjpJREJLZXkgKiBjb252ZXJ0ZWRfa2V5ID0gTlVMTDsKKyAg
ICBpZiAoa2V5ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX2tleSA9IFdlYktpdDo6Y29y
ZShrZXkpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9rZXkpOworICAgIH0K
KyAgICBpdGVtLT5pZGJLZXkoY29udmVydGVkX2tleSk7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
RGljdGlvbmFyeSogb28sIFdlYktpdERPTURpY3Rpb25hcnkqIG9vbykKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKG9vKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7CisgICAg
V2ViQ29yZTo6RGljdGlvbmFyeSAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7CisgICAgaWYgKG9vICE9
IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsKKyAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28pOworICAgIH0KKyAgICBXZWJDb3JlOjpE
aWN0aW9uYXJ5ICogY29udmVydGVkX29vbyA9IE5VTEw7CisgICAgaWYgKG9vbyAhPSBOVUxMKSB7
CisgICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKKyAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKKyAgICB9CisgICAgaXRlbS0+b3B0aW9uc09i
amVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9vb28pOworfQorCit2b2lkCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBH
RXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5tZXRob2RXaXRoRXhjZXB0aW9uKGVjKTsKKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7Cisg
ICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldF
QktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK3ZvaWQK
K3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZChXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPndpdGhTY3JpcHRTdGF0ZVZvaWQoKTsK
K30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
c3RhdGVfb2JqKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53
aXRoU2NyaXB0U3RhdGVPYmooKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0
OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfd2l0aF9zY3JpcHRfc3RhdGVfdm9pZF9leGNlcHRpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlv
bihlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBn
X3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFt
ZSk7CisgICAgfQorfQorCitXZWJLaXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial93
aXRoX3NjcmlwdF9zdGF0ZV9vYmpfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdF
cnJvciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RG
OjpnZXRQdHIoaXRlbS0+d2l0aFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKGVjKSk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorICAg
IFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4
ZWN1dGlvbl9jb250ZXh0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
aXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRl
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgpOworfQorCitXZWJLaXRET01UZXN0T2Jq
Kgord2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRf
c2NyaXB0X3N0YXRlX29ial9leGNlcHRpb24oV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9y
ICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhj
ZXB0aW9uKGVjKSk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBlY2Rlc2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVy
cm9yLCBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rl
c2MubmFtZSk7CisgICAgfQorICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitXZWJLaXRET01UZXN0T2JqKgor
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2Ny
aXB0X3N0YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlcygpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5n
ZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9vcHRpb25hbF9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgb3B0
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbEFyZyhvcHQpOworfQor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX25vbl9vcHRpb25hbF9hcmdf
YW5kX29wdGlvbmFsX2FyZyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBn
bG9uZyBvcHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kT3B0aW9uYWxBcmcobm9uX29wdCwgb3B0KTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9tZXRob2Rfd2l0aF9ub25fb3B0aW9uYWxfYXJnX2FuZF90d29fb3B0aW9uYWxfYXJncyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBub25fb3B0LCBnbG9uZyBvcHQxLCBnbG9uZyBv
cHQyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3
b09wdGlvbmFsQXJncyhub25fb3B0LCBvcHQxLCBvcHQyKTsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHN0cik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9t
VVRGOChzdHIpOworICAgIGl0ZW0tPm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhjb252ZXJ0ZWRf
c3RyKTsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25h
bF9zdHJpbmdfaXNfdW5kZWZpbmVkKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFy
KiBzdHIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOworICAgIFdURjo6
U3RyaW5nIGNvbnZlcnRlZF9zdHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKKyAgICBp
dGVtLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChjb252ZXJ0ZWRfc3RyKTsK
K30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rfd2l0aF9vcHRpb25hbF9zdHJp
bmdfaXNfbnVsbF9zdHJpbmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0
cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHN0cik7CisgICAgV1RGOjpTdHJp
bmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOworICAgIGl0ZW0t
Pm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyhjb252ZXJ0ZWRfc3RyKTsKK30K
KworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDEoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+Y29uZGl0aW9u
YWxNZXRob2QxKCkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIHJldHVybiBOVUxMOworI2VuZGlm
IC8qIEVOQUJMRShDb25kaXRpb24xKSAqLworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2NvbmRpdGlvbmFsX21ldGhvZDIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+
Y29uZGl0aW9uYWxNZXRob2QyKCk7CisjZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgor
I2lmICFFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVT
RU5UKCJDb25kaXRpb24yIikKKyNlbmRpZgorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9j
b25kaXRpb25hbF9tZXRob2QzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPmNv
bmRpdGlvbmFsTWV0aG9kMygpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9Q
UkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24yIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpICovCit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9k
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsK
KyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6
VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+Y2xhc3NNZXRo
b2QoKTsKK30KKworZ2xvbmcKK3dlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kX3dpdGhf
b3B0aW9uYWwoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgYXJnKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5jbGFzc01ldGhvZFdpdGhPcHRpb25hbChhcmcp
OworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3Zlcmxv
YWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIGFyZykKK3sKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMSkKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5vdmVybG9hZGVkTWV0aG9kMShh
cmcpOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRp
b24xIikKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgKi8KK30KKwordm9pZAord2Via2l0
X2RvbV90ZXN0X29ial9vdmVybG9hZGVkX21ldGhvZDEoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Y29uc3QgZ2NoYXIqIHR5cGUpCit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgZ19yZXR1
cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbCh0eXBlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfdHlw
ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0eXBlKTsKKyAgICBpdGVtLT5vdmVybG9hZGVkTWV0
aG9kMShjb252ZXJ0ZWRfdHlwZSk7CisjZWxzZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9U
X1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQxKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYsIFdlYktpdERPTWEqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKCk7
CisgICAgV2ViQ29yZTo6YSAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0gTlVMTCkg
eworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQxKGNvbnZlcnRl
ZF8pOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIFdlYktpdERPTWIqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKCk7CisgICAgV2ViQ29yZTo6YiAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlmICggIT0g
TlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAgICAgIGdf
cmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZlcnQyKGNv
bnZlcnRlZF8pOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQzKFdlYktp
dERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWMqICkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKCk7CisgICAgV2ViQ29yZTo6YyAqIGNvbnZlcnRlZF8gPSBOVUxMOworICAgIGlm
ICggIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7CisgICAg
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0tPmNvbnZl
cnQzKGNvbnZlcnRlZF8pOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbnZlcnQ0
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWQqICkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKCk7CisgICAgV2ViQ29yZTo6ZCAqIGNvbnZlcnRlZF8gPSBOVUxMOwor
ICAgIGlmICggIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpjb3JlKCk7
CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAgIGl0ZW0t
PmNvbnZlcnQ0KGNvbnZlcnRlZF8pOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2Nv
bnZlcnQ1KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTWUqICkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKCk7CisgICAgV2ViQ29yZTo6ZSAqIGNvbnZlcnRlZF8gPSBO
VUxMOworICAgIGlmICggIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfID0gV2ViS2l0Ojpj
b3JlKCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkXyk7CisgICAgfQorICAg
IGl0ZW0tPmNvbnZlcnQ1KGNvbnZlcnRlZF8pOworfQorCitXZWJLaXRET01TVkdQb2ludCoKK3dl
YmtpdF9kb21fdGVzdF9vYmpfbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1Bv
aW50PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPm11dGFibGVQb2ludEZ1bmN0aW9uKCkpOwor
ICAgIFdlYktpdERPTVNWR1BvaW50KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Cisg
ICAgcmV0dXJuIHJlczsKK30KKworV2ViS2l0RE9NU1ZHUG9pbnQqCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2ltbXV0YWJsZV9wb2ludF9mdW5jdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9
IFdURjo6Z2V0UHRyKGl0ZW0tPmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSk7CisgICAgV2ViS2l0
RE9NU1ZHUG9pbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4g
cmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29yYW5nZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPm9yYW5nZSgpOworfQorCitXZWJLaXRE
T01ib29sKgord2Via2l0X2RvbV90ZXN0X29ial9zdHJpY3RfZnVuY3Rpb24oV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0ciwgZ2Zsb2F0IGEsIGdpbnQgYiwgR0Vycm9yICoq
ZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHN0ciwg
MCk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3N0ciA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OChzdHIpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6Ym9vbD4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zdHJpY3RGdW5jdGlv
bihjb252ZXJ0ZWRfc3RyLCBhLCBiLCBlYykpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJLaXRET01ib29sKiByZXMg
PSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworZ2xvbmcK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV9pbnRfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5yZWFk
T25seUludEF0dHIoKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnY2hhcioKK3dlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X3JlYWRfb25seV9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmlu
ZyhpdGVtLT5yZWFkT25seVN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKworV2Vi
S2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlYWRfb25seV90ZXN0X29i
al9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFk
T25seVRlc3RPYmpBdHRyKCkpOworICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworfQorCitnc2hvcnQKK3dlYmtpdF9k
b21fdGVzdF9vYmpfZ2V0X3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3Nob3J0IHJlcyA9IGl0ZW0tPnNob3J0QXR0cigpOworICAgIHJl
dHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Nob3J0X2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3Nob3J0IHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0
ZW0tPnNldFNob3J0QXR0cih2YWx1ZSk7Cit9CisKK2d1c2hvcnQKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Vuc2lnbmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ3VzaG9ydCByZXMgPSBpdGVtLT51bnNpZ25lZFNob3J0QXR0cigp
OworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Vu
c2lnbmVkX3Nob3J0X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ3VzaG9ydCB2YWx1ZSkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZFNob3J0QXR0cih2YWx1ZSk7Cit9CisK
K2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9pbnRfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5pbnRBdHRy
KCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRf
aW50X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgdmFsdWUpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgaXRlbS0+c2V0SW50QXR0cih2YWx1ZSk7Cit9CisKK2dpbnQ2NAord2Via2l0X2RvbV90
ZXN0X29ial9nZXRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgZ2ludDY0IHJlcyA9IGl0ZW0tPmxvbmdMb25nQXR0cigpOworICAg
IHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2xvbmdfbG9u
Z19hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdpbnQ2NCB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRMb25nTG9uZ0F0dHIodmFsdWUpOworfQorCitndWludDY0Cit3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF91bnNpZ25lZF9sb25nX2xvbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndWludDY0IHJlcyA9IGl0ZW0tPnVuc2ln
bmVkTG9uZ0xvbmdBdHRyKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9zZXRfdW5zaWduZWRfbG9uZ19sb25nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgZ3VpbnQ2NCB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZExv
bmdMb25nQXR0cih2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRf
c3RyaW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+c3RyaW5nQXR0cigpKTsK
KyAgICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJp
bmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29u
dmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5z
ZXRTdHJpbmdBdHRyKGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4g
Z19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT50ZXN0T2JqQXR0cigpKTsKKyAgICBXZWJLaXRET01U
ZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsK
K30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRE
T01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVy
dGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFRlc3RPYmpBdHRyKGNv
bnZlcnRlZF92YWx1ZSk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF94bWxfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnhtbE9iakF0dHIoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2Vi
S2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtp
dF9kb21fdGVzdF9vYmpfc2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01UZXN0T2JqKiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpU
ZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsK
KyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJL
aXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1
ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldFhNTE9iakF0dHIoY29udmVydGVkX3ZhbHVlKTsKK30K
KworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2NyZWF0ZShXZWJLaXRET01UZXN0
T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnYm9vbGVhbiByZXMgPSBpdGVtLT5p
c0NyZWF0ZSgpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X2NyZWF0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDcmVhdGUodmFsdWUpOworfQorCitnY2hhcioKK3dlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRz
dHJpbmdhdHRyQXR0cikpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgY29udmVydGVkX3ZhbHVlKTsKK30KKworZ2xvbmcK
K3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0t
PmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdy
YWxhdHRyQXR0cik7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX2ludGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
Z2xvbmcgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCB2YWx1ZSk7Cit9
CisKK2d1bG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVkX3Vuc2lnbmVkX2lu
dGVncmFsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgZ3Vsb25nIHJlcyA9IGl0ZW0tPmdldFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpOworICAgIHJl
dHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3JlZmxlY3RlZF91
bnNpZ25lZF9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGd1bG9uZyB2YWx1
ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyLCB2YWx1
ZSk7Cit9CisKK2dib29sZWFuCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfYm9v
bGVhbl9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdib29sZWFuIHJlcyA9IGl0ZW0tPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZGJvb2xlYW5hdHRyQXR0cik7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRCb29s
ZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRy
LCB2YWx1ZSk7Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVjdGVk
X3VybF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldFVSTEF0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJl
czsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfcmVmbGVjdGVkX3VybF9hdHRy
KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRf
dmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCBjb252ZXJ0ZWRf
dmFsdWUpOworfQorCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9z
dHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnY2hhciogcmVzID0gY29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5nZXRBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKKyAgICByZXR1
cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfc3Ry
aW5nX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdURjo6U3RyaW5nIGNv
bnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+
c2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJB
dHRyLCBjb252ZXJ0ZWRfdmFsdWUpOworfQorCitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcmVmbGVjdGVkX2N1c3RvbV9pbnRlZ3JhbF9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmdldEludGVncmFsQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIp
OworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Jl
ZmxlY3RlZF9jdXN0b21faW50ZWdyYWxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9u
ZyB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyLCB2YWx1ZSk7Cit9
CisKK2dib29sZWFuCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jv
b2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnYm9vbGVhbiByZXMgPSBpdGVtLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKKyAgICByZXR1cm4gcmVzOworfQorCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xlYW5fYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0ciwgdmFsdWUpOworfQorCitnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3JlZmxlY3RlZF9jdXN0b21fdXJsX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlcyA9IGNvbnZlcnRUb1VURjhTdHJpbmco
aXRlbS0+Z2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVS
TEF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0
X29ial9zZXRfcmVmbGVjdGVkX2N1c3RvbV91cmxfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBjb25zdCBnY2hhciogdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHZhbHVlKTsKKyAgICBpdGVtLT5zZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIGNvbnZlcnRlZF92YWx1ZSk7Cit9CisKK2dsb25n
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Cisg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+
YXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCit2
b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9hdHRyX3dpdGhfZ2V0dGVyX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24odmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9E
T00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK2dsb25nCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9hdHRyX3dpdGhfc2V0dGVyX2V4Y2VwdGlvbihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5h
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlLCBHRXJyb3IgKiplcnJvcikKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpdGVtLT5zZXRBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbih2YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRf
ZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBl
Y2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworZ2NoYXIqCit3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2dldF9zdHJpbmdfYXR0cl93aXRoX2dldHRlcl9leGNlcHRpb24oV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9V
VEY4U3RyaW5nKGl0ZW0tPnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAg
cmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaW5nX2F0
dHJfd2l0aF9nZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdj
aGFyKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkX3ZhbHVlID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHZhbHVlKTsKKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpdGVtLT5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihjb252ZXJ0ZWRfdmFs
dWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9Cit9CisKK2djaGFyKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfc3RyaW5n
X2F0dHJfd2l0aF9zZXR0ZXJfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0t
PnN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVybiByZXM7Cit9CisK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3N0cmluZ19hdHRyX3dpdGhfc2V0dGVyX2V4
Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBjb25zdCBnY2hhciogdmFsdWUsIEdFcnJv
ciAqKmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZF92YWx1ZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSk7CisgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0U3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oY29udmVydGVkX3ZhbHVlLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rlc2Mo
ZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21fc3Ry
aW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQorfQor
CitnbG9uZword2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfc3RhdGVfYXR0cmli
dXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25n
IHJlcyA9IGl0ZW0tPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgpOworICAgIHJldHVybiByZXM7
Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsK
KyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUodmFsdWUpOworfQorCitXZWJL
aXRET01UZXN0T2JqKgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfd2l0aF9zY3JpcHRfZXhlY3V0
aW9uX2NvbnRleHRfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6Omdl
dFB0cihpdGVtLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSgpKTsKKyAgICBX
ZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0
dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTVRlc3RPYmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RP
YmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFs
dWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAg
IGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6
Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsK
KyAgICB9CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUo
Y29udmVydGVkX3ZhbHVlKTsKK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9i
aj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoZWMpKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAqKmVycm9yKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgV2ViQ29yZTo6RXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKGNvbnZlcnRlZF92YWx1ZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsKKyAgICAgICAgZ19zZXRfZXJy
b3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygiV0VCS0lUX0RPTSIpLCBlY2Rl
c2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KK30KKworV2ViS2l0RE9NVGVzdE9iaioKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2F0dHJp
YnV0ZV9yYWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhlYykpOworICAgIGlmIChlYykg
eworICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZWNkZXNjKGVjKTsK
KyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX0RPTSIpLCBlY2Rlc2MuY29kZSwgZWNkZXNjLm5hbWUpOworICAgIH0KKyAgICBXZWJL
aXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJu
IHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9zZXRfd2l0aF9zY3JpcHRfZXhl
Y3V0aW9uX2NvbnRleHRfYXR0cmlidXRlX3JhaXNlcyhXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBX
ZWJLaXRET01UZXN0T2JqKiB2YWx1ZSwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGNvbnZlcnRl
ZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVy
dGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpdGVtLT5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlcyhjb252ZXJ0ZWRfdmFsdWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vy
cm9yX2xpdGVyYWwoZXJyb3IsIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNk
ZXNjLmNvZGUsIGVjZGVzYy5uYW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRf
c2NyaXB0X3N0YXRlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpn
ZXRQdHIoaXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZSgpKTsKKyAgICBXZWJLaXRET01UZXN0T2JqKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5n
ZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAord2Via2l0X2RvbV90ZXN0X29ial9z
ZXRfd2l0aF9zY3JpcHRfZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zdGF0ZV9hdHRyaWJ1
dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUo
c2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdE9i
aiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOworICAgIH0KKyAgICBpdGVtLT5zZXRXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKGNvbnZlcnRlZF92
YWx1ZSk7Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF93
aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9y
YWlzZXMoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgR0Vycm9yICoqZXJyb3IpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3Jl
KHNlbGYpOworICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKGVjKSk7CisgICAg
aWYgKGVjKSB7CisgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBlY2Rl
c2MoZWMpOworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBnX3F1YXJrX2Zyb21f
c3RyaW5nKCJXRUJLSVRfRE9NIiksIGVjZGVzYy5jb2RlLCBlY2Rlc2MubmFtZSk7CisgICAgfQor
ICAgIFdlYktpdERPTVRlc3RPYmoqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF93aXRoX3Nj
cmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX2F0dHJpYnV0ZV9yYWlzZXMo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUsIEdFcnJvciAq
KmVycm9yKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAh
PSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7
CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhjb252ZXJ0ZWRfdmFs
dWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uIGVjZGVzYyhlYyk7CisgICAgICAgIGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3Is
IGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9ET00iKSwgZWNkZXNjLmNvZGUsIGVjZGVzYy5u
YW1lKTsKKyAgICB9Cit9CisKK1dlYktpdERPTVRlc3RPYmoqCit3ZWJraXRfZG9tX3Rlc3Rfb2Jq
X2dldF93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0YXRlX3dpdGhf
c3BhY2VzX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IGdfcmVzID0gV1RGOjpnZXRQdHIo
aXRlbS0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUoKSk7CisgICAgV2ViS2l0RE9NVGVzdE9iaiogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9v
Ympfc2V0X3dpdGhfc2NyaXB0X2V4ZWN1dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfd2l0
aF9zcGFjZXNfYXR0cmlidXRlKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RP
YmoqIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAg
IFdlYkNvcmU6OlRlc3RPYmogKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1
ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1
ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9Cisg
ICAgaXRlbS0+c2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGUoY29udmVydGVkX3ZhbHVlKTsKK30KKworZ2xvbmcKK3dlYmtpdF9kb21f
dGVzdF9vYmpfZ2V0X2NvbmRpdGlvbmFsX2F0dHIxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCit7
CisjaWYgRU5BQkxFKENvbmRpdGlvbjEpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwg
MCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9
IGl0ZW0tPmNvbmRpdGlvbmFsQXR0cjEoKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBX
RUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Z2xvbmc+KDApOworI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSAqLwor
fQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMShXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MSkKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRDb25kaXRpb25hbEF0dHIxKHZhbHVlKTsKKyNlbHNl
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCiAjZW5k
aWYgLyogRU5BQkxFKENvbmRpdGlvbjEpICovCit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworI2lm
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
CisgICAgZ2xvbmcgcmVzID0gaXRlbS0+Y29uZGl0aW9uYWxBdHRyMigpOworICAgIHJldHVybiBy
ZXM7CisjZWxzZQorI2lmICFFTkFCTEUoQ29uZGl0aW9uMSkKKyAgICBXRUJLSVRfV0FSTl9GRUFU
VVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyNlbmRpZgorI2lmICFFTkFCTEUoQ29uZGl0
aW9uMikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikK
KyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxnbG9uZz4oMCk7CisjZW5kaWYgLyogRU5B
QkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKSAqLworfQorCit2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9jb25kaXRpb25hbF9hdHRyMihXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyB2YWx1ZSkKK3sKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIpCi0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xh
c3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0NPTkRJVElPTkFM
X0FUVFIyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2xvbmcoImNvbmRpdGlvbmFsLWF0dHIyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfY29uZGl0
aW9uYWwtYXR0cjIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2xv
bmcgVGVzdE9iai5jb25kaXRpb25hbC1hdHRyMiIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGgg
c29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01JTkxPTkcsIC8qIG1pbiAqLwotR19N
QVhMT05HLCAvKiBtYXggKi8KLTAsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldENvbmRpdGlvbmFsQXR0cjIodmFsdWUpOwor
I2Vsc2UKKyNpZiAhRU5BQkxFKENvbmRpdGlvbjEpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9O
T1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisjZW5kaWYKKyNpZiAhRU5BQkxFKENvbmRpdGlvbjIp
CisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5k
aWYKICNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpICov
Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9jb25kaXRpb25hbF9hdHRyMyhX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09ORElU
SU9OQUxfQVRUUjMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfbG9uZygiY29uZGl0aW9uYWwtYXR0cjMiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9j
b25kaXRpb25hbC1hdHRyMyIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRl
ICBnbG9uZyBUZXN0T2JqLmNvbmRpdGlvbmFsLWF0dHIzIiwgLyogbG9uZ2VyIC0gY291bGQgZG8g
d2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICov
Ci1HX01BWExPTkcsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdsb25nIHJlcyA9IGl0ZW0tPmNvbmRp
dGlvbmFsQXR0cjMoKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2xvbmc+
KDApOwogI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikg
Ki8KLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQ09OVEVOVF9ET0NVTUVOVCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
ImNvbnRlbnQtZG9jdW1lbnQiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9jb250ZW50LWRvY3Vt
ZW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtb25seSAgV2ViS2l0RE9NRG9j
dW1lbnQqIFRlc3RPYmouY29udGVudC1kb2N1bWVudCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdp
dGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fRE9DVU1F
TlQsIC8qIGdvYmplY3QgdHlwZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKLSAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTVVUQUJMRV9QT0lOVCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIm11dGFibGUtcG9p
bnQiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVz
Y3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLm11
dGFibGUtcG9pbnQiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NWR19QT0lOVCwgLyogZ29iamVjdCB0eXBl
ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfSU1NVVRBQkxFX1BPSU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgiaW1tdXRhYmxlLXBvaW50IiwgLyogbmFtZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGVzdF9vYmpfaW1tdXRhYmxlLXBvaW50IiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInJlYWQtd3JpdGUgIFdlYktpdERPTVNWR1BvaW50KiBUZXN0T2JqLmltbXV0YWJsZS1wb2lu
dCIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9ET01fU1ZHX1BPSU5ULCAvKiBnb2JqZWN0IHR5cGUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9TVFJBV0JFUlJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2ludCgic3RyYXdiZXJyeSIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3N0cmF3YmVy
cnkiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgZ2ludCBUZXN0T2Jq
LnN0cmF3YmVycnkiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0
dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19NSU5JTlQsIC8qIG1pbiAqLwotR19NQVhJTlQsIC8qIG1heCAqLwot
MCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUk9QX1NUUklDVF9GTE9BVCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgic3RyaWN0LWZsb2F0IiwgLyog
bmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGVzdF9vYmpfc3RyaWN0LWZsb2F0IiwgLyogc2hvcnQgZGVzY3JpcHRpb24g
Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInJlYWQtd3JpdGUgIGdmbG9hdCBUZXN0T2JqLnN0cmljdC1mbG9hdCIsIC8qIGxvbmdl
ciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhG
TE9BVCwgLyogbWluICovCi1HX01BWEZMT0FULCAvKiBtYXggKi8KLTAuMCwgLyogZGVmYXVsdCAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0RFU0NSSVBUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX2xvbmcoImRlc2NyaXB0aW9uIiwgLyogbmFtZSAqLwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9v
YmpfZGVzY3JpcHRpb24iLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5ICBn
bG9uZyBUZXN0T2JqLmRlc2NyaXB0aW9uIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21l
IGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExP
TkcsIC8qIG1heCAqLwotMCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSUQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfbG9uZygiaWQiLCAvKiBuYW1lICov
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0ZXN0X29ial9pZCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRl
ICBnbG9uZyBUZXN0T2JqLmlkIiwgLyogbG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJh
IGRvYyBzdHVmZiBoZXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUlOTE9ORywgLyogbWluICovCi1HX01BWExPTkcsIC8q
IG1heCAqLwotMCwgLyogZGVmYXVsdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0g
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0hBU0gsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJoYXNoIiwgLyogbmFtZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGVzdF9vYmpfaGFzaCIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLW9u
bHkgIGdjaGFyKiBUZXN0T2JqLmhhc2giLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUg
ZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIGRlZmF1bHQgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7Cit9CiAKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2NvbmRp
dGlvbmFsX2F0dHIzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIHZhbHVlKQoreworI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBp
dGVtLT5zZXRDb25kaXRpb25hbEF0dHIzKHZhbHVlKTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5f
RkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVS
RV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKSAqLworfQogCitXZWJLaXRET01Eb2N1bWVudCoKK3dlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2NvbnRlbnRfZG9jdW1lbnQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpEb2N1bWVudD4g
Z19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgV2ViS2l0
RE9NRG9jdW1lbnQqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4g
cmVzOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2luaXQoV2ViS2l0RE9N
VGVzdE9iaiogcmVxdWVzdCkKK1dlYktpdERPTVNWR1BvaW50Kgord2Via2l0X2RvbV90ZXN0X29i
al9nZXRfbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPm11dGFibGVQb2ludCgpKTsKKyAgICBXZWJLaXRET01TVkdQb2ludCogcmVzID0g
V2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisKK3ZvaWQKK3dl
YmtpdF9kb21fdGVzdF9vYmpfc2V0X211dGFibGVfcG9pbnQoV2ViS2l0RE9NVGVzdE9iaiogc2Vs
ZiwgV2ViS2l0RE9NU1ZHUG9pbnQqIHZhbHVlKQogeworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwodmFsdWUpOworICAgIFdlYkNvcmU6OlNWR1BvaW50ICogY29udmVydGVkX3ZhbHVlID0g
TlVMTDsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF92YWx1ZSk7CisgICAgfQorICAgIGl0ZW0tPnNldE11dGFibGVQb2ludChjb252ZXJ0ZWRfdmFs
dWUpOwogfQogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLVdlYktpdERPTVRlc3RPYmoqIHdyYXBUZXN0
T2JqKFdlYkNvcmU6OlRlc3RPYmoqIGNvcmVPYmplY3QpCitXZWJLaXRET01TVkdQb2ludCoKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmKQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNWR1BvaW50PiBnX3JlcyA9IFdURjo6
Z2V0UHRyKGl0ZW0tPmltbXV0YWJsZVBvaW50KCkpOworICAgIFdlYktpdERPTVNWR1BvaW50KiBy
ZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJlczsKK30KIAotICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0g
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
K3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2ltbXV0YWJsZV9wb2ludChXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01TVkdQb2ludCogdmFsdWUpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
Z19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U1ZHUG9pbnQgKiBjb252ZXJ0
ZWRfdmFsdWUgPSBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF92YWx1ZSA9IFdlYktpdDo6Y29yZSh2YWx1ZSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX3ZhbHVlKTsKKyAgICB9CisgICAgaXRlbS0+c2V0SW1tdXRhYmxlUG9pbnQo
Y29udmVydGVkX3ZhbHVlKTsKK30KIAotICAgIHJldHVybiAgV0VCS0lUX0RPTV9URVNUX09CSihn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JKLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBO
VUxMKSk7CitnaW50Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJhd2JlcnJ5KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdpbnQgcmVzID0gaXRlbS0+
Ymx1ZWJlcnJ5KCk7CisgICAgcmV0dXJuIHJlczsKIH0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAor
Cit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zdHJhd2JlcnJ5KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIGdpbnQgdmFsdWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0Qmx1ZWJlcnJ5
KHZhbHVlKTsKK30KKworZ2Zsb2F0Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zdHJpY3RfZmxv
YXQoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChz
ZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2Zsb2F0
IHJlcyA9IGl0ZW0tPnN0cmljdEZsb2F0KCk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial9zZXRfc3RyaWN0X2Zsb2F0KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdmbG9hdCB2YWx1ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2Jq
ICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRTdHJpY3RGbG9hdCh2
YWx1ZSk7Cit9CisKK2dsb25nCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9kZXNjcmlwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYs
IDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnbG9uZyByZXMg
PSBpdGVtLT5kZXNjcmlwdGlvbigpOworICAgIHJldHVybiByZXM7Cit9CisKK2dsb25nCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9pZChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnbG9uZyByZXMgPSBpdGVtLT5pZCgpOworICAgIHJldHVybiByZXM7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfc2V0X2lkKFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIGdsb25nIHZhbHVlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmog
KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldElkKHZhbHVlKTsKK30K
KworZ2NoYXIqCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9oYXNoKFdlYktpdERPTVRlc3RPYmoq
IHNlbGYpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXMgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmhhc2goKSk7CisgICAgcmV0dXJuIHJlczsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9ialByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmpQcml2YXRlLmgKaW5kZXggOTY3MjJmNzk3NTNjMzlkMmQxYWNk
MmVhNzA0YmE3N2RmYmJjNTU2MS4uMmY3YWUyYWVhODdlOGYxNzA1NmIyZmQ2OGVjNTk1NGRlZWY1
NGI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0ZS5oCkBAIC0y
NCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
V2ViS2l0RE9NT2JqZWN0Lmg+CiAjaW5jbHVkZSAiVGVzdE9iai5oIgorCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogICAgIFdlYktpdERPTVRlc3RPYmogKgogICAgIHdyYXBUZXN0T2JqKFdlYkNvcmU6
OlRlc3RPYmogKmNvcmVPYmplY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRl
eCA4NDVhMzczN2MxYTEyY2FhNDdhMGYyYTBhMTZkOTRmNTZiOGUyMDMwLi5kYTk1OWRkZGI4Y2Qy
MzczNTQzNjg0YTIyNmY4MTI3Mzg3NDJlNWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcApAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIpCi0KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCkBAIC00Miw4ICs0MCwxMCBAQAogI2luY2x1ZGUg
IndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgogCisj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKLSAgICAKKwogV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIG9i
aikKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChvYmosIDApOwpAQCAtNTMsMTUzICs1Mywz
NyBAQCBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBraXQoV2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYQogCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihET01PYmplY3RDYWNo
ZTo6cHV0KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZShvYmopKSk7CiB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQgLy8KLQotdm9pZAotd2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9hY2NlcHRfdHJh
bnNmZXJfbGlzdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBz
ZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEsIFdlYktpdERPTUFycmF5
KiB0cmFuc2Zlcl9saXN0KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0YSk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh0cmFuc2Zl
cl9saXN0KTsKLSAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0ZWRf
ZGF0YSA9IE5VTEw7Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRf
ZGF0YSA9IFdlYktpdDo6Y29yZShkYXRhKTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252
ZXJ0ZWRfZGF0YSk7Ci0gICAgfQotICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVydGVkX3RyYW5z
ZmVyX2xpc3QgPSBOVUxMOwotICAgIGlmICh0cmFuc2Zlcl9saXN0ICE9IE5VTEwpIHsKLSAgICAg
ICAgY29udmVydGVkX3RyYW5zZmVyX2xpc3QgPSBXZWJLaXQ6OmNvcmUodHJhbnNmZXJfbGlzdCk7
Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3RyYW5zZmVyX2xpc3QpOwotICAg
IH0KLSAgICBpdGVtLT5hY2NlcHRUcmFuc2Zlckxpc3QoY29udmVydGVkX2RhdGEsIGNvbnZlcnRl
ZF90cmFuc2Zlcl9saXN0KTsKLX0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRf
c2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zlcl9saXN0KFdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSogZmlyc3QsIFdlYktpdERPTUFycmF5KiB0eCwgV2ViS2l0RE9NU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKiBzZWNvbmQsIFdlYktpdERPTUFycmF5KiB0eHgpCitXZWJDb3JlOjpUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlKFdlYktpdERPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHJlcXVlc3QpCiB7Ci0gICAgZ19yZXR1cm5faWZfZmFp
bChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAg
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChmaXJzdCk7Ci0gICAgZ19yZXR1
cm5faWZfZmFpbCh0eCk7Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWNvbmQpOwotICAgIGdfcmV0
dXJuX2lmX2ZhaWwodHh4KTsKLSAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBj
b252ZXJ0ZWRfZmlyc3QgPSBOVUxMOwotICAgIGlmIChmaXJzdCAhPSBOVUxMKSB7Ci0gICAgICAg
IGNvbnZlcnRlZF9maXJzdCA9IFdlYktpdDo6Y29yZShmaXJzdCk7Ci0gICAgICAgIGdfcmV0dXJu
X2lmX2ZhaWwoY29udmVydGVkX2ZpcnN0KTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6QXJyYXkgKiBj
b252ZXJ0ZWRfdHggPSBOVUxMOwotICAgIGlmICh0eCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZl
cnRlZF90eCA9IFdlYktpdDo6Y29yZSh0eCk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29u
dmVydGVkX3R4KTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICog
Y29udmVydGVkX3NlY29uZCA9IE5VTEw7Ci0gICAgaWYgKHNlY29uZCAhPSBOVUxMKSB7Ci0gICAg
ICAgIGNvbnZlcnRlZF9zZWNvbmQgPSBXZWJLaXQ6OmNvcmUoc2Vjb25kKTsKLSAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfc2Vjb25kKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6QXJy
YXkgKiBjb252ZXJ0ZWRfdHh4ID0gTlVMTDsKLSAgICBpZiAodHh4ICE9IE5VTEwpIHsKLSAgICAg
ICAgY29udmVydGVkX3R4eCA9IFdlYktpdDo6Y29yZSh0eHgpOwotICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF90eHgpOwotICAgIH0KLSAgICBpdGVtLT5tdWx0aVRyYW5zZmVyTGlz
dChjb252ZXJ0ZWRfZmlyc3QsIGNvbnZlcnRlZF90eCwgY29udmVydGVkX3NlY29uZCwgY29udmVy
dGVkX3R4eCk7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CiAKLVdl
YktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVk
X3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
c2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2Vi
S2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnZhbHVlKCkpOwotICAgIFdlYktpdERP
TVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwot
ICAgIHJldHVybiByZXM7Ci19CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29y
ZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7CiAKLXZv
aWQKLXdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2Vfc2V0
X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYs
IFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5f
aWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAg
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsK
LSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJL
aXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1
ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgcmV0
dXJuIGNvcmVPYmplY3Q7CiB9CiAKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKLXdl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3JlYWRv
bmx5X3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNl
bGYpCitXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB3cmFwVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlT2JqZWN0KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
LSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9
IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5yZWFkb25seVZhbHVlKCkpOwot
ICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2ViS2l0OjpraXQoZ19y
ZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7Ci19CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29yZU9iamVjdCwgMCk7CiAKLVdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKLXdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF92
YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihp
dGVtLT5jYWNoZWRWYWx1ZSgpKTsKLSAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUq
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQorICAg
IC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBi
ZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysrIG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0
ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisg
ICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAgICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsK
IAotdm9pZAotd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFj
ZV9zZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCi17Ci0g
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2
YWx1ZSk7Ci0gICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3Zh
bHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRf
dmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNv
bnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldENhY2hlZFZhbHVlKGNvbnZlcnRl
ZF92YWx1ZSk7CisgICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRf
VkFMVUVfSU5URVJGQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVTVF9TRVJJQUxJ
WkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKIH0K
IAotV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgotd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfY2FjaGVkX3JlYWRvbmx5X3ZhbHVlKFdl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNh
Y2hlZFJlYWRvbmx5VmFsdWUoKSk7Ci0gICAgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlczsKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCisjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQogCiBHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UsIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92
YWx1ZV9pbnRlcmZhY2UsIFdFQktJVF9UWVBFX0RPTV9PQkpFQ1QpCiAKLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1XZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3Jl
KFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHJlcXVlc3QpCi17
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7Ci0KLSAgICBXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KFdFQktJVF9E
T01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjb3JlT2JqZWN0LCAwKTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIGVudW0gewogICAgIFBST1BfMCwKICAgICBQUk9QX1ZBTFVFLApAQCAt
MjA4LDkgKzkyLDkgQEAgZW51bSB7CiAgICAgUFJPUF9DQUNIRURfUkVBRE9OTFlfVkFMVUUsCiB9
OwogCi0KIHN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1
ZV9pbnRlcmZhY2VfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogeworI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKICAgICBXZWJLaXRET01PYmplY3QqIGRvbV9v
YmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOwogICAgIAogICAgIGlmIChkb21fb2Jq
ZWN0LT5jb3JlT2JqZWN0KSB7CkBAIC0yMjEsNiArMTA1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9maW5hbGl6ZShHT2Jq
ZWN0KgogCiAgICAgICAgIGRvbV9vYmplY3QtPmNvcmVPYmplY3QgPSBOVUxMOwogICAgIH0KKyNl
bmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCiAKICAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CkBAIC0zMjQsMTkgKzIw
OSwxNzUgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3Zh
bHVlX2ludGVyZmFjZV9pbml0KFdlYktpdERPTVRlc3QKIHsKIH0KIAotbmFtZXNwYWNlIFdlYktp
dCB7Ci1XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB3cmFwVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlT2JqZWN0KQordm9pZAord2Via2l0X2RvbV90ZXN0X3Nl
cmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9hY2NlcHRfdHJhbnNmZXJfbGlzdChXZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEsIFdlYktpdERPTUFycmF5KiB0cmFuc2Zlcl9saXN0
KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOworI2lmIEVOQUJM
RShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl9pZl9mYWls
KHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwodHJhbnNmZXJfbGlzdCk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlICogY29udmVydGVkX2RhdGEgPSBOVUxMOworICAgIGlmIChkYXRhICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX2RhdGEgPSBXZWJLaXQ6OmNvcmUoZGF0YSk7CisgICAgICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY29udmVydGVkX2RhdGEpOworICAgIH0KKyAgICBXZWJDb3JlOjpBcnJheSAq
IGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gTlVMTDsKKyAgICBpZiAodHJhbnNmZXJfbGlzdCAh
PSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gV2ViS2l0Ojpjb3Jl
KHRyYW5zZmVyX2xpc3QpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90cmFu
c2Zlcl9saXN0KTsKKyAgICB9CisgICAgaXRlbS0+YWNjZXB0VHJhbnNmZXJMaXN0KGNvbnZlcnRl
ZF9kYXRhLCBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7CisjZWxzZQorICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZFQVRV
UkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24x
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KIAotICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0
aGVyIHRoYW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3Jl
IGEgQysrIG9iamVjdAotICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUu
ICBTZWUgdGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCi0gICAgICogbWF0Y2hpbmcgZGVyZWYo
KS4KLSAgICAgKi8KLSAgICBjb3JlT2JqZWN0LT5yZWYoKTsKK3ZvaWQKK3dlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfbXVsdGlfdHJhbnNmZXJfbGlzdChX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRE
T01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGZpcnN0LCBXZWJLaXRET01BcnJheSogdHgsIFdlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2Vjb25kLCBXZWJLaXRET01BcnJheSogdHh4KQor
eworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZpcnN0KTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHR4KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlY29uZCk7
CisgICAgZ19yZXR1cm5faWZfZmFpbCh0eHgpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSAqIGNvbnZlcnRlZF9maXJzdCA9IE5VTEw7CisgICAgaWYgKGZpcnN0ICE9IE5VTEwp
IHsKKyAgICAgICAgY29udmVydGVkX2ZpcnN0ID0gV2ViS2l0Ojpjb3JlKGZpcnN0KTsKKyAgICAg
ICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfZmlyc3QpOworICAgIH0KKyAgICBXZWJDb3Jl
OjpBcnJheSAqIGNvbnZlcnRlZF90eCA9IE5VTEw7CisgICAgaWYgKHR4ICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX3R4ID0gV2ViS2l0Ojpjb3JlKHR4KTsKKyAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfdHgpOworICAgIH0KKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgKiBjb252ZXJ0ZWRfc2Vjb25kID0gTlVMTDsKKyAgICBpZiAoc2Vjb25kICE9IE5V
TEwpIHsKKyAgICAgICAgY29udmVydGVkX3NlY29uZCA9IFdlYktpdDo6Y29yZShzZWNvbmQpOwor
ICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9zZWNvbmQpOworICAgIH0KKyAgICBX
ZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRlZF90eHggPSBOVUxMOworICAgIGlmICh0eHggIT0gTlVM
TCkgeworICAgICAgICBjb252ZXJ0ZWRfdHh4ID0gV2ViS2l0Ojpjb3JlKHR4eCk7CisgICAgICAg
IGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3R4eCk7CisgICAgfQorICAgIGl0ZW0tPm11bHRp
VHJhbnNmZXJMaXN0KGNvbnZlcnRlZF9maXJzdCwgY29udmVydGVkX3R4LCBjb252ZXJ0ZWRfc2Vj
b25kLCBjb252ZXJ0ZWRfdHh4KTsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1Rf
UFJFU0VOVCgiQ29uZGl0aW9uMSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VO
VCgiQ29uZGl0aW9uMiIpCisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLworfQogCi0gICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpF
RF9TQ1JJUFRfVkFMVUVfSU5URVJGQUNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ET01fVEVT
VF9TRVJJQUxJWkVEX1NDUklQVF9WQUxVRV9JTlRFUkZBQ0UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5V
TEwpKTsKK1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKK3dlYmtpdF9kb21fdGVzdF9z
ZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKFdlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCit7CisjaWYgRU5BQkxFKENvbmRp
dGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNl
bGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBX
ZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT52YWx1ZSgpKTsKKyAgICBXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAg
ICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5U
KCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25k
aXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpICovCiB9Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwordm9p
ZAord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9zZXRf
dmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwg
V2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxm
KTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29y
ZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNv
cmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKKyAgICBpZiAodmFs
dWUgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFs
dWUpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7CisgICAgfQor
ICAgIGl0ZW0tPnNldFZhbHVlKGNvbnZlcnRlZF92YWx1ZSk7CisjZWxzZQorICAgIFdFQktJVF9X
QVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJOX0ZF
QVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRp
b24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKworV2ViS2l0RE9NU2VyaWFsaXplZFNj
cmlwdFZhbHVlKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVy
ZmFjZV9nZXRfcmVhZG9ubHlfdmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogc2VsZikKK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjIpCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6
Z2V0UHRyKGl0ZW0tPnJlYWRvbmx5VmFsdWUoKSk7CisgICAgV2ViS2l0RE9NU2VyaWFsaXplZFNj
cmlwdFZhbHVlKiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7CisgICAgcmV0dXJuIHJl
czsKKyNlbHNlCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9u
MSIpCisgICAgV0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVCgiQ29uZGl0aW9uMiIpCisg
ICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKSAqLworfQorCitXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCit3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF9jYWNoZWRf
dmFsdWUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikK
K3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPmNhY2hl
ZFZhbHVlKCkpOworICAgIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzID0gV2Vi
S2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7CisjZWxzZQorICAgIFdFQktJ
VF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjEiKQorICAgIFdFQktJVF9XQVJO
X0ZFQVRVUkVfTk9UX1BSRVNFTlQoIkNvbmRpdGlvbjIiKQorICAgIHJldHVybiBOVUxMOworI2Vu
ZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikgKi8KK30KKwor
dm9pZAord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9z
ZXRfY2FjaGVkX3ZhbHVlKFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpCit7CisjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorICAgIGdfcmV0dXJuX2lm
X2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOworICAgIFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Cisg
ICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0
Ojpjb3JlKHZhbHVlKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUp
OworICAgIH0KKyAgICBpdGVtLT5zZXRDYWNoZWRWYWx1ZShjb252ZXJ0ZWRfdmFsdWUpOworI2Vs
c2UKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKICNlbmRpZiAv
KiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKK1dlYktp
dERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X2NhY2hlZF9yZWFkb25seV92YWx1ZShXZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQoreworI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Cisg
ICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGdfcmVzID0gV1RGOjpnZXRQdHIoaXRlbS0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgp
KTsKKyAgICBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHJlcyA9IFdlYktpdDo6a2l0
KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOworI2Vsc2UKKyAgICBXRUJLSVRfV0FSTl9G
RUFUVVJFX05PVF9QUkVTRU5UKCJDb25kaXRpb24xIikKKyAgICBXRUJLSVRfV0FSTl9GRUFUVVJF
X05PVF9QUkVTRU5UKCJDb25kaXRpb24yIikKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBF
TkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpICovCit9CisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJpdmF0ZS5oCmluZGV4IDgyZTc5YTI2ZjE3ZjdjZTZiNjM1
YzM3ZDlmMjVkMjcyNDRmM2ZiN2QuLjM1MzNjMjY4MWM1YTUzYzYyYTExNzUzYWRlYzU4ZTVhNzVh
NzhlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByaXZhdGUuaApAQCAtMjQs
NiArMjQsOSBAQAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L1dl
YktpdERPTU9iamVjdC5oPgogI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuaCIKKworI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSAqCiAgICAgd3JhcFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqY29yZU9iamVj
dCk7CkBAIC0zNiw0ICszOSw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAorI2VuZGlmIC8qIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMikgKi8KKwogI2VuZGlmIC8qIFdFQl9LSVRfRE9NX1RFU1RfU0VSSUFMSVpFRF9TQ1JJUFRf
VkFMVUVfSU5URVJGQUNFX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGdsb2JhbHNwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUuaAppbmRleCBhMjIyN2I1OGZlZDk4NWIwYTM1NTgwZjUw
ZGI1NmY5MWQ0ZDQyMDMwLi44MGNjNDAyY2ViNWE1MDg0YmI1ZTk2MTYwYzI1NWE5OTcyNmM4MTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2xvYmFsc3ByaXZhdGUu
aApAQCAtMjgsNiArMjgsOCBAQAogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVBREFCTEUgKChHUGFy
YW1GbGFncykoR19QQVJBTV9SRUFEQUJMRXxHX1BBUkFNX1NUQVRJQ19OQU1FfEdfUEFSQU1fU1RB
VElDX05JQ0t8R19QQVJBTV9TVEFUSUNfQkxVUkIpKQogI2RlZmluZSBXRUJLSVRfUEFSQU1fUkVB
RFdSSVRFICgoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFfEdfUEFSQU1fU1RBVElDX05B
TUV8R19QQVJBTV9TVEFUSUNfTklDS3xHX1BBUkFNX1NUQVRJQ19CTFVSQikpCiAKKyNkZWZpbmUg
V0VCS0lUX1dBUk5fRkVBVFVSRV9OT1RfUFJFU0VOVChGZWF0dXJlKSBnX3dhcm5pbmcoIldlYktp
dEdUSysgd2FzIG5vdCBjb21waWxlZCB3aXRoIHN1cHBvcnQgZm9yICIgRmVhdHVyZSk7CisKIGV4
dGVybiAiQyIgewogCiB2b2lkIHdlYmtpdEluaXQoKTsK
</data>
<flag name="review"
          id="137560"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="137595"
          type_id="3"
          status="-"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>