<?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>149952</bug_id>
          
          <creation_ts>2015-10-09 06:40:52 -0700</creation_ts>
          <short_desc>Binding generator should use templated JSXXConstructor</short_desc>
          <delta_ts>2015-10-19 02:48:40 -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 JavaScript</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150320</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1131896</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-09 06:40:52 -0700</bug_when>
    <thetext>Using templated JSXXConstructor would reduce the size of the binding generator code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131913</commentid>
    <comment_count>1</comment_count>
      <attachid>262773</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-09 08:24:41 -0700</bug_when>
    <thetext>Created attachment 262773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131914</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-09 08:27:03 -0700</bug_when>
    <thetext>Attachment 262773 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMConstructor.h:46:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMConstructor.h:77:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMConstructor.h:116:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 3 in 28 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>1131932</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-09 09:18:57 -0700</bug_when>
    <thetext>Looks like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133077</commentid>
    <comment_count>4</comment_count>
      <attachid>262773</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-14 01:08:42 -0700</bug_when>
    <thetext>Comment on attachment 262773
Patch

Marking patch as r?

I am not sure of the actual value of JSDOMNamedConstructor and DOMConstructorWithDocument.
Maybe we can try removing them later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133489</commentid>
    <comment_count>5</comment_count>
      <attachid>262773</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-15 09:24:29 -0700</bug_when>
    <thetext>Comment on attachment 262773
Patch

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

Generally I find these class templates easier to read if we put the function definitions all outside the class template definition. Even though the total file size is bigger. Inlining can be controlled with the inline keyword rather than by putting the functions to be inlined into the class definition.

I think I am having a little trouble seeing the big picture here and understanding the strategy. I don’t fully understand the patch. I do think it’s OK to use templates more so we can generate less code from the code generation script, as long as we don’t cause an explosion in compile time or binary size by doing that. But there is something peculiar about these new templates. It’s really unclear what part of the template goes into the header and what part is designed be specialized. Might even be worth commenting on that in the class template definition.

Also note that some of my questions about references vs. pointers are just that: questions. Don’t assume that we could do all of those, since I’m sure some are functions that are called by template code or by macros and so have to have the right argument types; just wanted you to consider if they could change.

&gt; Source/WebCore/ChangeLog:18
&gt; +        A further patch should remove DOMConstructorWithDocument and DOMConstructorJSBuiltinObject. 

Typically it’s helpful to keep class template as small as possible. It can be useful to put code in non-template base classes, even if the only use of those classes is in a single class template. Thus I am not 100% sure it will be good to remove these.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:27
&gt; +template &lt;typename JSClass&gt; class JSDOMConstructorNotConstructable : public DOMConstructorObject {

I don’t understand why this is a template. Nothing in this class template seems to depend on the JSClass argument. Even if we do have some reason to need a class template, is everything in this template needed? It’s often valuable to put as much as possible into a base class. I suppose that’s the role of DOMConstructorObject here? Maybe the main point of using a template here is that we will explicitly specialize one of the function or data members? 

Tiny nit: In new code we are not putting a space between &quot;template&quot; and the following &lt;&gt;.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:31
&gt; +    static JSDOMConstructorNotConstructable* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)

Can this take a reference to the structure instead of a pointer?

Can this return a reference to the new object instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:38
&gt; +    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)

Can this return a reference to the structure instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:46
&gt; +    JSDOMConstructorNotConstructable(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }

Can this take a reference to the structure instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:48
&gt; +    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }

I don’t understand the value of defining an inline private empty function and also writing code that calls it. We should omit both the function and calls to it.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:51
&gt; +template&lt;typename JSClass&gt; void JSDOMConstructorNotConstructable&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)

Seems this should probably be marked inline, but not sure who calls this.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:58
&gt; +template &lt;typename JSClass&gt; class JSDOMConstructor : public DOMConstructorObject {

Is there a way to save code here? This seems really similar to JSDOMConstructorNotConstructable but lots of code seems to be repeated.

Tiny nit: In new code we are not putting a space between &quot;template&quot; and the following &lt;&gt;.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:62
&gt; +    static JSDOMConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)

Can this take a reference to the structure instead of a pointer?

Can this return a reference to the new object instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:69
&gt; +    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)

Can this return a reference to the structure instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:81
&gt; +    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }

I don’t understand the value of defining an inline private empty function and also writing code that calls it. We should omit both the function and calls to it unless there is some deeper strategy here.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:101
&gt; +    static JSDOMNamedConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)

Can this take a reference to the structure instead of a pointer?

Can this return a reference to the new object instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:108
&gt; +    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)

Can this return a reference to the structure instead of a pointer?

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:120
&gt; +    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }

I don’t understand the value of defining an inline private empty function and also writing code that calls it. We should omit both the function and calls to it.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:178
&gt; -    JSObject* object = castedThis-&gt;createJSObject();
&gt; +    JSC::JSObject* object = castedThis-&gt;createJSObject();

What are we fixing here by adding the explicit JSC prefix? Why did the code compile before?

On a separate point, I suggest using just auto or auto* instead of naming the type.

&gt; Source/WebCore/bindings/js/JSImageConstructor.h:23
&gt; +#include &lt;runtime/JSCJSValue.h&gt;

We don’t need to include this header. Even for a return value, it’s sufficient to forward-declare the JSC::JSValue class as we do with VM below. To actually call the function you need the JSValue class definition, but that’s true of VM too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133842</commentid>
    <comment_count>6</comment_count>
      <attachid>263268</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-16 07:13:24 -0700</bug_when>
    <thetext>Created attachment 263268
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133843</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-16 07:22:29 -0700</bug_when>
    <thetext>Thanks for the review!

&gt; Generally I find these class templates easier to read if we put the function
&gt; definitions all outside the class template definition. Even though the total
&gt; file size is bigger. Inlining can be controlled with the inline keyword
&gt; rather than by putting the functions to be inlined into the class definition.

Did the edits accordingly.

&gt; I think I am having a little trouble seeing the big picture here and
&gt; understanding the strategy. I don’t fully understand the patch. I do think
&gt; it’s OK to use templates more so we can generate less code from the code
&gt; generation script, as long as we don’t cause an explosion in compile time or
&gt; binary size by doing that. But there is something peculiar about these new
&gt; templates. It’s really unclear what part of the template goes into the
&gt; header and what part is designed be specialized. Might even be worth
&gt; commenting on that in the class template definition.

Added more documentation in the change log.

As of complexity/code size, basically, these templates only do what the code generator was doing.
I hope that the amount of code is the same, except that code generator is now generating less.

The idea is that we specialize some members:
- construct and initializeProperties functions.
- s_info data
construct has no default implementation.
initializeProperties has one as private constructors (one not generated by binding generator) may not care about adding specific properties.
If that is misleading, I can remove the default initializeProperties implementation, and add it where missing (streams reader and controller private constructors)

Currently, we almost need to tweak the binding generator, even for very specific cases that might be better handled by custom classes. But writing custom classes is not very attractive.
If we have more templates like that, it may be come a bit more attractive to directly author custom classes.

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        A further patch should remove DOMConstructorWithDocument and DOMConstructorJSBuiltinObject. 
&gt; 
&gt; Typically it’s helpful to keep class template as small as possible. It can be useful to put code in non-template base classes, even if the only use of those classes is in a single class template. Thus I am not 100% sure it will be good to remove these.

DOMConstructorObject is the base class.
DOMConstructorWithDocument has only inline methods so it could be squashed.
DOMConstructorJSBuiltinObject has one method that is not inlined.
It may be worth keeping it or find a way to make the inlined method a function.

&gt;&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:27
&gt;&gt; +template &lt;typename JSClass&gt; class JSDOMConstructorNotConstructable : public DOMConstructorObject {
&gt; 
&gt; I don’t understand why this is a template. Nothing in this class template seems to depend on the JSClass argument. Even if we do have some reason to need a class template, is everything in this template needed? It’s often valuable to put as much as possible into a base class. I suppose that’s the role of DOMConstructorObject here? Maybe the main point of using a template here is that we will explicitly specialize one of the function or data members? 
&gt; 
&gt; Tiny nit: In new code we are not putting a space between &quot;template&quot; and the following &lt;&gt;.

Sure, I should have added comments, like I did for JSBuiltinConstructor.

&gt;&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:31
&gt;&gt; +    static JSDOMConstructorNotConstructable* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
&gt; 
&gt; Can this take a reference to the structure instead of a pointer?
&gt; 
&gt; Can this return a reference to the new object instead of a pointer?

I tend to think so but I have not done the exercise.
Plan for a future patch.

&gt;&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:48
&gt;&gt; +    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
&gt; 
&gt; I don’t understand the value of defining an inline private empty function and also writing code that calls it. We should omit both the function and calls to it.

This default behavior is useful for private constructors for which we do not really care about adding specific properties since they do not surface at JS level, like 
JSBuiltinReadableStreamControllerPrivateConstructor and JSBuiltinReadableStreamReaderPrivateConstructor.

Constructors generated by binding generator always redefine initializeProperties.

&gt;&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:58
&gt;&gt; +template &lt;typename JSClass&gt; class JSDOMConstructor : public DOMConstructorObject {
&gt; 
&gt; Is there a way to save code here? This seems really similar to JSDOMConstructorNotConstructable but lots of code seems to be repeated.
&gt; 
&gt; Tiny nit: In new code we are not putting a space between &quot;template&quot; and the following &lt;&gt;.

Fixed the nit.
I will try to look at saving more code later on.
Note that we do not loose any ground with the current patch since the binding generator was doing the same thing.

&gt;&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:178
&gt;&gt; +    JSC::JSObject* object = castedThis-&gt;createJSObject();
&gt; 
&gt; What are we fixing here by adding the explicit JSC prefix? Why did the code compile before?
&gt; 
&gt; On a separate point, I suggest using just auto or auto* instead of naming the type.

I do not recall whether it was a compilation error or a style edit.
auto is better anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133854</commentid>
    <comment_count>8</comment_count>
      <attachid>263268</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-16 08:56:50 -0700</bug_when>
    <thetext>Comment on attachment 263268
Patch for landing

Clearing flags on attachment: 263268

Committed r191176: &lt;http://trac.webkit.org/changeset/191176&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133855</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-16 08:56:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133863</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-16 09:16:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; As of complexity/code size, basically, these templates only do what the code
&gt; generator was doing.
&gt; I hope that the amount of code is the same, except that code generator is
&gt; now generating less.

We may be misunderstanding each other on this. I understood the point you are making. My point was that C++ compilers may take substantially longer to process class templates and instantiate the template classes from those templates than they would to process the individual classes that a code generator could generate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133865</commentid>
    <comment_count>11</comment_count>
      <attachid>263268</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-16 09:18:43 -0700</bug_when>
    <thetext>Comment on attachment 263268
Patch for landing

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

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:32
&gt; +    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue);

I noticed one tiny mistake that we should return and fix. I don’t think the meaning of JSC::JSValue is clear here without the argument name, prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133866</commentid>
    <comment_count>12</comment_count>
      <attachid>263268</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-16 09:20:53 -0700</bug_when>
    <thetext>Comment on attachment 263268
Patch for landing

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

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:137
&gt; +template&lt;typename JSClass&gt; void JSDOMConstructor&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)

In the final patch you landed this was one of the only function templates without “inline”. Was that intentional? If not, I suggest adding the inline.

&gt; Source/WebCore/bindings/js/JSDOMConstructor.h:144
&gt; +template&lt;typename JSClass&gt; JSC::ConstructType JSDOMConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)

In the final patch you landed this was one of the only function templates without “inline”. Was that intentional? If not, I suggest adding the inline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133901</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-16 10:20:36 -0700</bug_when>
    <thetext>Thanks for the additional points.
I filed bug 150238 to keep track of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133906</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-10-16 10:26:42 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; As of complexity/code size, basically, these templates only do what the code
&gt; &gt; generator was doing.
&gt; &gt; I hope that the amount of code is the same, except that code generator is
&gt; &gt; now generating less.
&gt; 
&gt; We may be misunderstanding each other on this. I understood the point you
&gt; are making. My point was that C++ compilers may take substantially longer to
&gt; process class templates and instantiate the template classes from those
&gt; templates than they would to process the individual classes that a code
&gt; generator could generate.

I see.
Although I guess it could be monitored by bots statistics, one patch may not bring enough perf differences to be noticeable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134522</commentid>
    <comment_count>15</comment_count>
      <attachid>263268</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-10-19 02:48:40 -0700</bug_when>
    <thetext>Comment on attachment 263268
Patch for landing

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4939
&gt; +    if ($conditionalString) {
&gt; +        push(@$outputArray, &quot;template&lt;&gt; ConstructType ${constructorClassName}::getConstructData(JSCell*, ConstructData&amp; constructData)\n&quot;);
&gt; +        push(@$outputArray, &quot;{\n&quot;);
&gt; +        push(@$outputArray, &quot;#if $conditionalString\n&quot;);
&gt; +        push(@$outputArray, &quot;    constructData.native.function = construct;\n&quot;);
&gt; +        push(@$outputArray, &quot;    return ConstructTypeHost;\n&quot;);
&gt; +        push(@$outputArray, &quot;#else\n&quot;);
&gt; +        push(@$outputArray, &quot;    return Base::getConstructData(cell, constructData);\n&quot;);
&gt; +        push(@$outputArray, &quot;#endif\n&quot;);
&gt; +        push(@$outputArray, &quot;}\n&quot;);
&gt; +        push(@$outputArray, &quot;\n&quot;);
&gt; +    }

The #else case broke the build, I&apos;m fixed it in bug150320.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262773</attachid>
            <date>2015-10-09 08:24:41 -0700</date>
            <delta_ts>2015-10-16 07:13:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149952-20151009122407.patch</filename>
            <type>text/plain</type>
            <size>114136</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwNzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGFiNDY4YjA1NTUxOWY5
MTA2Nzc1ZjI5YmM4OGQzMTIyMzRkNjQzYS4uOGE2ZGUyN2RjYTExMzcxMTM2ZjY1NTNiYzgxY2Fj
MGE2YjBmZjBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2NyBAQAogMjAxNS0xMC0wOSAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCisgICAgICAgIEJpbmRp
bmcgZ2VuZXJhdG9yIHNob3VsZCB1c2UgdGVtcGxhdGVkIEpTWFhDb25zdHJ1Y3RvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTUyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGNvbnN0cnVj
dG9yIHRlbXBsYXRlczoKKyAgICAgICAgLSBKU0RPTUNvbnN0cnVjdG9yOiB1c3VhbCBKUyBjb25z
dHJ1Y3RvcnMKKyAgICAgICAgLSBKU0RPTU5hbWVkQ29uc3RydWN0b3I6IGZvciBuYW1lZCBjb25z
dHJ1Y3RvcnMKKyAgICAgICAgLSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTogZm9y
IG9iamVjdHMgdGhhdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgZnJvbSBKUy4KKwor
ICAgICAgICBVcGRhdGVkIGJpbmRpbmcgZ2VuZXJhdG9yIHRvIHVzZSB0aG9zZSB0ZW1wbGF0ZXMu
CisgICAgICAgIFVwZGF0ZWQgSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCB0byB1c2UgSlNET01OYW1l
ZENvbnN0cnVjdG9yLgorICAgICAgICBVcGRhdGVkIGRlZmF1bHQgdGVtcGxhdGUgaW1wbGVtZW50
YXRpb24gb2YgSlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZU9iamVjdC4KKyAgICAgICAgVXBk
YXRlZCBnZW5lcmF0ZWQgaGVscGVyIHJvdXRpbmVzIG9mIGJpbmRpbmcgZ2VuZXJhdG9yIHRvIGZp
dCB3aXRoIHRoZSB0ZW1wbGF0ZXMuCisKKyAgICAgICAgQSBmdXJ0aGVyIHBhdGNoIHNob3VsZCBy
ZW1vdmUgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgYW5kIERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0LiAKKworICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU6OkpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU0NsYXNzPjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3Rvcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUNvbnN0cnVjdG9yOjpKU0RPTUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3I8SlNDbGFzcz46OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3I8SlNDbGFzcz46Omdl
dENvbnN0cnVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01OYW1lZENvbnN0cnVjdG9y
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01OYW1lZENvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01OYW1lZENvbnN0cnVjdG9yOjpK
U0RPTU5hbWVkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01OYW1lZENvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTU5h
bWVkQ29uc3RydWN0b3I8SlNDbGFzcz46OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NTmFtZWRDb25zdHJ1Y3RvcjxKU0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OmltYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdl
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbWFnZUNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU0ltYWdlQ29uc3RydWN0
b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdldENvbnN0
cnVjdG9yVGVtcGxhdGVDbGFzc05hbWUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRl
Y2xhcmF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlT3ZlcmxvYWRlZENvbnN0cnVjdG9yRGVmaW5p
dGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAg
IChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgIChHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZp
bml0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChIYXNDdXN0b21TZXR0ZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSGFzQ3VzdG9tTWV0aG9kKTogRGVsZXRlZC4KKyAgICAgICAgKE5lZWRzQ29uc3Ry
dWN0b3JQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChDb21wdXRlRnVuY3Rpb25TcGVjaWFs
KTogRGVsZXRlZC4KKyAgICAgICAgKEFkZEpTQnVpbHRpbkluY2x1ZGVzSWZOZWVkZWQpOiBEZWxl
dGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpKU1Rlc3RBY3RpdmVET01PYmplY3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxs
YmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6
Y2FsbGJhY2tXaXRoTm9QYXJhbSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0Q29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21Db25zdHJ1
Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3Q6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0
aE5vSW50ZXJmYWNlT2JqZWN0OjpjcmVhdGVQcm90b3R5cGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q6Omdl
dFByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21Db25z
dHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RF
eGNlcHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2Vw
dGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0RXhjZXB0aW9uOjpKU1Rlc3RFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6SlNUZXN0R2VuZXJhdGVJc1JlYWNo
YWJsZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNyZWF0
ZUpTT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6SlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3I6OmNyZWF0ZVByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpkZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvclByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Tm9kZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3ROb2RlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROb2RlOjpKU1Rlc3ROb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdE5vZGU6OmdldFByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZVByb3Rv
dHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpnZXRQcm90b3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXpl
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RPdmVycmlkZUJ1aWx0aW5zOjpKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlw
ZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5
cGVkZWZzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdFR5cGVkZWZzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTYXR0cmlidXRlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTYXR0cmlidXRlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU2F0dHJpYnV0ZTo6SlNhdHRyaWJ1dGUp
OiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTcmVhZG9ubHlDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNyZWFkb25seVByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNyZWFkb25seTo6SlNy
ZWFkb25seSk6IERlbGV0ZWQuCisKKzIwMTUtMTAtMDkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4u
ZmFibGV0QGNyZi5jYW5vbi5mcj4KKwogICAgICAgICBSYXRpb25hbGl6ZSBKU1hYQ29uc3RydWN0
b3IgY2xhc3MgZGVmaW5pdGlvbgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ5OTIzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29uc3RydWN0b3IuaAppbmRleCAyOWQ2ZjM1ZTlkNTYwN2YxMTMxMDdiZTc2ZTQzZDA3ZGM2ZTMw
OTEwLi44OTc2YTViNDE0MzIyNWM1MjlmOGFhMDYwZTc3MWVmYTIzNzBmYjhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5oCkBAIC0xOSwxMCArMTks
MTIwIEBACiAjaWZuZGVmIEpTRE9NQ29uc3RydWN0b3JfaAogI2RlZmluZSBKU0RPTUNvbnN0cnVj
dG9yX2gKIAorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordGVtcGxhdGUgPHR5
cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU+KHZtLmhl
YXApKSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZShzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpIHsgfQorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7CisgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QmKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IHZvaWQg
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNDbGFzcz46OmZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Cisg
ICAgaW5pdGlhbGl6ZVByb3BlcnRpZXModm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBKU0NsYXNzPiBjbGFzcyBKU0RPTUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7CisKKyAgICBzdGF0aWMgSlNET01Db25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgSlNET01Db25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRE9NQ29uc3RydWN0b3I+KHZtLmhlYXAp
KSBKU0RPTUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY29u
c3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1
cm4gY29uc3RydWN0b3I7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIEpTRE9NQ29uc3RydWN0b3IoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgOiBC
YXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KSB7IH0KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3Rh
dGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlND
OjpDb25zdHJ1Y3REYXRhJik7CisgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QmKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xh
c3M+IHZvaWQgSlNET01Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBpbml0
aWFsaXplUHJvcGVydGllcyh2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4gSlNDOjpDb25zdHJ1Y3RUeXBlIEpTRE9NQ29uc3RydWN0b3I8SlNDbGFzcz46
OmdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1
Y3Q7CisgICAgcmV0dXJuIEpTQzo6Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBKU0NsYXNzPiBjbGFzcyBKU0RPTU5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQgeworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKKworICAgIHN0YXRpYyBKU0RPTU5hbWVkQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEpTRE9NTmFtZWRDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
RE9NTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTRE9NTmFtZWRDb25zdHJ1Y3RvcihzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgIH0K
KworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJp
dmF0ZToKKyAgICBKU0RPTU5hbWVkQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgOiBCYXNlKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KSB7IH0KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0
VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7
CisgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IHZvaWQgSlNET01OYW1l
ZENvbnN0cnVjdG9yPEpTQ2xhc3M+OjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxPYmplY3QpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBpbml0aWFs
aXplUHJvcGVydGllcyh2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gSlNDOjpDb25zdHJ1Y3RUeXBlIEpTRE9NTmFtZWRDb25zdHJ1Y3RvcjxKU0NsYXNz
Pjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdDsKKyAgICByZXR1cm4gSlNDOjpDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwogdGVtcGxhdGUg
PHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTQnVpbHRpbkNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IEJhc2U7CkBAIC00OCwyOCArMTU4LDMzIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBpbml0aWFsaXplUHJvcGVydGllcyhKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKSB7IH0KICAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERh
dGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOwor
ICAgIEpTQzo6SlNPYmplY3QqIGNyZWF0ZUpTT2JqZWN0KCk7CiAKICAgICAvLyBNdXN0IGJlIGRl
ZmluZWQgZm9yIGVhY2ggc3BlY2lhbGl6YXRpb24gY2xhc3MuCi0gICAgSlNDOjpKU0Z1bmN0aW9u
KiBjcmVhdGVJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qm
KTsKLSAgICBKU0M6OkpTT2JqZWN0KiBjcmVhdGVKU09iamVjdCgpOworICAgIEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlKiBpbml0aWFsaXplRXhlY3V0YWJsZShKU0M6OlZNJik7CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiB2b2lkIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+
OjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHNldEluaXRpYWxpemVGdW5jdGlvbih2bSwgKmNyZWF0ZUluaXRp
YWxpemVGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0KSk7CisgICAgc2V0SW5pdGlhbGl6ZUZ1bmN0
aW9uKHZtLCAqSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIGluaXRp
YWxpemVFeGVjdXRhYmxlKHZtKSwgJmdsb2JhbE9iamVjdCkpOwogICAgIGluaXRpYWxpemVQcm9w
ZXJ0aWVzKHZtLCBnbG9iYWxPYmplY3QpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNz
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNCdWlsdGluQ29uc3RydWN0b3I8
SlNDbGFzcz46OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgYXV0byog
Y2FzdGVkVGhpcyA9IEpTQzo6anNDYXN0PEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oc3RhdGUtPmNh
bGxlZSgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gY2FzdGVkVGhpcy0+Y3JlYXRlSlNPYmpl
Y3QoKTsKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBjYXN0ZWRUaGlzLT5jcmVhdGVKU09i
amVjdCgpOwogICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKCpzdGF0ZSwgKm9i
amVjdCwgKmNhc3RlZFRoaXMtPmluaXRpYWxpemVGdW5jdGlvbigpKTsKICAgICByZXR1cm4gSlND
OjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gSlNDOjpKU09iamVjdCogSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNyZWF0ZUpT
T2JqZWN0KCkKK3sKKyAgICByZXR1cm4gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxK
U0NsYXNzPihnbG9iYWxPYmplY3QoKS0+dm0oKSwgKmdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2Jq
ZWN0KCkpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkNvbnN0cnVjdFR5
cGUgSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDOjpK
U0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7CiAgICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKaW5kZXggMjEzYjliYjI1NjE0ODc5
N2VkNjQzODIyYjg2NTYyMDNlMjA5OGNmZC4uMGJjMzM3NTRhYTFmYmM1YTM2OTMxNzM0ZjdkMTU5
ZTQyNDkwNDQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcApAQCAtNTAxLDcgKzUwMSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmV2
ZW50KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OmltYWdl
KEV4ZWNTdGF0ZSYgc3RhdGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTSW1hZ2VDb25zdHJ1Y3Rvcj4oc3RhdGUudm0oKSwgKnRoaXMpOworICAgIHJldHVybiBjcmVh
dGVJbWFnZUNvbnN0cnVjdG9yKHN0YXRlLnZtKCksICp0aGlzKTsKIH0KIAogI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1h
Z2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYzZjZWNhZjI3MWM5ODY2Yjg4YjQxMmEwMDI0NmQ0ZGM0
ZTA0MmM4Zi4uODFjZDFlMjVhYmYzMzU3NjI4MGViZTk4NmM4ODM3YzZmYTIwMDU1MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCkBA
IC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJbWFnZUNv
bnN0cnVjdG9yLmgiCiAKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpT
SFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KQEAgLTMwLDU0ICszMCw0OCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNU
SUJMRShKU0ltYWdlQ29uc3RydWN0b3IpOwotCi1jb25zdCBDbGFzc0luZm8gSlNJbWFnZUNvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJJbWFnZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0ltYWdlQ29uc3RydWN0b3IpIH07Cit0eXBlZGVmIEpTRE9N
TmFtZWRDb25zdHJ1Y3RvcjxKU0hUTUxJbWFnZUVsZW1lbnQ+IEpTSW1hZ2VDb25zdHJ1Y3RvcjsK
IAotSlNJbWFnZUNvbnN0cnVjdG9yOjpKU0ltYWdlQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KK1NUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0ltYWdlQ29uc3RydWN0b3IpOwogCi12
b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTSW1hZ2VDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU0hUTUxJbWFnZUVsZW1lbnQ6OmdldFByb3RvdHlwZSh2bSwgJmds
b2JhbE9iamVjdCksIE5vbmUpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RJbWFnZShFeGVjU3RhdGUqIGV4ZWMpCit0ZW1wbGF0ZTw+IEVuY29kZWRK
U1ZhbHVlIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgSlNJbWFnZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTSW1hZ2VD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICBKU0ltYWdlQ29uc3RydWN0b3IqIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNJbWFnZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgp
KTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBqc0NvbnN0cnVjdG9yLT5kb2N1bWVudCgpOwog
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgIkltYWdlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9j
dW1lbnQgaXMgdW5hdmFpbGFibGUiKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKHN0YXRlLCAiSW1hZ2UgY29uc3RydWN0b3IgYXNzb2Np
YXRlZCBkb2N1bWVudCBpcyB1bmF2YWlsYWJsZSIpKTsKIAogICAgIC8vIENhbGxpbmcgdG9KUyBv
biB0aGUgZG9jdW1lbnQgY2F1c2VzIHRoZSBKUyBkb2N1bWVudCB3cmFwcGVyIHRvIGJlCiAgICAg
Ly8gYWRkZWQgdG8gdGhlIHdpbmRvdyBvYmplY3QuIFRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhh
dCBKU0RvY3VtZW50Ojp2aXNpdAogICAgIC8vIHdpbGwgYmUgY2FsbGVkLCB3aGljaCB3aWxsIGNh
dXNlIHRoZSBpbWFnZSBlbGVtZW50IHRvIGJlIG1hcmtlZCBpZiBuZWNlc3NhcnkuCi0gICAgdG9K
UyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQpOworICAgIHRv
SlMoc3RhdGUsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBkb2N1bWVudCk7CiAgICAg
aW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CiAgICAgaW50KiBvcHRpb25hbFdpZHRoID0gMDsK
ICAgICBpbnQqIG9wdGlvbmFsSGVpZ2h0ID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID4gMCkgewotICAgICAgICB3aWR0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7CisgICAgaWYgKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPiAwKSB7CisgICAgICAgIHdpZHRo
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvSW50MzIoc3RhdGUpOwogICAgICAgICBvcHRpb25hbFdp
ZHRoID0gJndpZHRoOwogICAgIH0KLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkg
ewotICAgICAgICBoZWlnaHQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAg
IGlmIChzdGF0ZS0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICBoZWlnaHQgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9JbnQzMihzdGF0ZSk7CiAgICAgICAgIG9wdGlvbmFsSGVpZ2h0ID0g
JmhlaWdodDsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRv
SlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmpl
Y3QoKSwKICAgICAgICAgSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcigq
ZG9jdW1lbnQsIG9wdGlvbmFsV2lkdGgsIG9wdGlvbmFsSGVpZ2h0KSkpKTsKIH0KIAotQ29uc3Ry
dWN0VHlwZSBKU0ltYWdlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpT
SW1hZ2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiSW1hZ2VDb25zdHJ1Y3RvciIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNJbWFnZUNvbnN0cnVjdG9yKSB9OworCitK
U0M6OkpTVmFsdWUgY3JlYXRlSW1hZ2VDb25zdHJ1Y3RvcihKU0M6OlZNJiB2bSwgY29uc3QgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEltYWdlOwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9z
dDsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPih2bSwg
Z2xvYmFsT2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaAppbmRleCBjYzgxMTgzYjhh
ZDBjMjI2MzQwNjZjNTBhOTk0OTc3NDQ4ZDFmN2JhLi5hNzAyMTQzY2Y5NTUyN2ViMjdmYzVkMWY5
ODQxYjBmZDI1NzBlNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlQ29uc3RydWN0b3IuaApAQCAtMjAsMzUgKzIwLDE3IEBACiAjaWZuZGVmIEpTSW1hZ2VDb25z
dHJ1Y3Rvcl9oCiAjZGVmaW5lIEpTSW1hZ2VDb25zdHJ1Y3Rvcl9oCiAKLSNpbmNsdWRlICJET01D
b25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2lu
Y2x1ZGUgIkpTRG9jdW1lbnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CitjbGFzcyBWTTsKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgSlNJbWFnZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRo
RG9jdW1lbnQgQmFzZTsKLQotICAgICAgICBzdGF0aWMgSlNJbWFnZUNvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTSW1hZ2VDb25zdHJ1
Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTSW1h
Z2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTSW1hZ2VDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgREVDTEFSRV9JTkZPOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSlNJbWFnZUNvbnN0cnVj
dG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICAgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICAgICAgc3Rh
dGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlND
OjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgfTsKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitK
U0M6OkpTVmFsdWUgY3JlYXRlSW1hZ2VDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNET01H
bG9iYWxPYmplY3QmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVj
dG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUHJp
dmF0ZUNvbnN0cnVjdG9ycy5jcHAKaW5kZXggZWQ4YTZmNTNiMDFjYWRiODk5OGVmZjQyMWRkOGFk
OWZiZjg1NGQxOS4uMDQxMDkzOGQ1MTU2OWJmZTM1YmUzMmQwNDA3ZTkwYjc5OWFkNjNhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVByaXZh
dGVDb25zdHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVh
ZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcApAQCAtNzMsMTQgKzczLDE0IEBAIHRl
bXBsYXRlPD4gSlNPYmplY3QqIEpTQnVpbHRpblJlYWRhYmxlU3RyZWFtQ29udHJvbGxlclByaXZh
dGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlCiAgICAgcmV0dXJuIEpTUmVhZGFibGVTdHJlYW1Db250cm9s
bGVyOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTUmVhZGFibGVTdHJlYW1Db250cm9sbGVyPihn
bG9iYWxPYmplY3QoKS0+dm0oKSwgKmdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCksIFJl
YWRhYmxlU3RyZWFtQ29udHJvbGxlcjo6Y3JlYXRlKCkpOwogfQogCi10ZW1wbGF0ZTw+IEpTRnVu
Y3Rpb24qIEpTQnVpbHRpblJlYWRhYmxlU3RyZWFtUmVhZGVyUHJpdmF0ZUNvbnN0cnVjdG9yOjpj
cmVhdGVJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gRnVuY3Rpb25FeGVjdXRhYmxlKiBKU0J1aWx0aW5S
ZWFkYWJsZVN0cmVhbVJlYWRlclByaXZhdGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFi
bGUoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbih2bSwgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNQcml2YXRlSW5pdGlhbGl6ZVJlYWRh
YmxlU3RyZWFtUmVhZGVyQ29kZUdlbmVyYXRvcih2bSksICZnbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiByZWFkYWJsZVN0cmVhbUludGVybmFsc1ByaXZhdGVJbml0aWFsaXplUmVhZGFibGVTdHJl
YW1SZWFkZXJDb2RlR2VuZXJhdG9yKHZtKTsKIH0KIAotdGVtcGxhdGU8PiBKU0Z1bmN0aW9uKiBK
U0J1aWx0aW5SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJQcml2YXRlQ29uc3RydWN0b3I6OmNyZWF0
ZUluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQordGVtcGxhdGU8PiBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTQnVpbHRpblJlYWRh
YmxlU3RyZWFtQ29udHJvbGxlclByaXZhdGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZUV4ZWN1dGFi
bGUoSlNDOjpWTSYgdm0pCiB7Ci0gICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbih2bSwgcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNQcml2YXRlSW5pdGlhbGl6ZVJlYWRh
YmxlU3RyZWFtQ29udHJvbGxlckNvZGVHZW5lcmF0b3Iodm0pLCAmZ2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNQcml2YXRlSW5pdGlhbGl6ZVJlYWRhYmxl
U3RyZWFtQ29udHJvbGxlckNvZGVHZW5lcmF0b3Iodm0pOwogfQogCiBKU1ZhbHVlIGNyZWF0ZVJl
YWRhYmxlU3RyZWFtUmVhZGVyUHJpdmF0ZUNvbnN0cnVjdG9yKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggNWYwYjE1MTM0NDIwMzc5MDBjN2RmYjEyNTM2
ZmMwN2Q1YmZjMmE1MS4uMDY0NTdjNTNiZTgxZTliMGMxNzRlZGRkYjhkNDgzYTM0YjU0ZDRjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KQEAgLTE4NzQsMTAgKzE4NzQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
CiAgICAgIyBBZGQgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KICAgICBpZiAoTmVlZHNDb25zdHJ1
Y3RvclByb3BlcnR5KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9N
QmluZGluZy5oIn0gPSAxOwotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCJ9ID0gMTsKLSAgICAgICAgfQogICAgICAgICBH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwg
JGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwogICAgIH0KIApAQCAtNDU4NCwxNCArNDU4MCwx
MyBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbgogICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIn07XG5cbiIpOwogfQogCi1zdWIgR2V0UGFyZW50Q29uc3RydWN0b3JDbGFzc05hbWUK
K3N1YiBHZXRDb25zdHJ1Y3RvclRlbXBsYXRlQ2xhc3NOYW1lCiB7CiAgICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNC
dWlsdGluQ29uc3RydWN0b3IifSkgewotICAgICAgICByZXR1cm4gIkRPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0IjsKLSAgICB9Ci0gICAgcmV0dXJuICJET01Db25zdHJ1Y3Rvck9iamVjdCI7
Ci0KKyAgICByZXR1cm4gIkpTQnVpbHRpbkNvbnN0cnVjdG9yIiBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn0pOworICAgIHJldHVybiAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUiIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KTsKKyAgICByZXR1cm4gIkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlIiB1bmxlc3MgSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZh
Y2UpOworICAgIHJldHVybiAiSlNET01Db25zdHJ1Y3RvciI7CiB9CiAKIHN1YiBHZW5lcmF0ZUNv
bnN0cnVjdG9yRGVjbGFyYXRpb24KQEAgLTQ2MDIsNjUgKzQ1OTcsMTMgQEAgc3ViIEdlbmVyYXRl
Q29uc3RydWN0b3JEZWNsYXJhdGlvbgogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CiAK
ICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3Ii
OwotICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDb25zdHJ1Y3RvckNsYXNzTmFt
ZSgkaW50ZXJmYWNlKTsKLQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNsYXNzICR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9IDogcHVibGljICIgLiAkcGFyZW50Q2xhc3NOYW1lIC4gIiB7XG4iKTsK
LSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwcml2YXRlOlxuIik7Ci0gICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmKTtcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpO1xuXG4iKTsKLQot
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInB1YmxpYzpcbiIpOwotICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICB0eXBlZGVmICIgLiAkcGFyZW50Q2xhc3NOYW1lIC4gIiBCYXNlO1xuIik7Ci0g
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyAkY29uc3RydWN0b3JDbGFzc05hbWUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdClcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICB7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRjb25zdHJ1Y3RvckNs
YXNzTmFtZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDwkY29uc3RydWN0
b3JDbGFzc05hbWU+KHZtLmhlYXApKSAkY29uc3RydWN0b3JDbGFzc05hbWUoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4gcHRyO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cblxuIik7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgREVDTEFSRV9J
TkZPO1xuIik7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcbiIpOwotICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICB7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7Ci0KLSAgICBpZiAo
SXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgInByb3RlY3RlZDpcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVj
U3RhdGUqKTtcbiIpOwotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc3RhdGljIEpT
Qzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25z
dHJ1Y3REYXRhJik7XG4iKTsKLSAgICB9Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAifTtcblxu
Iik7Ci0KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29u
c3RydWN0b3IifSkgewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksIDw8RU5EKTsKLWNsYXNz
IEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQgewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRo
RG9jdW1lbnQgQmFzZTsKLQotICAgIHN0YXRpYyBKUyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0
cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKUyR7aW50ZXJm
YWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVh
cCkpIEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICB9CisgICAgbXkgJHRlbXBs
YXRlQ2xhc3NOYW1lID0gR2V0Q29uc3RydWN0b3JUZW1wbGF0ZUNsYXNzTmFtZSgkaW50ZXJmYWNl
KTsKIAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Jmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KKyAgICAkaW1wbEluY2x1ZGVzeyJKU0RP
TUNvbnN0cnVjdG9yLmgifSA9IDE7CiAKLSAgICBERUNMQVJFX0lORk87Ci0KLXByaXZhdGU6Ci0g
ICAgSlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotfTsKLQotRU5ECi0gICAgfQorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInR5cGVkZWYg
JHRlbXBsYXRlQ2xhc3NOYW1lPCRjbGFzc05hbWU+ICR7Y29uc3RydWN0b3JDbGFzc05hbWV9O1xu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAidHlwZWRlZiBKU0RPTU5hbWVkQ29uc3RydWN0
b3I8JGNsYXNzTmFtZT4gSlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvcjtcbiIpIGlm
ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn07Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKIH0KIAogc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWZpbml0aW9ucwpAQCAtNDcwMCw3ICs0NjQzLDcgQEAgc3ViIEdlbmVyYXRlT3ZlcmxvYWRl
ZENvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgIG15ICRsZW5ndGhPZkxvbmdlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JQYXJhbWV0ZXJMaXN0ID0gTGVuZ3RoT2ZMb25nZXN0RnVuY3Rpb25QYXJhbWV0
ZXJMaXN0KCRpbnRlcmZhY2UtPmNvbnN0cnVjdG9ycyk7CiAKICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksIDw8RU5EKTsKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjbGFzc05hbWV9Q29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6
ZV90PigkbGVuZ3RoT2ZMb25nZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCwg
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7CiBFTkQKQEAgLTQ3NDYsNiArNDY4OSw4IEBAIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbgogICAgIG15ICRnZW5lcmF0aW5nTmFtZWRDb25z
dHJ1Y3RvciA9IHNoaWZ0OwogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwogCisgICAgcmV0dXJu
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0
b3IifSk7CisKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05h
bWV9Q29uc3RydWN0b3IiOwogCiAgICAgaWYgKElzQ29uc3RydWN0YWJsZSgkaW50ZXJmYWNlKSkg
ewpAQCAtNDc1NCw3ICs0Njk5LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9FcnJvci5oPiJ9ID0gMTsKIAog
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Ci1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3QoRXhlY1N0YXRl
KiBzdGF0ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgYXV0
byoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KHN0YXRl
LT5jYWxsZWUoKSk7CiAKQEAgLTQ4MTksMjQgKzQ3NjQsMTYgQEAgRU5ECiAKIEVORAogICAgICAg
ICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0
cnVjdG9yIn0pIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAidGVtcGxhdGU8PiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25z
dHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsK
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwogICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oc3RhdGUp
O1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotICAgICAg
ICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNv
bnN0cnVjdG9yIn0pIHsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3Ry
dWN0KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAie1xuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oc3RhdGUt
PmNhbGxlZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiBjcmVhdGVKU0J1aWx0aW48JHtjbGFzc05hbWV9Pigqc3RhdGUsICpjYXN0ZWRUaGlzLT5p
bml0aWFsaXplRnVuY3Rpb24oKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwot
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotICAgICAgICB9IGVs
c2lmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgJiYgKCEkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0aW5nTmFt
ZWRDb25zdHJ1Y3RvcikpIHsKKyAgICAgICAgIH0gZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3Rv
cigkaW50ZXJmYWNlKSAmJiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1l
ZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+e292ZXJsb2FkZWRJbmRleH0gJiYgJGZ1bmN0aW9uLT57b3Zl
cmxvYWRlZEluZGV4fSA+IDApIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdCR7Y2xhc3NOYW1lfSRmdW5j
dGlvbi0+e292ZXJsb2FkZWRJbmRleH0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fTo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKVxuIik7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIp
OwpAQCAtNDk2MSwyMyArNDg5OCw5IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0
aG9kcwogICAgICAgICAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDA7CiAgICAgfQogCi0gICAg
cHVzaChAJG91dHB1dEFycmF5LCAiY29uc3QgQ2xhc3NJbmZvICR7Y29uc3RydWN0b3JDbGFzc05h
bWV9OjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Db25zdHJ1Y3RvclwiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRjb25zdHJ1Y3RvckNsYXNzTmFt
ZSkgfTtcblxuIik7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfTo6JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAgcHVzaChA
JG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsK
LQotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInRlbXBsYXRlPD4gdm9pZCAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfTo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KVxuIik7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7
CiAKLSAgICBpZiAoJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7Ci0gICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpO1xu
Iik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwotICAgIH0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7Ci0KICAgICAjIFRoZXJlIG11c3Qg
ZXhpc3QgYW4gaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgZm9yIGV2ZXJ5IG5vbi1jYWxsYmFj
ayBpbnRlcmZhY2UgZGVmaW5lZCwgcmVnYXJkbGVzcwogICAgICMgb2Ygd2hldGhlciB0aGUgaW50
ZXJmYWNlIHdhcyBkZWNsYXJlZCB3aXRoIHRoZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVk
IGF0dHJpYnV0ZS4KICAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2ludGVy
ZmFjZS1wcm90b3R5cGUtb2JqZWN0CkBAIC00OTg2LDcgKzQ5MDksNyBAQCBzdWIgR2VuZXJhdGVD
b25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICB9IGVsc2lmICgkaW50ZXJmYWNlLT5pc0NhbGxi
YWNrKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oZ2xv
YmFsT2JqZWN0KTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCAke2NsYXNz
TmFtZX06OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICR7Y2xhc3NOYW1lfTo6
Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pO1xuIik7CiAgICAgfQogCiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbChcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiKSkpLCBSZWFk
T25seSB8IERvbnRFbnVtKTtcbiIpOwpAQCAtNDk5OSwzMyArNDkyMiwzMCBAQCBzdWIgR2VuZXJh
dGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgJHtjbGFzc05hbWV9Q29uc3RydWN0b3JUYWJs
ZVZhbHVlcywgKnRoaXMpO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgIG15ICRp
bml0aWFsaXplRnVuY3Rpb25OYW1lID0gR2V0SlNCdWlsdGluRnVuY3Rpb25OYW1lKCR7Y2xhc3NO
YW1lfSwgImluaXRpYWxpemUiIC4gJHtpbnRlcmZhY2VOYW1lfSk7Ci0gICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBzZXRJbml0aWFsaXplRnVuY3Rpb24odm0sICpKU0M6OkpTRnVuY3Rp
b246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgJHtpbml0aWFsaXplRnVuY3Rpb25OYW1lfSh2
bSksICZnbG9iYWxPYmplY3QpKTtcbiIpOwotICAgIH0KLQogICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIn1cblxuIik7CiAKLSAgICBpZiAoSXNDb25zdHJ1Y3RhYmxlKCRpbnRlcmZhY2UpKSB7Ci0g
ICAgICAgIGlmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3Ry
dWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpIHsKLSAgICAgICAgICAgIG15
ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbnN0cnVjdG9y
Q29uZGl0aW9uYWxTdHJpbmcoJGludGVyZmFjZSk7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJDb25zdHJ1Y3RUeXBlICR7Y29uc3RydWN0b3JDbGFzc05hbWV9OjpnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgaWYgKCRjb25k
aXRpb25hbFN0cmluZykgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNp
ZiAkY29uZGl0aW9uYWxTdHJpbmdcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDtcbiIp
OwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZUhvc3Q7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIj
ZWxzZVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVy
biBCYXNlOjpnZXRDb25zdHJ1Y3REYXRhKGNlbGwsIGNvbnN0cnVjdERhdGEpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2VuZGlmXG4iKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0O1xuIik7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDtcbiIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJcbiIpOwotICAgICAgICB9CisgICAg
bXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uc3RydWN0
b3JDb25kaXRpb25hbFN0cmluZygkaW50ZXJmYWNlKTsKKyAgICBpZiAoJGNvbmRpdGlvbmFsU3Ry
aW5nKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInRlbXBsYXRlPD4gQ29uc3RydWN0
VHlwZSAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIntcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIjaWYgJGNvbmRpdGlv
bmFsU3RyaW5nXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGNvbnN0cnVj
dERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0O1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7XG4iKTsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiI2Vsc2VcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgcmV0dXJuIEJhc2U6OmdldENvbnN0cnVjdERhdGEoY2VsbCwgY29uc3RydWN0RGF0
YSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2VuZGlmXG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIlxuIik7CisgICAgfQorCisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgInRlbXBsYXRlPD4gRnVuY3Rpb25FeGVjdXRhYmxlKiAke2NvbnN0cnVjdG9yQ2xhc3NOYW1l
fTo6aW5pdGlhbGl6ZUV4ZWN1dGFibGUoVk0mIHZtKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJu
ICIgLiBHZXRKU0J1aWx0aW5GdW5jdGlvbk5hbWUoJGNsYXNzTmFtZSwgImluaXRpYWxpemUiIC4g
JGludGVyZmFjZU5hbWUpIC4gIih2bSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAifVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiAgICAgfQorICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgInRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvICR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9OjpzX2luZm8gPSB7IFwiJHt2aXNpYmxlSW50ZXJmYWNlTmFtZX1Db25z
dHJ1Y3RvclwiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKCRjb25zdHJ1
Y3RvckNsYXNzTmFtZSkgfTtcblxuIik7CiB9CiAKIHN1YiBIYXNDdXN0b21Db25zdHJ1Y3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCA1MTkxZGY5NTg2ZTFlZDJjNWNh
OTIzZDYyMjU0ZjQ1Nzg0ZDZiODYxLi40YTgzZjU2OTZhN2YzMWE4ZmRjNDFkNzBlY2U3MmY1NTc1
OTQ3OWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU05vZGUuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgpAQCAt
NjYsMjYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKIH07CiAKLWNsYXNzIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RBY3RpdmVET01PYmplY3RDb25z
dHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0QWN0aXZlRE9NT2JqZWN0PiBKU1Rlc3RBY3RpdmVE
T01PYmplY3RDb25zdHJ1Y3RvcjsKIAogLyogSGFzaCB0YWJsZSAqLwogCkBAIC0xMDQsMjIgKzg2
LDE1IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RBY3RpdmVET01PYmplY3RU
YWJsZVZhbHVlc1tdID0KIH07CiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0VGFibGUgPSB7IDIsIDMsIHRydWUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdFRhYmxl
VmFsdWVzLCBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJsZUluZGV4IH07Ci1jb25zdCBDbGFzc0lu
Zm8gSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdEFjdGl2
ZURPTU9iamVjdENvbnN0cnVjdG9yOjpKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0QWN0
aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RBY3RpdmVET01P
YmplY3RDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
LSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0UHJvdG90eXBl
KHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEFjdGl2ZURPTU9iamVjdCIpKSksIFJl
YWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKK3RlbXBsYXRl
PD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKSB9
OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdEFjdGl2ZURPTU9iamVjdFByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDYWxsYmFjay5jcHAKaW5kZXggMjg3NzA1MDI1ZjkyMDcxMWMyOGVkMmFlZGI0Y2MyZGU1
MDg0ODg2MC4uOTc4MTc1ZjU1MGM5OTIxMTE4OWNmNWY0MDJkYmM0NDY0NzdmZjIwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxi
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q2FsbGJhY2suY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJh
Y2suaCIKIAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNUZXN0
Tm9kZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKQEAgLTU5LDI2ICs2
MCw3IEBAIEpTVGVzdENhbGxiYWNrOjp+SlNUZXN0Q2FsbGJhY2soKQogI2VuZGlmCiB9CiAKLWNs
YXNzIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RDYWxsYmFja0Nv
bnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENh
bGxiYWNrQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKK3R5cGVkZWYgSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0Q2FsbGJhY2s+IEpTVGVzdENhbGxiYWNrQ29u
c3RydWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKQEAgLTkyLDIz
ICs3NCwxNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q2FsbGJhY2tDb25z
dHJ1Y3RvclRhYmxlVmFsdWVzW10gPQogQ09NUElMRV9BU1NFUlQoMSA9PSBUZXN0Q2FsbGJhY2s6
OkNPTlNUQU5UMSwgVGVzdENhbGxiYWNrRW51bUNPTlNUQU5UMUlzV3JvbmdVc2VEb05vdENoZWNr
Q29uc3RhbnRzKTsKIENPTVBJTEVfQVNTRVJUKDIgPT0gVGVzdENhbGxiYWNrOjpDT05TVEFOVDIs
IFRlc3RDYWxsYmFja0VudW1DT05TVEFOVDJJc1dyb25nVXNlRG9Ob3RDaGVja0NvbnN0YW50cyk7
CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvcikgfTsKLQotSlNUZXN0Q2FsbGJhY2tD
b25zdHJ1Y3Rvcjo6SlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiVGVzdENhbGxiYWNrIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdENhbGxiYWNr
Q29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMpOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Q2FsbGJh
Y2tDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvcikgfTsKKwogSlNWYWx1ZSBKU1Rlc3RDYWxsYmFjazo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdC5jcHAKaW5kZXggYzI2NzAyM2I1YTZkMTI3ZDUzMDk4MmMxODY0ZmFjMjhiMDcwYTUxNi4u
MThmZTRhMGQ0OGU1YjY3NjhmMDZjNDg0YjE5NzE3Nzc5Y2RiYjdhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVj
dG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VP
YmplY3QuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC01Nyw1NiArNTgsMjEgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9y
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbUNvbnN0
cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RD
dXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7
Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlND
ZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9y
PEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0PiBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOwogCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSkKK3RlbXBsYXRlPD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmNvbnN0cnVj
dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEpTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0KHN0YXRlKTsKIH0KIAotY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdENvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9y
KSB9OwotCi1KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0
cnVjdG9yOjpKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0
cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7Ci19Ci0KLXZvaWQgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZh
Y2VPYmplY3RDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QiKSkpLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVzdEN1
c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBj
b25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7Ci19Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tQ29uc3Ry
dWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvcikgfTsKIAogLyogSGFzaCB0YWJs
ZSBmb3IgcHJvdG90eXBlICovCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3Bw
CmluZGV4IDk2ZThhNWU0OGYwMjE2MjM2MjJjMTVjMWM2ODVkYjQ2MWNkYjM2MGYuLjNkMjE1ODdj
MjFjZGE4ZmYyYzgyNjNiNjU4ZjU3MzMzZGQwZmYyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtNjQsMjYgKzY1LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNs
YXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAg
ewotICAgICAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1
Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+IEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ29uc3RydWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgKi8KIApAQCAtOTksMjIg
KzgxLDE1IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlclRhYmxlVmFsdWVzW10gPQogfTsKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RD
dXN0b21OYW1lZEdldHRlclRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlclRhYmxlVmFsdWVzLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclRhYmxlSW5kZXggfTsKLWNv
bnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcikg
fTsKLQotSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6SlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17
Ci19Ci0KLXZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8
PiB2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlcjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
VGVzdEN1c3RvbU5hbWVkR2V0dGVyIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKIH0KIAordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEN1c3RvbU5hbWVkR2V0
dGVyQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IpIH07CisKIC8qIEhhc2ggdGFibGUgZm9y
IHByb3RvdHlwZSAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAppbmRleCBhYzhlZWVkOTBkM2RhNWNhNzYxZDkxNGQyMGUwZmRlMDc0NzY3
YzAxLi42N2MzODUzMGFhZWYwM2RhNTViMTIyZmU4MjAxYzFhZjNmMzc2ODdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAgLTYzLDMxICs2
NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9Owog
Ci1jbGFzcyBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29u
c3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoK
LSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAg
IHsKLSAgICAgICAgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSop
OwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpT
Q2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RFdmVudENvbnN0cnVjdG9yPiBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3I7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0
b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8qIGpzQ29uc3RydWN0
b3IgPSBqc0Nhc3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNh
bGxlZSgpKTsKIApAQCAtMTI4LDI3ICsxMDcsMTQgQEAgYm9vbCBmaWxsVGVzdEV2ZW50Q29uc3Ry
dWN0b3JJbml0KFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdCYgZXZlbnRJbml0LCBKU0RpY3Rpb24K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3I6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci19Ci0KLXZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFs
T2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEV2ZW50Q29uc3RydWN0b3IiKSkpLCBSZWFkT25seSB8IERv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVz
dEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewotICAgIGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0OwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKLX0K
K3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKSB9OwogCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAKaW5kZXggMDBhYzgwZTQzMTdlYWVhNThmYWM1NWVkZjQxMDQ4MDgw
ZGZhMGFkNS4uMmVmNzgxZWZmOTIwMWY0OGQ2MjNjYTkwYzI1NGE2MmNiNjgzODk3MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRXZlbnQu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNp
bmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKQEAgLTczLDI2
ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9
OwogCi1jbGFzcyBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rv
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0RXZlbnRU
YXJnZXRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAg
SlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0
RXZlbnRUYXJnZXRDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdEV2
ZW50VGFyZ2V0PiBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOwogCiAvKiBIYXNoIHRhYmxl
ICovCiAKQEAgLTEwOCwyMiArOTAsMTUgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEV2ZW50VGFyZ2V0VGFibGVWYWx1ZXNbXSA9CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdEV2ZW50VGFyZ2V0VGFibGUgPSB7IDEsIDEsIHRydWUsIEpTVGVzdEV2ZW50VGFy
Z2V0VGFibGVWYWx1ZXMsIEpTVGVzdEV2ZW50VGFyZ2V0VGFibGVJbmRleCB9OwotY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RFdmVu
dFRhcmdldENvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RFdmVudFRhcmdldENv
bnN0cnVjdG9yOjpKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEV2ZW50VGFyZ2V0OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFs
KCJUZXN0RXZlbnRUYXJnZXQiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwg
RG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RFdmVudFRh
cmdldENvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3RvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0RXZlbnRUYXJnZXRD
b25zdHJ1Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZVRhYmxlVmFs
dWVzW10gPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAppbmRleCA5NzY2YTQ4M2IyN2IyNzQxODJiZGRk
YmY5ODUyMzkxODE4YWE3OGI2Li42ZjljN2RlODg2MjdhZDUyMDIzMjk1MmQxNzY5NDBkNjVjZDAz
YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUg
IkpTVGVzdEV4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CkBAIC02MCwyNiArNjEsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xh
c3MgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29u
c3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEV4Y2VwdGlv
bkNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwordHlwZWRlZiBKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RFeGNlcHRpb24+IEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yOwogCiAvKiBIYXNoIHRhYmxlICovCiAKQEAgLTk1LDIyICs3NywxNSBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXhjZXB0aW9uVGFibGVWYWx1ZXNb
XSA9CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEV4Y2VwdGlvblRhYmxlID0g
eyAxLCAxLCB0cnVlLCBKU1Rlc3RFeGNlcHRpb25UYWJsZVZhbHVlcywgSlNUZXN0RXhjZXB0aW9u
VGFibGVJbmRleCB9OwotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9OwotCi1K
U1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6SlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAg
OiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi12b2lkIEpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RFeGNlcHRpb246OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJ
SUxpdGVyYWwoIlRlc3RFeGNlcHRpb24iKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRP
bmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFeGNlcHRpb25D
b25zdHJ1Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVl
c1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAppbmRleCBkMjhm
MzAyMTViNzMzN2UzNGUwMTc4MWFhNDlhYTRhNTc0MjJjMTEyLi40Y2Y2ZTY3NWFiYmI1ZjVlYTkx
MWY3NzNiZDQ5NmIwNTQxMTBmYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGUuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKQEAgLTU3LDQzICs1OCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNU
ZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01H
bG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlPiBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3Ry
dWN0b3I7CiAKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
IHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBw
dHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAg
IH0KLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEdlbmVyYXRlSXNSZWFj
aGFibGVDb25zdHJ1Y3RvcikgfTsKLQotSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVj
dG9yOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBCYXNlKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi12b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFi
bGVDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU6OmdldFByb3RvdHlwZSh2
bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlIikpKSwg
UmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAordGVtcGxh
dGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yIiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxl
Q29uc3RydWN0b3IpIH07CisKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwogCiBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZVByb3RvdHlw
ZVRhYmxlVmFsdWVzW10gPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAxYTBlYjE1YTgxZGFj
ZjQ4ZDA1ZGVkMGY3MWE1OGU5NjJkZTFiZTQ2Li41ZTA0N2EwNGYxZWNlYzMwNjA5MGQ1N2JlNTNk
MTczMWZjMDU1MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtMjYsNiArMjYsNyBAQAog
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5j
bHVkZSAiVGVzdFN1cHBsZW1lbnRhbC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAg
LTE0MywyOSArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
cHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19
OwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yPEpTVGVzdEludGVyZmFjZT4gSlNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgKi8KIApAQCAtMjYyLDcgKzI0MSw3IEBA
IENPTVBJTEVfQVNTRVJUKDEgPT0gVGVzdFN1cHBsZW1lbnRhbDo6U1VQUExFTUVOVEFMQ09OU1RB
TlQxLCBUZXN0SW50ZXJmYWNlRW51bVNVCiBDT01QSUxFX0FTU0VSVCgyID09IFRlc3RTdXBwbGVt
ZW50YWw6OkNPTlNUX0lNUEwsIFRlc3RJbnRlcmZhY2VFbnVtQ09OU1RfSU1QTElzV3JvbmdVc2VE
b05vdENoZWNrQ29uc3RhbnRzKTsKICNlbmRpZgogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0
ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5j
YWxsZWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
QEAgLTI4NSwyNCArMjY0LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0SW50
ZXJmYWNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IpIH07Ci0KLUpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0K
LXZvaWQgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZt
LCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEludGVyZmFjZSIpKSksIFJlYWRPbmx5IHwg
RG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0
aWVzKHZtLCBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9
CiAKLUNvbnN0cnVjdFR5cGUgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3RlbXBsYXRlPD4g
Q29uc3RydWN0VHlwZSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewogI2lmIEVOQUJMRShU
RVNUX0lOVEVSRkFDRSkKICAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdDsKQEAgLTMxMiw2ICsyODIsOCBAQCBDb25zdHJ1Y3RUeXBlIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdAogI2VuZGlm
CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKSB9Owor
CiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5kZXggYWFmNjhkN2I2YTY0YjJiYWFl
ZTRmMDc1ZTMyNGJiZjNlZmYyY2MzYS4uMmQ1Y2I0ZTliZGZlZTBiNTc0MDk3YTZlZGJkNDBjZjI4
MGNkNmJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBA
IC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuaCIK
IAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JCdWlsdGlucy5oIgogI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KIApAQCAtNTgsNTkgKzU5LDIyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2Jq
ZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rv
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQotICAgIHsKLSAgICAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvciog
cHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JD
b25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQot
Ci0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3Rl
ZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKLQotSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3I6OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCi17Ci0gICAgYXV0
byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKLSAgICByZXR1cm4gY3JlYXRlSlNCdWlsdGluPEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yPigqc3RhdGUsICpjYXN0ZWRUaGlzLT5pbml0aWFsaXplRnVu
Y3Rpb24oKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKLX0KLQotY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9
OwordHlwZWRlZiBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cj4gSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcjsKIAotSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotfQotCi12
b2lkIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKLSAgICBzZXRJbml0aWFsaXplRnVuY3Rpb24odm0sICpKU0M6OkpTRnVu
Y3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgdGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
SW5pdGlhbGl6ZVRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvZGVHZW5lcmF0b3Iodm0pLCAmZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQordGVtcGxhdGU8PiBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVFeGVjdXRhYmxlKFZNJiB2bSkK
IHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CisgICAgcmV0dXJuIHRlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvckluaXRpYWxpemVUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb2RlR2VuZXJhdG9yKHZtKTsK
IH0KIAordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07CisKIC8qIEhhc2ggdGFibGUgZm9yIHByb3Rv
dHlwZSAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBjYjQxYTI5OTIzYzUyMmNiZDhjMmU4YTczNTNm
NjBhZDkwZDdhNmE1Li42MWU5MzUxMDM1ZGNjMTE4OGJhNThhNDY3YjgyY2U3Y2E2YzUyNTI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0yMyw2
ICsyMyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTTWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CkBAIC02NCw0MyArNjUsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1w
cml2YXRlOgotICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGU8SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOwogCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERF
Q0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCi1jb25zdCBDbGFz
c0luZm8gSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3Ry
dWN0b3IpIH07Ci0KLUpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpnZXRQcm90b3R5
cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAK
K3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90
b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAppbmRleCA5MmViMTMxODY3YjllZTNlNjViNzU0ZDU5MTE2NGZjNWU1OWZm
NzE3Li4zY2I0NTIxNDc4YzEzZWNhOWI0YmIyMDFjZTk5MDc2MDQxZTIxNThmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCkBAIC0yMSw5ICsyMSw5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oIgogCi0jaW5jbHVk
ZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CiAKQEAgLTYwLDY5ICs2MCwxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwot
ICAgIHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1
Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZENv
bnN0cnVjdG9yQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQot
ICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwotCi1jbGFz
cyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudCBCYXNlOwotCi0gICAgc3RhdGljIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JO
YW1lZENvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENv
bnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNo
Q3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0KLXByaXZhdGU6Ci0gICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7Ci0g
ICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxs
KiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QmKTsKLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZENvbnN0cnVjdG9y
Q29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcikgfTsKLQotSlNUZXN0TmFtZWRDb25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBCYXNl
KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yPiBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yQ29uc3RydWN0b3I7Cit0eXBlZGVmIEpTRE9NTmFtZWRDb25zdHJ1Y3RvcjxKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yPiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcjsK
IAotdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9p
ZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFt
ZWRDb25zdHJ1Y3RvciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25z
dHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVt
cGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IpIH07CisKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3ROYW1lZENvbnN0
cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKQEAgLTE0NSwyNyArOTUsMTQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KEUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0
KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7
CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiQXVkaW9Db25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3Ip
IH07Ci0KLUpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpKU1Rlc3ROYW1l
ZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKLX0KLQotdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdCk7Ci0gICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUodm0s
ICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJBdWRpbyIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Ci19Cit0
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiQXVkaW9Db25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3IpIH07CiAKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5k
ZXggZmY3YmM0ZDYyMTQ5YmY5ZTVlMTlmYzUyOGNlN2I5YTNiYTBmN2E1Yy4uNzljZDUxYjQ5N2Jm
ODk3YzAxOTk3ZDA1YjJlMmY2NDkyZDEwZDdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjMsNiArMjMs
NyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpA
QCAtNjMsNTggKzY0LDIzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3ROb2RlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb2RlQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVm
IERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE5vZGVDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0Tm9kZUNv
bnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5v
ZGVDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwot
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOwot
ICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2Vs
bCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3RvcjxK
U1Rlc3ROb2RlPiBKU1Rlc3ROb2RlQ29uc3RydWN0b3I7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0
ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3ROb2RlQ29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsK
ICAgICBSZWZQdHI8VGVzdE5vZGU+IG9iamVjdCA9IFRlc3ROb2RlOjpjcmVhdGUoKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rl
c3ROb2RlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROb2RlQ29uc3RydWN0b3IiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcikg
fTsKLQotSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3IoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBC
YXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5vZGVD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQogewotfQotCi12b2lkIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewot
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dE5vZGU6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3ROb2Rl
IikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAot
Q29uc3RydWN0VHlwZSBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhv
c3Q7Ci19Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIlRlc3ROb2RlQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVDb25zdHJ1Y3RvcikgfTsKIAogLyogSGFzaCB0YWJs
ZSBmb3IgcHJvdG90eXBlICovCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApp
bmRleCA0ZjQyOTAyMzU2NTFlOTE1ZTc2ZGE2ODcwNmE0MTVjNjgwY2U2YjJiLi4wY2Q4NjUzMjhk
NzYwOTQ5MTJlY2RjNzU0YzYyZjI4ZjFiOGJlYjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVy
bWluaXN0aWMuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CkBAIC04MCw0MyArODEsMTcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1w
cml2YXRlOgotICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGU8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYz4gSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y0NvbnN0cnVjdG9yOwogCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5vbmRldGVybWluaXN0
aWNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROb25kZXRlcm1p
bmlzdGljQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwot
ICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19
OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0
b3IpIH07Ci0KLUpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
LXsKLX0KLQotdm9pZCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRl
PD4gdm9pZCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vbmRl
dGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5vbmRldGVybWluaXN0aWND
b25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90
b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5vbmRldGVybWlu
aXN0aWNQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggYmUyMDM3ODFhOGQz
ZTIyNzBjNTE5MTA0NjBkYzRkNWQxMjM1YjRhZC4uNTVlNzkwZjI3MzJmMmUwODY5MmZkYjJiZjI3
MGJiZDMzZTA0MGU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2Uu
aCIKICNpbmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJKU0RvY3VtZW50Lmgi
CkBAIC0zNDUsMjkgKzM0Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3RPYmpDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRl
ZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPYmpDb25zdHJ1
Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T2JqQ29u
c3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T2Jq
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVj
dCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOwotICAg
IHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCos
IEpTQzo6Q29uc3RydWN0RGF0YSYpOwotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3RvcjxKU1Rl
c3RPYmo+IEpTVGVzdE9iakNvbnN0cnVjdG9yOwogCiAvKiBIYXNoIHRhYmxlICovCiAKQEAgLTQ2
OCw3ICs0NDcsNyBAQCBDT01QSUxFX0FTU0VSVCgweDFhYmMgPT0gVGVzdE9iajo6Q09OU1RfVkFM
VUVfMTQsIFRlc3RPYmpFbnVtQ09OU1RfVkFMVUVfMTRJc1dybwogQ09NUElMRV9BU1NFUlQoMTUg
PT0gVGVzdE9iajo6Q09OU1RfSU1QTCwgVGVzdE9iakVudW1DT05TVF9JTVBMSXNXcm9uZ1VzZURv
Tm90Q2hlY2tDb25zdGFudHMpOwogQ09NUElMRV9BU1NFUlQoMCA9PSBUZXN0T2JqOjpyZWFkb25s
eSwgVGVzdE9iakVudW1yZWFkb25seUlzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQog
ewogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqQ29uc3RydWN0b3IqPihz
dGF0ZS0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCkBAIC00ODMsMjggKzQ2MiwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE9iamVjdENvbnN0cnVjdG9yIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpDb25zdHJ1Y3Rvcikg
fTsKLQotSlNUZXN0T2JqQ29uc3RydWN0b3I6OkpTVGVzdE9iakNvbnN0cnVjdG9yKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFz
ZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPYmpDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQogewotfQotCi12b2lkIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T2Jq
OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0T2JqZWN0Iikp
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICByZWlm
eVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE9iakNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0
aGlzKTsKIH0KIAotQ29uc3RydWN0VHlwZSBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewotICAgIGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OwotICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKLX0KK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9iakNv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T2JqZWN0Q29uc3RydWN0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE9iakNvbnN0cnVjdG9yKSB9OwogCiAv
KiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IDE2N2U0NzVlZjYyNGQ1NzZlOTg1MmM5ZWM4NTI3
NjNhZjQzYjM2ZTUuLmE4OGM2ZWQxNDVjNDYxNWY5ZjI0NTk2YjdkMTYyZTZjYmI0MTFhOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAK
QEAgLTYwLDI5ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
ciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7
Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0
YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpT
Qzo6Q29uc3RydWN0RGF0YSYpOwotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3RvcjxKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3I7CiAKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczEoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKQEAgLTE0Miw3ICsxMjEs
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM1KEV4ZWNTdGF0ZSogcwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNPYmplY3QodG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5n
ZXQoKSkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQor
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAg
ICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwgc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSk7CiAgICAgSlNWYWx1ZSBhcmcwKHN0YXRlLT5hcmd1bWVudCgwKSk7CkBAIC0xNjEs
MjcgKzE0MCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KAogICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlKTsKIH0KIAotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit0ZW1wbGF0
ZTw+IHZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
Ci19Ci0KLXZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkp
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSkpLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewotICAgIGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
LX0KK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9OwogCiAvKiBIYXNoIHRhYmxlIGZvciBw
cm90b3R5cGUgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCmluZGV4IGU4
OWZlMWNiYTUwZDcwMjgxYzkwZDFjYTdhNzMzMTcwNzU5MDM4YmMuLmQ2YTg2NTE2ZWRmM2VmNzhi
MDdmY2U3YzRjM2Y1Njc5NjRmNGU3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgInd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oIgpAQCAtNjYsMjYgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdE92ZXJyaWRlQnVpbHRp
bnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgot
ICAgIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0T3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0
cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAg
fQotfTsKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0T3Zl
cnJpZGVCdWlsdGlucz4gSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOwogCiAvKiBI
YXNoIHRhYmxlICovCiAKQEAgLTEwMSwyMiArODMsMTUgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNUYWJsZVZhbHVlc1tdID0KIH07CiAKIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc1RhYmxlID0geyAxLCAxLCB0
cnVlLCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zVGFibGVWYWx1ZXMsIEpTVGVzdE92ZXJyaWRlQnVp
bHRpbnNUYWJsZUluZGV4IH07Ci1jb25zdCBDbGFzc0luZm8gSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9y
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cjo6SlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmpl
Y3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmco
QVNDSUlMaXRlcmFsKCJUZXN0T3ZlcnJpZGVCdWlsdGlucyIpKSksIFJlYWRPbmx5IHwgRG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE92
ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9OworCiAvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXgg
Y2U0M2UwYTM4YzA0NGNiZmUzYTdmMzZiMTE2ODY1NWRiNDA0Y2I3ZC4uMTNmMmNmYWYxNDQyYmY3
MTRkMjk2MmZkZDgwOTFkYTRhYTI2OWFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNp
bmNsdWRlICJKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRl
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKQEAgLTcxLDQzICs3MiwxNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
K3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvcjsKIAotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwot
ICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19
OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5
cGUgKi8KIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5j
cHAKaW5kZXggYmNiOTlkOWRjMjJjZTBiMDExZmZhNjc1MGFjMGRiYmY0OTE1MmQxNS4uZjdkNmY4
ODhkMjZkNDVkM2NhNGVkY2I3YjIzNjNkMjM5ZjljNDgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3Bw
CkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiSlNTVkdQb2ludC5oIgogI2luY2x1ZGUgIkpTU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCkBA
IC05NywyOSArOTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYpOwogfTsKIAotY2xhc3MgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Cit0eXBl
ZGVmIEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0VHlwZWRlZnM+IEpTVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgKi8KIApAQCAtMTQyLDcgKzEyMSw3IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGFibGVWYWx1ZXNb
XSA9CiAgICAgeyAiVGVzdFN1Yk9iaiIsIERvbnREZWxldGUgfCBSZWFkT25seSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaiksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKIH07CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0
KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQpAQCAtMTU3LDI4ICsxMzYsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBz
dGEKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKLWNvbnN0IENsYXNz
SW5mbyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0VHlwZWRlZnND
b25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
VHlwZWRlZnNDb25zdHJ1Y3RvcikgfTsKLQotSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6SlNU
ZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
Cit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotfQot
Ci12b2lkIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RUeXBlZGVmczo6Z2V0UHJvdG90
eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdFR5cGVkZWZzIikpKSwgUmVhZE9u
bHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1By
b3BlcnRpZXModm0sIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRoaXMp
OwogfQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBj
b25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICByZXR1cm4gQ29u
c3RydWN0VHlwZUhvc3Q7Ci19Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RUeXBl
ZGVmc0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvciIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvcikgfTsKIAogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3Bw
CmluZGV4IGRjNTY2NWQwM2Y0NDZmOTE4Yzc0MjcxYzVhMmVhZTdjMGU2OGU4YWQuLmVjM2E1ZjEw
NDg5NzBjZDFmZTQ2MWZhNTczYTU2NjRiMTcyMjdmOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcApAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgIkpTYXR0cmlidXRlLmgiCiAKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVVJMLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
QEAgLTYwLDQzICs2MSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwogfTsKIAotY2xhc3MgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTYXR0cmlidXRlQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTYXR0cmlidXRlPiBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9y
OwogCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTYXR0cmlidXRlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU2F0
dHJpYnV0ZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQot
fTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTYXR0cmlidXRlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
ImF0dHJpYnV0ZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yKSB9OwotCi1KU2F0dHJpYnV0ZUNvbnN0cnVjdG9y
OjpKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKLXsKLX0KLQotdm9pZCBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQg
SlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTYXR0cmlidXRlOjpnZXRQcm90b3R5cGUodm0s
ICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmco
JnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJhdHRyaWJ1dGUiKSkpLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1i
ZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJhdHRyaWJ1dGVDb25zdHJ1
Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNhdHRyaWJ1dGVD
b25zdHJ1Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU2F0dHJpYnV0ZVByb3RvdHlwZVRhYmxlVmFsdWVzW10g
PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuY3BwCmluZGV4IDlkNTgwODQxY2MxODA3YTQyOThkNTMzMGJhMWZjYjhkMzM1NWQx
MDEuLjliNmVkYjExNmJjZDlmODc2N2ViZWEyMWY4OTdjNWExOTkxYjZmMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU3JlYWRvbmx5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFkb25seS5j
cHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU3JlYWRvbmx5LmgiCiAKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTcsNDMgKzU4LDE3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9OwogCi1j
bGFzcyBKU3JlYWRvbmx5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
ewotcHJpdmF0ZToKLSAgICBKU3JlYWRvbmx5Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlPEpTcmVhZG9ubHk+IEpTcmVhZG9ubHlDb25zdHJ1Y3RvcjsKIAotcHVibGljOgotICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNyZWFkb25seUNv
bnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU3JlYWRv
bmx5Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNy
ZWFkb25seUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNyZWFkb25seUNvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpT
cmVhZG9ubHlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAicmVhZG9ubHlDb25zdHJ1Y3RvciIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNyZWFkb25seUNvbnN0cnVjdG9y
KSB9OwotCi1KU3JlYWRvbmx5Q29uc3RydWN0b3I6OkpTcmVhZG9ubHlDb25zdHJ1Y3RvcihTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6
IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNyZWFkb25seUNv
bnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNyZWFkb25seUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7
Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNy
ZWFkb25seTo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgicmVhZG9u
bHkiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQog
Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU3JlYWRvbmx5Q29uc3RydWN0b3I6OnNfaW5m
byA9IHsgInJlYWRvbmx5Q29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTcmVhZG9ubHlDb25zdHJ1Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3Ig
cHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU3JlYWRvbmx5UHJv
dG90eXBlVGFibGVWYWx1ZXNbXSA9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263268</attachid>
            <date>2015-10-16 07:13:24 -0700</date>
            <delta_ts>2015-10-16 08:56:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-149952-20151016111244.patch</filename>
            <type>text/plain</type>
            <size>118478</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjMzZmQwNTljMmE0MDQ2
ZDc1NDZmN2EyMzFmMWI4NDE3ZWNjMTNmNi4uZjJkYmU2NWU3ZDI3MDhlOWRhMTI4MWM3ZjE2M2E3
MmM2YTNmODRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2OSBAQAorMjAxNS0xMC0xNiAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCisgICAgICAgIEJpbmRp
bmcgZ2VuZXJhdG9yIHNob3VsZCB1c2UgdGVtcGxhdGVkIEpTWFhDb25zdHJ1Y3RvcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTUyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkaW5nIGNvbnN0cnVjdG9y
IHRlbXBsYXRlczoKKyAgICAgICAgLSBKU0RPTUNvbnN0cnVjdG9yOiB1c3VhbCBKUyBjb25zdHJ1
Y3RvcnMKKyAgICAgICAgLSBKU0RPTU5hbWVkQ29uc3RydWN0b3I6IGZvciBuYW1lZCBjb25zdHJ1
Y3RvcnMKKyAgICAgICAgLSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTogZm9yIG9i
amVjdHMgdGhhdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZGlyZWN0bHkgZnJvbSBKUy4KKworICAg
ICAgICBCaW5kaW5nIGdlbmVyYXRvciBpcyB1c2luZyB0aGVzZSAzIHRlbXBsYXRlcyBhbmQgaXMg
Z2VuZXJhdGluZyBzcGVjaWFsaXphdGlvbnMgZm9yIGNvbnN0cnVjdCwgaW5pdGlhbGl6ZVByb3Bl
cnRpZXMgYW5kIHNfaW5mby4KKyAgICAgICAgVGhlc2UgdGVtcGxhdGVzIG1heSBhbHNvIGJlIHVz
ZWQgZm9yIHByaXZhdGUgb3IgY3VzdG9tIGNvbnN0cnVjdG9ycyBhcyBleGFtcGxpZmllZCBieSBK
U0ltYWdlQ29uc3RydWN0b3IKKyAgICAgICAgYW5kIEpTUmVhZGFibGVTdHJlYW0gcmVhZGVyIGFu
ZCBjb250cm9sbGVyIHByaXZhdGUgY29uc3RydWN0b3JzLgorCisgICAgICAgIFVwZGF0ZWQgYmlu
ZGluZyBnZW5lcmF0b3IgdG8gdXNlIHRob3NlIHRlbXBsYXRlcy4KKyAgICAgICAgVXBkYXRlZCBK
U0ltYWdlQ29uc3RydWN0b3IuY3BwIHRvIHVzZSBKU0RPTU5hbWVkQ29uc3RydWN0b3IuCisgICAg
ICAgIFVwZGF0ZWQgZGVmYXVsdCB0ZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBKU0J1aWx0aW5D
b25zdHJ1Y3Rvcjo6Y3JlYXRlT2JqZWN0LgorICAgICAgICBVcGRhdGVkIGdlbmVyYXRlZCBoZWxw
ZXIgcm91dGluZXMgb2YgYmluZGluZyBnZW5lcmF0b3IgdG8gZml0IHdpdGggdGhlIHRlbXBsYXRl
cy4KKworICAgICAgICBBIGZ1cnRoZXIgcGF0Y2ggc2hvdWxkIHJlbW92ZSBET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudCBhbmQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QuIAorCisgICAg
ICAgIENvdmVyZWQgYnkgYmluZGluZyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTo6SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGU6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTQ2xhc3M+OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTUNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NQ29uc3RydWN0b3I6OkpTRE9NQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTU5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTU5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0RPTU5hbWVkQ29uc3RydWN0b3I6OkpTRE9NTmFtZWRDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTU5hbWVkQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NTmFtZWRDb25zdHJ1Y3RvcjxKU0Ns
YXNzPjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNET01OYW1lZENvbnN0
cnVjdG9yPEpTQ2xhc3M+OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
aW1hZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0ltYWdlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW1hZ2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2V0Q29uc3RydWN0b3JUZW1wbGF0ZUNsYXNz
TmFtZSk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24pOgorICAgICAg
ICAoR2VuZXJhdGVPdmVybG9hZGVkQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKEdl
bmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0
b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKEhhc0N1c3RvbVNldHRlcik6IERlbGV0ZWQuCisgICAgICAgIChIYXNDdXN0b21N
ZXRob2QpOiBEZWxldGVkLgorICAgICAgICAoTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKENvbXB1dGVGdW5jdGlvblNwZWNpYWwpOiBEZWxldGVkLgorICAgICAg
ICAoQWRkSlNCdWlsdGluSW5jbHVkZXNJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RB
Y3RpdmVET01PYmplY3Q6OkpTVGVzdEFjdGl2ZURPTU9iamVjdCk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhOb1BhcmFt
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3Vz
dG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rv
cjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNl
T2JqZWN0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6SlNUZXN0
Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q6
OmNyZWF0ZVByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0
b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdDo6Z2V0UHJvdG90eXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcik6IERlbGV0ZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENv
bnN0cnVjdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpKU1Rlc3RFdmVudENvbnN0cnVjdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmdldFBy
b3RvdHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV2ZW50VGFyZ2V0
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFeGNlcHRpb246
OkpTVGVzdEV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RHZW5l
cmF0ZUlzUmVhY2hhYmxlOjpKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlSlNPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
cjo6Y3JlYXRlUHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yOjpnZXRQcm90b3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25z
dHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3Ry
dWN0b3JOYW1lZENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpKU1Rl
c3ROYW1lZENvbnN0cnVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5h
bWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3Rvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6
OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROb2RlQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5vZGVQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5v
ZGU6OkpTVGVzdE5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Tm9kZTo6
Z2V0UHJvdG90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RO
b25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE5vbmRldGVybWluaXN0aWNQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE9iakNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0T2JqQ29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMxKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OkpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlUHJvdG90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldFByb3RvdHlw
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzOjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RP
dmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnM6
OkpTVGVzdE92ZXJyaWRlQnVpbHRpbnMpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBl
ZGVmcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpj
b25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNhdHRy
aWJ1dGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNhdHRyaWJ1dGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTYXR0cmlidXRlOjpKU2F0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTcmVhZG9ubHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNyZWFkb25seUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU3JlYWRvbmx5UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU3JlYWRvbmx5OjpKU3JlYWRvbmx5KTogRGVsZXRlZC4K
KwogMjAxNS0xMC0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dTdHJlYW1lcl0gQVNTRVJUSU9OIEZBSUxFRDogIW1fYWRvcHRpb25Jc1Jl
cXVpcmVkIGluIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VCdWZmZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuaAppbmRleCAyOWQ2ZjM1ZTlk
NTYwN2YxMTMxMDdiZTc2ZTQzZDA3ZGM2ZTMwOTEwLi44ZGVkNGJlMjIyZjJkZjg3NmM4NDYxOWY3
MGVjNzJhY2JiNGYyMTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b25zdHJ1Y3Rvci5oCkBAIC0xOSw1OCArMTksMTkzIEBACiAjaWZuZGVmIEpTRE9NQ29uc3RydWN0
b3JfaAogI2RlZmluZSBKU0RPTUNvbnN0cnVjdG9yX2gKIAorI2luY2x1ZGUgIkRPTUNvbnN0cnVj
dG9yV2l0aERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTQnVpbHRp
bkNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IHsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB0eXBl
ZGVmIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU0J1aWx0aW5Db25zdHJ1
Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTQnVp
bHRpbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNCdWlsdGluQ29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOwotICAgICAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICB9CisgICAg
c3RhdGljIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlKiBjcmVhdGUoSlNDOjpWTSYs
IEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9CisgICAgREVDTEFS
RV9JTkZPOworCitwcml2YXRlOgorICAgIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkgeyB9CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKworICAgIC8vIFVzdWFsbHkg
ZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFzcy4KKyAgICB2b2lkIGluaXRpYWxp
emVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpIHsgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gY2xhc3MgSlNET01Db25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworCisgICAgc3RhdGljIEpTRE9NQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKIAogcHJpdmF0ZToKLSAg
ICBKU0J1aWx0aW5Db25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KSA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
IHsgfQorICAgIEpTRE9NQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KSB7IH0KKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOworICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShK
U0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOworCisgICAgLy8gVXN1YWxseSBkZWZp
bmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgorICAgIHZvaWQgaW5pdGlhbGl6ZVBy
b3BlcnRpZXMoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0JikgeyB9CisgICAgLy8gTXVzdCBi
ZSBkZWZpbmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9uIGNsYXNzLgorICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7
Cit9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBjbGFzcyBKU0RPTU5hbWVkQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgeworcHVibGljOgorICAg
IHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKKworICAgIHN0YXRpYyBK
U0RPTU5hbWVkQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKKwor
ICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU0RPTU5hbWVkQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KSB7IH0KICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkNv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0
RGF0YSYpOworCisgICAgLy8gVXN1YWxseSBkZWZpbmVkIGZvciBlYWNoIHNwZWNpYWxpemF0aW9u
IGNsYXNzLgogICAgIHZvaWQgaW5pdGlhbGl6ZVByb3BlcnRpZXMoSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0JikgeyB9CisgICAgLy8gTXVzdCBiZSBkZWZpbmVkIGZvciBlYWNoIHNwZWNpYWxp
emF0aW9uIGNsYXNzLgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBjbGFzcyBKU0J1aWx0aW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdCBCYXNlOworCisgICAgc3RhdGljIEpTQnVpbHRpbkNvbnN0cnVjdG9yKiBj
cmVhdGUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKK3By
aXZhdGU6CisgICAgSlNCdWlsdGluQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkgOiBCYXNlKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KSB7IH0KKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7
CisgICAgSlNDOjpKU09iamVjdCogY3JlYXRlSlNPYmplY3QoKTsKIAorICAgIC8vIFVzdWFsbHkg
ZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFzcy4KKyAgICB2b2lkIGluaXRpYWxp
emVQcm9wZXJ0aWVzKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpIHsgfQogICAgIC8vIE11
c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCBzcGVjaWFsaXphdGlvbiBjbGFzcy4KLSAgICBKU0M6OkpT
RnVuY3Rpb24qIGNyZWF0ZUluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCYpOwotICAgIEpTQzo6SlNPYmplY3QqIGNyZWF0ZUpTT2JqZWN0KCk7CisgICAgSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGUqIGluaXRpYWxpemVFeGVjdXRhYmxlKEpTQzo6Vk0mKTsKIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IHZvaWQgSlNCdWlsdGluQ29uc3RydWN0b3I8
SlNDbGFzcz46OmZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTQ2xhc3M+KiBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU0NsYXNzPjo6Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU+KHZtLmhl
YXApKSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZShzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCk7CisgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZTxKU0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIHZvaWQgSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGU8SlNDbGFzcz46OmZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgc2V0SW5pdGlhbGl6
ZUZ1bmN0aW9uKHZtLCAqY3JlYXRlSW5pdGlhbGl6ZUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
KTsKICAgICBpbml0aWFsaXplUHJvcGVydGllcyh2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+Ojpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlKQordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTRE9NQ29uc3RydWN0
b3I8SlNDbGFzcz4qIEpTRE9NQ29uc3RydWN0b3I8SlNDbGFzcz46OmNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBKU0RPTUNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNET01Db25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTRE9NQ29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgIGNvbnN0cnVjdG9yLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogSlNE
T01Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gdm9pZCBKU0RPTUNvbnN0
cnVjdG9yPEpTQ2xhc3M+OjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIGluaXRpYWxpemVQcm9wZXJ0aWVzKHZt
LCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkNv
bnN0cnVjdFR5cGUgSlNET01Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShK
U0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBj
b25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKKyAgICByZXR1cm4gSlND
OjpDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5s
aW5lIEpTRE9NTmFtZWRDb25zdHJ1Y3RvcjxKU0NsYXNzPiogSlNET01OYW1lZENvbnN0cnVjdG9y
PEpTQ2xhc3M+OjpjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgSlNET01OYW1lZENvbnN0
cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNE
T01OYW1lZENvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNET01OYW1lZENvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICBjb25zdHJ1Y3Rvci0+ZmluaXNoQ3JlYXRpb24odm0s
IGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIEpTRE9NTmFtZWRDb25zdHJ1
Y3RvcjxKU0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIHZvaWQgSlNET01OYW1lZENv
bnN0cnVjdG9yPEpTQ2xhc3M+OjpmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxPYmplY3QpOworICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICBpbml0aWFsaXpl
UHJvcGVydGllcyh2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlND
bGFzcz4gaW5saW5lIEpTQzo6Q29uc3RydWN0VHlwZSBKU0RPTU5hbWVkQ29uc3RydWN0b3I8SlND
bGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEm
IGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBj
b25zdHJ1Y3Q7CisgICAgcmV0dXJuIEpTQzo6Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNz
PiogSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNyZWF0ZShKU0M6OlZNJiB2bSwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBKU0J1aWx0aW5Db25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTQnVpbHRpbkNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNCdWls
dGluQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOworICAgIGNvbnN0cnVjdG9y
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gY29uc3RydWN0
b3I7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVy
ZSogSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGlu
ZSB2b2lkIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+OjpmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOworICAgIHNl
dEluaXRpYWxpemVGdW5jdGlvbih2bSwgKkpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1
bmN0aW9uKHZtLCBpbml0aWFsaXplRXhlY3V0YWJsZSh2bSksICZnbG9iYWxPYmplY3QpKTsKKyAg
ICBpbml0aWFsaXplUHJvcGVydGllcyh2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU0J1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6Y29uc3RydWN0KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSkKIHsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0gSlNDOjpqc0Nhc3Q8SlNCdWlsdGlu
Q29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBj
YXN0ZWRUaGlzLT5jcmVhdGVKU09iamVjdCgpOworICAgIGF1dG8qIG9iamVjdCA9IGNhc3RlZFRo
aXMtPmNyZWF0ZUpTT2JqZWN0KCk7CiAgICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVu
dHMoKnN0YXRlLCAqb2JqZWN0LCAqY2FzdGVkVGhpcy0+aW5pdGlhbGl6ZUZ1bmN0aW9uKCkpOwog
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkNvbnN0cnVjdFR5cGUgSlNCdWlsdGluQ29uc3RydWN0b3I8
SlNDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmIGNvbnN0cnVjdERhdGEpCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlND
OjpKU09iamVjdCogSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFzcz46OmNyZWF0ZUpTT2JqZWN0
KCkKK3sKKyAgICByZXR1cm4gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNz
PihnbG9iYWxPYmplY3QoKS0+dm0oKSwgKmdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpDb25zdHJ1Y3RU
eXBlIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpTQ2xhc3M+OjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewogICAgIGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OwogICAgIHJldHVybiBKU0M6OkNv
bnN0cnVjdFR5cGVIb3N0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCmluZGV4IDIxM2I5YmIyNTYxNDg3OTdlZDY0MzgyMmI4NjU2MjAzZTIw
OThjZmQuLjBiYzMzNzU0YWExZmJjNWEzNjkzMTczNGY3ZDE1OWU0MjQ5MDQ0NmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTUw
MSw3ICs1MDEsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpldmVudChFeGVjU3RhdGUmIHN0YXRl
KSBjb25zdAogCiBKU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0YXRlKSBj
b25zdAogewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+
KHN0YXRlLnZtKCksICp0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlSW1hZ2VDb25zdHJ1Y3Rvcihz
dGF0ZS52bSgpLCAqdGhpcyk7CiB9CiAKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwCmlu
ZGV4IGM2Y2VjYWYyNzFjOTg2NmI4OGI0MTJhMDAyNDZkNGRjNGUwNDJjOGYuLjgxY2QxZTI1YWJm
MzM1NzYyODBlYmU5ODZjODgzN2M2ZmEyMDA1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcApAQCAtMjAsOCArMjAsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTSW1hZ2VDb25zdHJ1Y3Rvci5oIgogCi0jaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CkBAIC0zMCw1
NCArMzAsNDggQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNJbWFnZUNvbnN0cnVj
dG9yKTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTSW1hZ2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
SW1hZ2VDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNJbWFnZUNvbnN0cnVjdG9yKSB9OwordHlwZWRlZiBKU0RPTU5hbWVkQ29uc3RydWN0b3I8SlNI
VE1MSW1hZ2VFbGVtZW50PiBKU0ltYWdlQ29uc3RydWN0b3I7CiAKLUpTSW1hZ2VDb25zdHJ1Y3Rv
cjo6SlNJbWFnZUNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNJbWFnZUNvbnN0cnVjdG9yKTsKIAotdm9pZCBKU0ltYWdlQ29uc3RydWN0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3RlbXBsYXRlPD4gdm9pZCBKU0ltYWdlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNI
VE1MSW1hZ2VFbGVtZW50OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBOb25lKTsK
IH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW1hZ2Uo
RXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0ltYWdlQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIEpTSW1hZ2VDb25zdHJ1
Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0ltYWdlQ29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7CisgICAgSlNJbWFnZUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0
PEpTSW1hZ2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0ganNDb25zdHJ1Y3Rvci0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4
ZWMsICJJbWFnZSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxl
IikpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBjcmVhdGVSZWZlcmVuY2VF
cnJvcihzdGF0ZSwgIkltYWdlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5h
dmFpbGFibGUiKSk7CiAKICAgICAvLyBDYWxsaW5nIHRvSlMgb24gdGhlIGRvY3VtZW50IGNhdXNl
cyB0aGUgSlMgZG9jdW1lbnQgd3JhcHBlciB0byBiZQogICAgIC8vIGFkZGVkIHRvIHRoZSB3aW5k
b3cgb2JqZWN0LiBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgSlNEb2N1bWVudDo6dmlzaXQK
ICAgICAvLyB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgaW1hZ2UgZWxlbWVu
dCB0byBiZSBtYXJrZWQgaWYgbmVjZXNzYXJ5LgotICAgIHRvSlMoZXhlYywganNDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCksIGRvY3VtZW50KTsKKyAgICB0b0pTKHN0YXRlLCBqc0NvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSwgZG9jdW1lbnQpOwogICAgIGludCB3aWR0aDsKICAgICBpbnQg
aGVpZ2h0OwogICAgIGludCogb3B0aW9uYWxXaWR0aCA9IDA7CiAgICAgaW50KiBvcHRpb25hbEhl
aWdodCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDApIHsKLSAgICAgICAg
d2lkdGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChzdGF0ZS0+
YXJndW1lbnRDb3VudCgpID4gMCkgeworICAgICAgICB3aWR0aCA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b0ludDMyKHN0YXRlKTsKICAgICAgICAgb3B0aW9uYWxXaWR0aCA9ICZ3aWR0aDsKICAgICB9
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKLSAgICAgICAgaGVpZ2h0ID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA+IDEpIHsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvSW50
MzIoc3RhdGUpOwogICAgICAgICBvcHRpb25hbEhlaWdodCA9ICZoZWlnaHQ7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0
b3ItPmdsb2JhbE9iamVjdCgpLAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3Qo
dG9KUyhzdGF0ZSwganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksCiAgICAgICAgIEhUTUxJ
bWFnZUVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmRvY3VtZW50LCBvcHRpb25hbFdp
ZHRoLCBvcHRpb25hbEhlaWdodCkpKSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgSlNJbWFnZUNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVj
dERhdGEpCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU0ltYWdlQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIkltYWdlQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTSW1hZ2VDb25zdHJ1Y3RvcikgfTsKKworSlNDOjpKU1ZhbHVlIGNyZWF0ZUlt
YWdlQ29uc3RydWN0b3IoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1
Y3RJbWFnZTsKLSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CisgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTSW1hZ2VDb25zdHJ1Y3Rvcj4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZUNvbnN0cnVjdG9yLmgKaW5kZXggY2M4MTE4M2I4YWQwYzIyNjM0MDY2YzUwYTk5NDk3
NzQ0OGQxZjdiYS4uNGExZjAwZWY5MDJmNzg0YmZkOGI4ZGQ1ZjlmNWY5ODVhYTQwNWY5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmgKQEAg
LTIwLDM1ICsyMCwxNiBAQAogI2lmbmRlZiBKU0ltYWdlQ29uc3RydWN0b3JfaAogI2RlZmluZSBK
U0ltYWdlQ29uc3RydWN0b3JfaAogCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50Lmgi
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTVmFsdWU7CitjbGFzcyBWTTsKK30KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSlNJbWFnZUNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0
OwogCi0gICAgICAgIHN0YXRpYyBKU0ltYWdlQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgSlNJbWFnZUNvbnN0cnVjdG9yKiBjb25zdHJ1
Y3RvciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNJbWFnZUNvbnN0cnVjdG9y
Pih2bS5oZWFwKSkgSlNJbWFnZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgIGNvbnN0cnVjdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKLSAgICAgICAgfQotCi0gICAgICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBERUNMQVJFX0lO
Rk87Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBKU0ltYWdlQ29uc3RydWN0b3IoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgICAgICBzdGF0aWMgSlNDOjpDb25z
dHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERh
dGEmKTsKLSAgICB9OworSlNDOjpKU1ZhbHVlIGNyZWF0ZUltYWdlQ29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVh
bVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNS
ZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGVkOGE2ZjUzYjAxY2Fk
Yjg5OThlZmY0MjFkZDhhZDlmYmY4NTRkMTkuLjA0MTA5MzhkNTE1NjliZmUzNWJlMzJkMDQwN2U5
MGI3OTlhZDYzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVh
ZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTcz
LDE0ICs3MywxNCBAQCB0ZW1wbGF0ZTw+IEpTT2JqZWN0KiBKU0J1aWx0aW5SZWFkYWJsZVN0cmVh
bUNvbnRyb2xsZXJQcml2YXRlQ29uc3RydWN0b3I6OmNyZWF0ZQogICAgIHJldHVybiBKU1JlYWRh
YmxlU3RyZWFtQ29udHJvbGxlcjo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU1JlYWRhYmxlU3Ry
ZWFtQ29udHJvbGxlcj4oZ2xvYmFsT2JqZWN0KCktPnZtKCksICpnbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdCgpLCBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI6OmNyZWF0ZSgpKTsKIH0KIAot
dGVtcGxhdGU8PiBKU0Z1bmN0aW9uKiBKU0J1aWx0aW5SZWFkYWJsZVN0cmVhbVJlYWRlclByaXZh
dGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlSW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IEZ1bmN0aW9uRXhlY3V0
YWJsZSogSlNCdWlsdGluUmVhZGFibGVTdHJlYW1SZWFkZXJQcml2YXRlQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVFeGVjdXRhYmxlKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBKU0Z1bmN0aW9u
OjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzUHJpdmF0
ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVhbVJlYWRlckNvZGVHZW5lcmF0b3Iodm0pLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICByZXR1cm4gcmVhZGFibGVTdHJlYW1JbnRlcm5hbHNQcml2YXRlSW5pdGlh
bGl6ZVJlYWRhYmxlU3RyZWFtUmVhZGVyQ29kZUdlbmVyYXRvcih2bSk7CiB9CiAKLXRlbXBsYXRl
PD4gSlNGdW5jdGlvbiogSlNCdWlsdGluUmVhZGFibGVTdHJlYW1Db250cm9sbGVyUHJpdmF0ZUNv
bnN0cnVjdG9yOjpjcmVhdGVJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gRnVuY3Rpb25FeGVjdXRhYmxl
KiBKU0J1aWx0aW5SZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJQcml2YXRlQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVFeGVjdXRhYmxlKEpTQzo6Vk0mIHZtKQogewotICAgIHJldHVybiBKU0Z1bmN0aW9u
OjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzUHJpdmF0
ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb2RlR2VuZXJhdG9yKHZtKSwgJmds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzUHJpdmF0ZUlu
aXRpYWxpemVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXJDb2RlR2VuZXJhdG9yKHZtKTsKIH0KIAog
SlNWYWx1ZSBjcmVhdGVSZWFkYWJsZVN0cmVhbVJlYWRlclByaXZhdGVDb25zdHJ1Y3RvcihWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDM4NDAxZWJlMWMz
YTIyMmFkNzNkOWUzYWU1ZTYyN2Q1NjQ1Zjk5YzMuLjMwNWM0ZmE1OWM5OTlhNTJiNGU0NjNiZmRj
YWZlOTFhN2FkNmUyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xODc0LDEwICsxODc0LDYgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgICMgQWRkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uCiAgICAg
aWYgKE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKSkgewotICAgICAgICAkaW1w
bEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgifSA9IDE7Ci0gICAg
ICAgIH0KICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENvbnRl
bnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKICAgICB9CiAKQEAg
LTQ1ODQsMTQgKzQ1ODAsMTMgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24KICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9O1xuXG4iKTsKIH0KIAotc3ViIEdldFBhcmVudENvbnN0
cnVjdG9yQ2xhc3NOYW1lCitzdWIgR2V0Q29uc3RydWN0b3JUZW1wbGF0ZUNsYXNzTmFtZQogewog
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgcmV0dXJuICJE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCI7Ci0gICAgfQotICAgIHJldHVybiAiRE9NQ29u
c3RydWN0b3JPYmplY3QiOwotCisgICAgcmV0dXJuICJKU0J1aWx0aW5Db25zdHJ1Y3RvciIgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9
KTsKKyAgICByZXR1cm4gIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlIiBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSk7CisgICAg
cmV0dXJuICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZSIgdW5sZXNzIElzQ29uc3Ry
dWN0YWJsZSgkaW50ZXJmYWNlKTsKKyAgICByZXR1cm4gIkpTRE9NQ29uc3RydWN0b3IiOwogfQog
CiBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uCkBAIC00NjAyLDY1ICs0NTk3LDEz
IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24KICAgICBteSAkaW50ZXJmYWNl
TmFtZSA9IHNoaWZ0OwogCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gIiR7Y2xhc3NO
YW1lfUNvbnN0cnVjdG9yIjsKLSAgICBteSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q29u
c3RydWN0b3JDbGFzc05hbWUoJGludGVyZmFjZSk7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJjbGFzcyAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSA6IHB1YmxpYyAiIC4gJHBhcmVudENsYXNz
TmFtZSAuICIge1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAicHJpdmF0ZTpcbiIpOwot
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfShKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7XG4iKTsKLSAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTtcblxuIik7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJwdWJsaWM6XG4iKTsKLSAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgdHlwZWRlZiAiIC4gJHBhcmVudENsYXNzTmFtZSAu
ICIgQmFzZTtcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgJGNvbnN0
cnVjdG9yQ2xhc3NOYW1lKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpXG4iKTsKLSAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAge1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICAkY29uc3RydWN0b3JDbGFzc05hbWUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8JGNvbnN0cnVjdG9yQ2xhc3NOYW1lPih2bS5oZWFwKSkgJGNvbnN0cnVjdG9yQ2xhc3NO
YW1lKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTtcbiIpOwot
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHB0cjtcbiIpOwotICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOwotCi0gICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIERFQ0xBUkVfSU5GTztcbiIpOwotCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXG4i
KTsKLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAge1xuIik7Ci0gICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpO1xuIik7Ci0gICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1c
biIpOwotCi0gICAgaWYgKElzQ29uc3RydWN0YWJsZSgkaW50ZXJmYWNlKSAmJiAhJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSkgewotICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJwcm90ZWN0ZWQ6XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0KEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpT
Q2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpO1xuIik7Ci0gICAgfQotICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIn07XG5cbiIpOwotCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0pIHsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCA8PEVORCk7Ci1jbGFzcyBKUyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50IEJhc2U7Ci0KLSAgICBzdGF0aWMgSlMke2ludGVyZmFj
ZU5hbWV9TmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAg
ICAgICAgSlMke2ludGVyZmFjZU5hbWV9TmFtZWRDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29u
c3RydWN0b3I+KHZtLmhlYXApKSBKUyR7aW50ZXJmYWNlTmFtZX1OYW1lZENvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0
aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAg
fQorICAgIG15ICR0ZW1wbGF0ZUNsYXNzTmFtZSA9IEdldENvbnN0cnVjdG9yVGVtcGxhdGVDbGFz
c05hbWUoJGludGVyZmFjZSk7CiAKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9CisgICAgJGlt
cGxJbmNsdWRlc3siSlNET01Db25zdHJ1Y3Rvci5oIn0gPSAxOwogCi0gICAgREVDTEFSRV9JTkZP
OwotCi1wcml2YXRlOgotICAgIEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29uc3RydWN0b3IoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLX07Ci0KLUVORAotICAgIH0KKyAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ0eXBlZGVmICR0ZW1wbGF0ZUNsYXNzTmFtZTwkY2xhc3NOYW1lPiAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInR5cGVkZWYgSlNE
T01OYW1lZENvbnN0cnVjdG9yPCRjbGFzc05hbWU+IEpTJHtpbnRlcmZhY2VOYW1lfU5hbWVkQ29u
c3RydWN0b3I7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRD
b25zdHJ1Y3RvciJ9OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiB9CiAKIHN1YiBH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbnMKQEAgLTQ3MDAsNyArNDY0Myw3IEBAIHN1YiBH
ZW5lcmF0ZU92ZXJsb2FkZWRDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkbGVuZ3RoT2ZM
b25nZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yUGFyYW1ldGVyTGlzdCA9IExlbmd0aE9mTG9uZ2Vz
dEZ1bmN0aW9uUGFyYW1ldGVyTGlzdCgkaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnMpOwogCiAgICAg
cHVzaChAJG91dHB1dEFycmF5LCA8PEVORCk7Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
ICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3Rl
bXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NsYXNzTmFtZX1Db25zdHJ1
Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgc2l6ZV90IGFyZ3NDb3Vu
dCA9IHN0ZDo6bWluPHNpemVfdD4oJGxlbmd0aE9mTG9uZ2VzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
clBhcmFtZXRlckxpc3QsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOwogRU5ECkBAIC00NzQ2LDYg
KzQ2ODksOCBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24KICAgICBteSAkZ2Vu
ZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlm
dDsKIAorICAgIHJldHVybiBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpT
QnVpbHRpbkNvbnN0cnVjdG9yIn0pOworCiAgICAgbXkgJGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0g
JGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0
b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKIAogICAgIGlmIChJc0NvbnN0cnVjdGFi
bGUoJGludGVyZmFjZSkpIHsKQEAgLTQ3NTQsNyArNDY5OSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0
cnVjdG9yRGVmaW5pdGlvbgogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJy
b3IuaD4ifSA9IDE7CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgPDxFTkQpOwot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29u
c3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0
YXRlKQogewogICAgIGF1dG8qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX0qPihzdGF0ZS0+Y2FsbGVlKCkpOwogCkBAIC00ODE5LDI0ICs0NzY0LDE2IEBAIEVO
RAogCiBFTkQKICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICJKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgInRlbXBsYXRlPD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3QoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gY29uc3RydWN0JHtj
bGFzc05hbWV9KHN0YXRlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
fVxuXG4iKTsKLSAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJKU0J1aWx0aW5Db25zdHJ1Y3RvciJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX06OmNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotCi0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xh
c3NOYW1lfSo+KHN0YXRlLT5jYWxsZWUoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICByZXR1cm4gY3JlYXRlSlNCdWlsdGluPCR7Y2xhc3NOYW1lfT4oKnN0YXRl
LCAqY2FzdGVkVGhpcy0+aW5pdGlhbGl6ZUZ1bmN0aW9uKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7XG4iKTsKLQotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4i
KTsKLSAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpICYm
ICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8
fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CisgICAgICAgICB9IGVsc2lmICghSGFz
Q3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgJiYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1
Y3RvcikpIHsKICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ICYm
ICRmdW5jdGlvbi0+e292ZXJsb2FkZWRJbmRleH0gPiAwKSB7CiAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3Qk
e2NsYXNzTmFtZX0kZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9KEV4ZWNTdGF0ZSogc3RhdGUp
XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25z
dHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3QoRXhlY1N0
YXRlKiBzdGF0ZSlcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ7XG4iKTsKQEAgLTQ5NjEsMjMgKzQ4OTgsOSBAQCBzdWIgR2VuZXJhdGVDb25z
dHJ1Y3RvckhlbHBlck1ldGhvZHMKICAgICAgICAgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGggPSAw
OwogICAgIH0KIAotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImNvbnN0IENsYXNzSW5mbyAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6c19pbmZvID0geyBcIiR7dmlzaWJsZUludGVyZmFjZU5hbWV9
Q29uc3RydWN0b3JcIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRSgkY29u
c3RydWN0b3JDbGFzc05hbWUpIH07XG5cbiIpOwotCi0gICAgcHVzaChAJG91dHB1dEFycmF5LCAi
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OiR7Y29uc3RydWN0b3JDbGFzc05hbWV9KFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KVxuIik7Ci0gICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdClc
biIpOwotICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIn1cblxuIik7Ci0KLSAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpXG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ0ZW1wbGF0ZTw+
IHZvaWQgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdClcbiIpOwogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwogCi0gICAgaWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3Rvcikg
ewotICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0KTtcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKLSAgICB9Ci0gICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIpOwotCiAg
ICAgIyBUaGVyZSBtdXN0IGV4aXN0IGFuIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IGZvciBl
dmVyeSBub24tY2FsbGJhY2sgaW50ZXJmYWNlIGRlZmluZWQsIHJlZ2FyZGxlc3MKICAgICAjIG9m
IHdoZXRoZXIgdGhlIGludGVyZmFjZSB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgW05vSW50ZXJmYWNl
T2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUuCiAgICAgIyBodHRwczovL2hleWNhbS5naXRodWIu
aW8vd2ViaWRsLyNpbnRlcmZhY2UtcHJvdG90eXBlLW9iamVjdApAQCAtNDk4Niw3ICs0OTA5LDcg
QEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgfSBlbHNpZiAoJGlu
dGVyZmFjZS0+aXNDYWxsYmFjaykgewogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7XG4iKTsKICAgICB9IGVsc2UgewotICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgJHtjbGFzc05hbWV9OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCAke2NsYXNzTmFtZX06OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTtcbiIpOwogICAgIH0KIAogICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9u
dHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoXCIkdmlzaWJsZUludGVyZmFj
ZU5hbWVcIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7XG4iKTsKQEAgLTQ5OTksMzUgKzQ5MjIs
MzEgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sICR7Y2xhc3NOYW1l
fUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTtcbiIpOwogICAgIH0KIAotICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNCdWlsdGluQ29uc3RydWN0b3IifSkg
ewotICAgICAgICBteSAkaW5pdGlhbGl6ZUZ1bmN0aW9uTmFtZSA9IEdldEpTQnVpbHRpbkZ1bmN0
aW9uTmFtZSgke2NsYXNzTmFtZX0sICJpbml0aWFsaXplIiAuICR7aW50ZXJmYWNlTmFtZX0pOwot
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKHZt
LCAqSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sICR7aW5pdGlhbGl6
ZUZ1bmN0aW9uTmFtZX0odm0pLCAmZ2xvYmFsT2JqZWN0KSk7XG4iKTsKLSAgICB9Ci0KICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogCi0gICAgaWYgKElzQ29uc3RydWN0YWJsZSgk
aW50ZXJmYWNlKSkgewotICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSB7
Ci0gICAgICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2Vu
ZXJhdGVDb25zdHJ1Y3RvckNvbmRpdGlvbmFsU3RyaW5nKCRpbnRlcmZhY2UpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiQ29uc3RydWN0VHlwZSAke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfTo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwot
ICAgICAgICAgICAgaWYgKCRjb25kaXRpb25hbFN0cmluZykgewotICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiNpZiAkY29uZGl0aW9uYWxTdHJpbmdcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oY2VsbCk7XG4iKTsK
LSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0O1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiI2Vsc2VcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQmFzZTo6Z2V0Q29uc3RydWN0RGF0YShj
ZWxsLCBjb25zdHJ1Y3REYXRhKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiNlbmRpZlxuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBVTlVTRURfUEFSQU0oY2VsbCk7XG4iKTsKLSAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgY29uc3RydWN0RGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0O1xuIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIlxuIik7Ci0gICAgICAgIH0KKyAgICBteSAkY29uZGl0aW9uYWxT
dHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25zdHJ1Y3RvckNvbmRpdGlvbmFsU3Ry
aW5nKCRpbnRlcmZhY2UpOworICAgIGlmICgkY29uZGl0aW9uYWxTdHJpbmcpIHsKKyAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBDb25zdHJ1Y3RUeXBlICR7Y29uc3RydWN0
b3JDbGFzc05hbWV9OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiNpZiAkY29uZGl0aW9uYWxTdHJpbmdcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjb25zdHJ1Y3Q7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIjZWxzZVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4g
QmFzZTo6Z2V0Q29uc3RydWN0RGF0YShjZWxsLCBjb25zdHJ1Y3REYXRhKTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIjZW5kaWZcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ9XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKKyAgICB9
CisKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTQnVpbHRpbkNv
bnN0cnVjdG9yIn0pIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidGVtcGxhdGU8PiBG
dW5jdGlvbkV4ZWN1dGFibGUqICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojppbml0aWFsaXplRXhl
Y3V0YWJsZShWTSYgdm0pXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gIiAuIEdldEpTQnVpbHRp
bkZ1bmN0aW9uTmFtZSgkY2xhc3NOYW1lLCAiaW5pdGlhbGl6ZSIgLiAkaW50ZXJmYWNlTmFtZSkg
LiAiKHZtKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG4iKTsKKyAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKICAgICB9CisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAidGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06
OnNfaW5mbyA9IHsgXCIke3Zpc2libGVJbnRlcmZhY2VOYW1lfUNvbnN0cnVjdG9yXCIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoJGNvbnN0cnVjdG9yQ2xhc3NOYW1lKSB9
O1xuXG4iKTsKKyAKIH0KIAogc3ViIEhhc0N1c3RvbUNvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCmluZGV4IGJhOWI5MzQ3MGI0MzA0YzM4ZTQwOTgyYTQ4NmU5Zjdj
ODQyZmE4MWMuLjk5ZTEyMmQzZDc1NDFhMmY1NmEwMTllMDBkOTk0YWJjZWNkNDMyYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CkBAIC02NiwyNiArNjcsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xh
c3MgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3RDb25zdHJ1Y3Rv
cihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0QWN0aXZl
RE9NT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGws
IEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwot
ICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLSAgICB9Ci19OwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZTxKU1Rlc3RBY3RpdmVET01PYmplY3Q+IEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0
cnVjdG9yOwogCiAvKiBIYXNoIHRhYmxlICovCiAKQEAgLTEwNCwyMiArODYsMTUgQEAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEFjdGl2ZURPTU9iamVjdFRhYmxlVmFsdWVzW10g
PQogfTsKIAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RBY3RpdmVET01PYmplY3RUYWJs
ZSA9IHsgMiwgMywgdHJ1ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVz
dEFjdGl2ZURPTU9iamVjdFRhYmxlSW5kZXggfTsKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RBY3Rp
dmVET01PYmplY3RDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEFjdGl2ZURPTU9iamVjdENv
bnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RB
Y3RpdmVET01PYmplY3RDb25zdHJ1Y3RvcikgfTsKLQotSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29u
c3RydWN0b3I6OkpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3RD
b25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVjdENvbnN0cnVj
dG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0OjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoQVNDSUlMaXRlcmFsKCJUZXN0QWN0aXZlRE9NT2JqZWN0IikpKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAordGVtcGxhdGU8PiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RB
Y3RpdmVET01PYmplY3RDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNUZXN0QWN0aXZlRE9NT2JqZWN0Q29uc3RydWN0b3IpIH07CisKIC8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmNwcAppbmRleCAyODc3MDUwMjVmOTIwNzExYzI4ZWQyYWVkYjRjYzJkZTUwODQ4ODYwLi45Nzgx
NzVmNTUwYzk5MjExMTg5Y2Y1ZjQwMmRiYzQ0NjQ3N2ZmMjBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5j
cHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgogCiAjaW5j
bHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJKU0RPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJKU1Rlc3ROb2RlLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtNTksMjYgKzYwLDcgQEAgSlNUZXN0
Q2FsbGJhY2s6On5KU1Rlc3RDYWxsYmFjaygpCiAjZW5kaWYKIH0KIAotY2xhc3MgSlNUZXN0Q2Fs
bGJhY2tDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRl
OgotICAgIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0
IEJhc2U7Ci0gICAgc3RhdGljIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3IqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q2FsbGJhY2tDb25zdHJ1
Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU1Rlc3RDYWxsYmFjaz4gSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvcjsKIAog
LyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8KIApAQCAtOTIsMjMgKzc0LDE2IEBAIHN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yVGFibGVW
YWx1ZXNbXSA9CiBDT01QSUxFX0FTU0VSVCgxID09IFRlc3RDYWxsYmFjazo6Q09OU1RBTlQxLCBU
ZXN0Q2FsbGJhY2tFbnVtQ09OU1RBTlQxSXNXcm9uZ1VzZURvTm90Q2hlY2tDb25zdGFudHMpOwog
Q09NUElMRV9BU1NFUlQoMiA9PSBUZXN0Q2FsbGJhY2s6OkNPTlNUQU5UMiwgVGVzdENhbGxiYWNr
RW51bUNPTlNUQU5UMklzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKIAotY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDYWxsYmFj
a0NvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RDYWxsYmFja0NvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpK
U1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RDYWxsYmFja0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgVU5VU0VEX1BB
UkFNKGdsb2JhbE9iamVjdCk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
YW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0Q2Fs
bGJhY2siKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwog
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0Q2FsbGJhY2tDb25zdHJ1Y3RvclRh
YmxlVmFsdWVzLCAqdGhpcyk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dENhbGxiYWNrQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDYWxsYmFja0NvbnN0cnVjdG9y
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDYWxsYmFja0Nv
bnN0cnVjdG9yKSB9OworCiBKU1ZhbHVlIEpTVGVzdENhbGxiYWNrOjpnZXRDb25zdHJ1Y3RvcihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdENhbGxiYWNrQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAppbmRl
eCA3NDczMmY3NTJjZmVlOGYwMGM3ODczMmM4YWQwMjM3NzlkYTg1OTQ3Li4wOWQ2YWFiODI0ZTEx
ZDdjZTRjOWQ3MTlkN2ZmOWI5Y2RkYmQ5MmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRl
cmZhY2VPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5jcHAKQEAg
LTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0lu
dGVyZmFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKQEAgLTU3LDU3ICs1OCwyMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JX
aXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9i
amVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJm
YWNlT2JqZWN0Q29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAg
c3RhdGljIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3Ry
dWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9J
bnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEN1c3RvbUNvbnN0cnVj
dG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAg
ICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMg
SlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNv
bnN0cnVjdERhdGEmKTsKLX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0Q3VzdG9t
Q29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q+IEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9y
V2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I7CiAKLUpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVj
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxhdGU8
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSkKIHsKICAgICByZXR1cm4gY29uc3RydWN0SlNUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Qoc3RhdGUpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNU
ZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3Ry
dWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IpIH07Ci0KLUpTVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OkpTVGVz
dEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3IoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBC
YXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTVGVzdEN1c3Rv
bUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3RydWN0b3I6OmluaXRpYWxpemVQ
cm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0K
LQotdm9pZCBKU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0Q3VzdG9tQ29uc3RydWN0b3JXaXRoTm9JbnRlcmZhY2VPYmplY3Q6OmdldFBy
b3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJp
dmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RDdXN0b21Db25zdHJ1Y3Rv
cldpdGhOb0ludGVyZmFjZU9iamVjdCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RW51bSk7CiB9CiAKLUNvbnN0cnVjdFR5cGUgSlNUZXN0Q3VzdG9tQ29uc3RydWN0
b3JXaXRoTm9JbnRlcmZhY2VPYmplY3RDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGNlbGwpOwotICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0
OwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKLX0KK3RlbXBsYXRlPD4gY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0Q29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9i
amVjdENvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdENvbnN0cnVjdG9yKSB9
OwogCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0
b21OYW1lZEdldHRlci5jcHAKaW5kZXggOTBjY2JhNDljNGUxZTBkNDYwZjRlNzAwNjQ5NzNmNWI1
ZmM3ZmVmNi4uMzdjMWU1ODEyZjQxYTU1MjU1NDlmMzQwMzMxZTVmOGU3NjliNTA2OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmlu
Zy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
CkBAIC02NCwyNiArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0KLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0g
ICAgc3RhdGljIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci19OwordHlw
ZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlcj4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcjsKIAogLyogSGFzaCB0YWJs
ZSAqLwogCkBAIC05OSwyMiArODEsMTUgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyVGFibGVWYWx1ZXNbXSA9CiB9OwogCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyVGFibGUgPSB7IDEsIDEsIHRydWUsIEpT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyVGFibGVWYWx1ZXMsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
VGFibGVJbmRleCB9OwotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlckNvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
OjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoQVNDSUlMaXRlcmFsKCJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIiKSkpLCBSZWFkT25seSB8IERv
bnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcikgfTsKKwog
LyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IDlhMWZhZjljMjdjYWU5ODNhZWY3
NDUxZDFhMzUzNjE4NmJhZDI3ZjguLjFhOWZlYTdjMTE3YzcwNGZhM2JjNjYzYjRmMzUwYzIzYTg2
OTgzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTIyLDYgKzIy
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgiCiAKICNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
SlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgpAQCAtNjMsMzEgKzY0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEV2
ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVk
OgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
KEpTQzo6RXhlY1N0YXRlKik7Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwordHlwZWRl
ZiBKU0RPTUNvbnN0cnVjdG9yPEpTVGVzdEV2ZW50Q29uc3RydWN0b3I+IEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3RvcjsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRl
KQordGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAg
YXV0byoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3Ry
dWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOwogCkBAIC0xMjgsMjggKzEwNywxNCBAQCBib29sIGZp
bGxUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQoVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0JiBldmVu
dEluaXQsIEpTRGljdGlvbgogICAgIHJldHVybiB0cnVlOwogfQogCi1jb25zdCBDbGFzc0luZm8g
SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdEV2ZW50
Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9y
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0KLQotdm9pZCBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpnZXRQcm90
b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0RXZlbnRDb25zdHJ1Y3RvciIp
KSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLUNv
bnN0cnVjdFR5cGUgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAg
ICBVTlVTRURfUEFSQU0oY2VsbCk7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24g
PSBjb25zdHJ1Y3Q7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwotfQordGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJUZXN0RXZlbnRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFdmVudENvbnN0cnVjdG9yQ29uc3RydWN0b3Ip
IH07CiAKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmNwcAppbmRleCBjZWViNzRlY2NlMzVkZDljM2Y5ZTRlYTZhYzUxNmJhOGI4MzI4YWM4Li5m
MTc1ZGRiM2JiZGE0MzY5Y2EyNzk3ZjMyYzQ0YTkwNzVjMTEyMzJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpT
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgpAQCAtNzMsMjYgKzc0LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNz
IEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFdmVudFRhcmdldENvbnN0
cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RFdmVu
dFRhcmdldENvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFdmVudFRhcmdl
dENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKK3R5
cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0RXZlbnRUYXJnZXQ+
IEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgKi8KIApAQCAt
MTA4LDIyICs5MCwxNSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0RXZlbnRU
YXJnZXRUYWJsZVZhbHVlc1tdID0KIH07CiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0
RXZlbnRUYXJnZXRUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0RXZlbnRUYXJnZXRUYWJsZVZh
bHVlcywgSlNUZXN0RXZlbnRUYXJnZXRUYWJsZUluZGV4IH07Ci1jb25zdCBDbGFzc0luZm8gSlNU
ZXN0RXZlbnRUYXJnZXRDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEV2ZW50VGFyZ2V0Q29u
c3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV2
ZW50VGFyZ2V0Q29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6
OkpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KQotewotfQotCi12b2lkIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3I6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3RlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0RXZlbnRU
YXJnZXQ6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RFdmVu
dFRhcmdldCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7
CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV2ZW50VGFyZ2V0Q29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RFdmVudFRhcmdldENvbnN0cnVjdG9yIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RFdmVudFRhcmdldENvbnN0cnVjdG9y
KSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEV2ZW50VGFyZ2V0UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXhjZXB0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwCmluZGV4IDA3YzFkMDdjNTAwMjQ2OGQ4OGE2NDZhZDMzYmExMTg5
NzViNGY4NmYuLjM1ZGEwZTc1OWU0ODM5YjEyM2Y5ZTUyM2NkZDI2MTU5ZjE5MmExZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RFeGNlcHRpb24uY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNUZXN0RXhj
ZXB0aW9uLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KQEAgLTYwLDI2ICs2MSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3RF
eGNlcHRpb25Db25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wcml2
YXRlOgotICAgIEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciogY3JlYXRl
KEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0RXhjZXB0aW9u
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZP
OwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdEV4Y2VwdGlvbj4gSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3I7CiAKIC8qIEhhc2ggdGFibGUgKi8KIApAQCAtOTUsMjIgKzc3LDE1IEBAIHN0YXRpYyBj
b25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RFeGNlcHRpb25UYWJsZVZhbHVlc1tdID0KIH07CiAK
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0RXhjZXB0aW9uVGFibGUgPSB7IDEsIDEsIHRy
dWUsIEpTVGVzdEV4Y2VwdGlvblRhYmxlVmFsdWVzLCBKU1Rlc3RFeGNlcHRpb25UYWJsZUluZGV4
IH07Ci1jb25zdCBDbGFzc0luZm8gSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RFeGNlcHRpb25Db25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdEV4Y2Vw
dGlvbkNvbnN0cnVjdG9yOjpKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0RXhjZXB0aW9uQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlh
bGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQog
ewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdEV4Y2VwdGlvbjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
VGVzdEV4Y2VwdGlvbiIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEV4Y2VwdGlvbkNv
bnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEV4Y2VwdGlvbkNvbnN0cnVjdG9y
KSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEV4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdl
bmVyYXRlSXNSZWFjaGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUuY3BwCmluZGV4IGMwMTNiNWRhNjcwMGM2
MDE0MDRjY2FkNTg2YTY4YWRmOTgwODMwZTkuLjU3M2EwOTBhY2Y3YTg3MGUwYmI3MTliZmY3ZjE1
YzE5Y2UxZTYzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAK
QEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlLmgi
CiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAt
NTcsNDMgKzU4LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7CiB9OwogCi1jbGFzcyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RHZW5lcmF0
ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdEdlbmVy
YXRlSXNSZWFjaGFibGU+IEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcjsKIAot
cHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0
b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0R2VuZXJhdGVJ
c1JlYWNoYWJsZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJs
ZUNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9
Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQot
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0
cnVjdG9yKSB9OwotCi1KU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I6OkpTVGVz
dEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZUNvbnN0cnVjdG9y
Ojppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZTo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFs
T2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEdlbmVyYXRlSXNSZWFjaGFibGUiKSkpLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIlRlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3Rv
cikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RHZW5lcmF0ZUlzUmVhY2hhYmxlUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGY1YmI4ZTI1NzI5OGE4ZTg4ZjllODBl
ZTBhODI5OGQ0ZGRlYWMzYTkuLjFlODc5MmNkMDEwMTdhOTZkM2ZjMzAxYjNlNzdiMWJhMTRjMjVl
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJUZXN0
U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtMTQzLDI5ICsx
NDQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsK
IAotY2xhc3MgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQot
ICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3Qo
SlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Cit0eXBlZGVm
IEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0SW50ZXJmYWNlPiBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3RvcjsKIAogLyogSGFzaCB0YWJsZSAqLwogCkBAIC0yNjIsNyArMjQxLDcgQEAgQ09NUElMRV9B
U1NFUlQoMSA9PSBUZXN0U3VwcGxlbWVudGFsOjpTVVBQTEVNRU5UQUxDT05TVEFOVDEsIFRlc3RJ
bnRlcmZhY2VFbnVtU1UKIENPTVBJTEVfQVNTRVJUKDIgPT0gVGVzdFN1cHBsZW1lbnRhbDo6Q09O
U1RfSU1QTCwgVGVzdEludGVyZmFjZUVudW1DT05TVF9JTVBMSXNXcm9uZ1VzZURvTm90Q2hlY2tD
b25zdGFudHMpOwogI2VuZGlmCiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQordGVtcGxh
dGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQpAQCAtMjg1LDI3
ICsyNjQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3QKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBv
YmplY3QuZ2V0KCkpKSk7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcikg
fTsKLQotSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OkpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotdm9pZCBKU1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0SW50ZXJmYWNlOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxP
YmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJp
bmcoQVNDSUlMaXRlcmFsKCJUZXN0SW50ZXJmYWNlIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7
CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEp
LCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KIAotQ29uc3Ry
dWN0VHlwZSBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqIGNlbGwsIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit0ZW1wbGF0ZTw+IENvbnN0
cnVjdFR5cGUgSlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKICNpZiBFTkFCTEUoVEVTVF9J
TlRFUkZBQ0UpCi0gICAgVU5VU0VEX1BBUkFNKGNlbGwpOwogICAgIGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0OwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
ICNlbHNlCkBAIC0zMTMsNiArMjgyLDggQEAgQ29uc3RydWN0VHlwZSBKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqIGNlbGwsIENvbnN0cnUKICNlbmRp
ZgogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvcikgfTsK
KwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IDQ2OGExOWI4NzFmMGQ5ZmQ4
N2U1ZWIzOWRlYjRjNjk2YmIyYmQwNDkuLjI1NzZkODQzMDhlNjc5ZGY2NTUwNDNhYzFjODcyMDVl
ZjMzMGU3MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApA
QCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgi
CiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQnVpbHRpbnMuaCIKICNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTU4LDYwICs1OSwyMiBAQCBwcml2YXRlOgogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9i
amVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLXB1YmxpYzoKLSAgICB0
eXBlZGVmIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3Iq
IHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Q29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0K
LQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0
ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Ci0KLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQotewotICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1
Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUpTQnVpbHRpbjxKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcj4oKnN0YXRlLCAqY2FzdGVkVGhpcy0+aW5pdGlhbGl6ZUZ1
bmN0aW9uKCksICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLWNvbnN0IENsYXNz
SW5mbyBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcikg
fTsKK3R5cGVkZWYgSlNCdWlsdGluQ29uc3RydWN0b3I8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3I+IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I7CiAKLUpTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29u
c3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2
b2lkIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0KLQot
dm9pZCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3I6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RW51bSk7Ci0gICAgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKHZtLCAqSlNDOjpKU0Z1
bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIHRlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
ckluaXRpYWxpemVUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb2RlR2VuZXJhdG9yKHZtKSwgJmds
b2JhbE9iamVjdCkpOwogfQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3RE
YXRhJiBjb25zdHJ1Y3REYXRhKQordGVtcGxhdGU8PiBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OmluaXRpYWxpemVFeGVjdXRhYmxlKFZN
JiB2bSkKIHsKLSAgICBVTlVTRURfUEFSQU0oY2VsbCk7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0Owor
ICAgIHJldHVybiB0ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JJbml0aWFsaXplVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yQ29kZUdlbmVyYXRvcih2bSk7CiB9CiAKK3RlbXBsYXRlPD4gY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsg
IlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9y
KSB9OworCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNvbnN0IEhh
c2hUYWJsZVZhbHVlIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5k
ZXggZWY5NTZlMjk3YzE5NDViZGJhMDUxMzFjY2I4ODc2OTc5OWUwNDZmMy4uMWY0MGNjZGU1ZDJh
Y2NkYTUzNWExODBhNmZmNWQxMjNhZTJmZjc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU01lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtNjQs
NDMgKzY1LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
CiB9OwogCi1jbGFzcyBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+IEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1
Y3RvcjsKIAotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsK
LSAgICBzdGF0aWMgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJD
b25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZv
aWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lcjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0
ZXJhbCgiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDb25zdHJ1Y3Rv
cikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZTc0NTBi
ZmNhNDJmODVmZWNmYjU1ODYyZDM2ZDBjMzRlNGIwYjUyNy4uNjFkZTM5MjRhYjljMjQ3MTkxMGJi
YTNkYjQyNDMwODMzY2MwNTdlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cApAQCAtMjEsOSArMjEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVGVz
dE5hbWVkQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC02MCw2OSArNjAsMTkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9i
amVjdCB7Ci1wcml2YXRlOgotICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0TmFtZWRDb25z
dHJ1Y3RvckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IqIHB0ciA9IG5ldyAoTm90TnVsbCwg
SlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5h
bWVkQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgewotcHVi
bGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgQmFzZTsKLQotICAg
IHN0YXRpYyBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciogY3JlYXRlKEpT
Qzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2Vs
bDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgY29uc3RydWN0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3Qp
OwotICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotCi1wcml2YXRlOgotICAgIEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmKTsKLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSopOwotICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5
cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci19
OwotCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0
b3IpIH07Ci0KLUpTVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
LXsKLX0KK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcj4gSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0RPTU5hbWVkQ29uc3RydWN0b3I8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I7CiAKLXZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1
Y3RvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNv
bnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFT
U0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCAm
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkQ29uc3RydWN0b3IiKSkpLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0TmFtZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9OworCit0ZW1wbGF0ZTw+IEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3IqPihz
dGF0ZS0+Y2FsbGVlKCkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCkBAIC0xNDUsMjggKzk1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29u
c3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5h
bWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3ROYW1lZENvbnN0cnVj
dG9yTmFtZWRDb25zdHJ1Y3Rvcjo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0
b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpT
VGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci19Ci0KLXZvaWQg
SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvcjo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
QXVkaW8iKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwog
fQogCi1Db25zdHJ1Y3RUeXBlIEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0
RGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY2VsbCk7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0Owot
fQordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVk
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkF1ZGlvQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENvbnN0
cnVjdG9yKSB9OwogCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CmluZGV4IGYzN2NmMDgxZDQ1YzA4MDM0M2JjMWFkNGYyOTU3MzQ4MzY5NWNmMTkuLjc5Y2Q1MWI0
OTdiZjg5N2MwMTk5N2QwNWIyZTJmNjQ5MmQxMGQ3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAgLTIzLDYg
KzIzLDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVVJMLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcu
aD4KQEAgLTYzLDU5ICs2NCwyMyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3ROb2RlQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE5v
ZGVDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3ROb2RlQ29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3ROb2RlQ29uc3RydWN0b3Ioc3RydWN0
dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5G
TzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUq
KTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpK
U0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0
b3I8SlNUZXN0Tm9kZT4gSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOwogCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSog
c3RhdGUpCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0Tm9k
ZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBhdXRvKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUo
KSk7CiAgICAgUmVmUHRyPFRlc3ROb2RlPiBvYmplY3QgPSBUZXN0Tm9kZTo6Y3JlYXRlKCk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCi1jb25zdCBDbGFzc0luZm8g
SlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Tm9kZUNvbnN0cnVjdG9yIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlQ29uc3RydWN0
b3IpIH07Ci0KLUpTVGVzdE5vZGVDb25zdHJ1Y3Rvcjo6SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAg
IDogQmFzZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RO
b2RlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0KLQotdm9pZCBKU1Rlc3ROb2RlQ29uc3RydWN0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
LXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGlu
Zm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3ROb2RlOjpnZXRQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0
Tm9kZSIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9
CiAKLUNvbnN0cnVjdFR5cGUgSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCogY2VsbCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBVTlVT
RURfUEFSQU0oY2VsbCk7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3Q7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwotfQordGVtcGxhdGU8PiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0Tm9kZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0Tm9kZUNv
bnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
b2RlQ29uc3RydWN0b3IpIH07CiAKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKaW5kZXggNDg4ZWVjOTI0ZjI5MjY1ZTc4
MGYzYTBkMGJmZmMyMjQ2NjczZTZhNi4uNWMwYTU3YTdjMWUzNjdlMmUwMTFmYmZlNjU5YzI5OWI4
ZjFiOTk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMjMsNiAr
MjMsNyBAQAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5o
PgpAQCAtODAsNDMgKzgxLDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihK
U0M6OlZNJik7CiB9OwogCi1jbGFzcyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5vbmRl
dGVybWluaXN0aWM+IEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcjsKIAotcHVibGlj
OgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0
cnVjdG9yPih2bS5oZWFwKSkgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lO
Rk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5vbmRldGVy
bWluaXN0aWNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3ROb25kZXRl
cm1pbmlzdGljQ29uc3RydWN0b3I6OkpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1Y3RvcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6Z2V0UHJvdG90
eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5vbmRldGVybWluaXN0aWMiKSkp
LCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCit0ZW1w
bGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIlRlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vbmRldGVybWluaXN0aWNDb25zdHJ1
Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb25kZXRlcm1pbmlzdGljUHJvdG90eXBlVGFibGVWYWx1
ZXNbXSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCmluZGV4IGFjODY4YzM4MjQ1MTE3YmY1M2RhNGVhMTZhNzIxN2MyMDhk
YzA3MjguLjQwOTkyMzdkMWE2YjMxZGUzYjBiYjVmNzM5OWQyYmUxMGJmOWM2MTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNET01TdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgpAQCAtMzQ1LDI5ICszNDYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3Mg
SlNUZXN0T2JqQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJp
dmF0ZToKLSAgICBKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKLQotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T2JqQ29uc3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE9iakNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE9iakNvbnN0cnVjdG9yPih2bS5oZWFwKSkg
SlNUZXN0T2JqQ29uc3RydWN0b3Ioc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpOwotICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRy
OwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9
Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3I8SlNUZXN0T2JqPiBKU1Rlc3RPYmpDb25zdHJ1
Y3RvcjsKIAogLyogSGFzaCB0YWJsZSAqLwogCkBAIC00NjgsNyArNDQ3LDcgQEAgQ09NUElMRV9B
U1NFUlQoMHgxYWJjID09IFRlc3RPYmo6OkNPTlNUX1ZBTFVFXzE0LCBUZXN0T2JqRW51bUNPTlNU
X1ZBTFVFXzE0SXNXcm8KIENPTVBJTEVfQVNTRVJUKDE1ID09IFRlc3RPYmo6OkNPTlNUX0lNUEws
IFRlc3RPYmpFbnVtQ09OU1RfSU1QTElzV3JvbmdVc2VEb05vdENoZWNrQ29uc3RhbnRzKTsKIENP
TVBJTEVfQVNTRVJUKDAgPT0gVGVzdE9iajo6cmVhZG9ubHksIFRlc3RPYmpFbnVtcmVhZG9ubHlJ
c1dyb25nVXNlRG9Ob3RDaGVja0NvbnN0YW50cyk7CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQor
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdE9iakNvbnN0cnVj
dG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKICAgICBhdXRvKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE9iakNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQpAQCAtNDgzLDI5ICs0NjIs
MTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
c09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0Lmdl
dCgpKSkpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3RPYmplY3RDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0T2JqQ29uc3RydWN0b3IpIH07Ci0KLUpTVGVzdE9iakNvbnN0cnVj
dG9yOjpKU1Rlc3RPYmpDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9w
ZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0KLQot
dm9pZCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE9iajo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE9iamVjdCIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigy
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBK
U1Rlc3RPYmpDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAqdGhpcyk7CiB9CiAKLUNvbnN0cnVjdFR5
cGUgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiBjZWxsLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewotICAgIFVOVVNFRF9QQVJBTShjZWxsKTsK
LSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdDsKLSAgICByZXR1
cm4gQ29uc3RydWN0VHlwZUhvc3Q7Ci19Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3RPYmpDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE9iamVjdENvbnN0cnVjdG9yIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpDb25zdHJ1Y3Rvcikg
fTsKIAogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAppbmRleCA3MzU0Zjc0MmNiYzEyOWEyYTllNzlj
Y2Q4OTYxMzM0YTFkZjE3OTAxLi5kZDUwYmEyNmUxZWMyZDI4OTM4ZDA2YjA3MmY5NzFiNTk0Y2Ji
MzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCkBA
IC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpT
QmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgogCkBAIC02MCwyOSArNjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOwogfTsKIAotY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAg
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I+KHZt
LmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3Ioc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBnbG9iYWxP
YmplY3QpOwotICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIERFQ0xBUkVfSU5GTzsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sICZnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3QoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpKU0Nl
bGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKLX07Cit0eXBlZGVmIEpTRE9NQ29uc3RydWN0b3I8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yOwogCiBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CkBAIC0xNDIs
NyArMTIxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzNShFeGVjU3RhdGUqIHMKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBv
YmplY3QuZ2V0KCkpKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QoRXhlY1N0YXRlKiBz
dGF0ZSkKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRl
KQogewogICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIHN0YXRlLT5h
cmd1bWVudENvdW50KCkpOwogICAgIEpTVmFsdWUgYXJnMChzdGF0ZS0+YXJndW1lbnQoMCkpOwpA
QCAtMTYxLDI4ICsxNDAsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmNvbnN0cnVjdCgKICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CiB9CiAKLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcikgfTsKLQotSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQor
dGVtcGxhdGU8PiB2b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQogewotfQotCi12b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9i
amVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIikpKSwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAotQ29uc3RydWN0VHlwZSBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
SlNDZWxsKiBjZWxsLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewotICAgIFVOVVNF
RF9QQVJBTShjZWxsKTsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdDsKLSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Ci19Cit0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3RvcikgfTsKIAogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAppbmRleCBkN2VhNDc3NTllMTg2NjBlMmY0YWQy
NWU5MWYwYTZiMzcyNWIyZTEwLi4zZDk3YjEzY2FiYjA3M2QxNDFiNjRhNTk3NDczMjdmMWY4ZWU4
NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgog
I2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKQEAg
LTY2LDI2ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7CiB9OwogCi1jbGFzcyBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0K
LXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3Rh
dGljIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJyaWRlQnVpbHRp
bnNDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rv
cihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVD
TEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Cit0eXBlZGVmIEpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE92ZXJyaWRlQnVpbHRpbnM+IEpTVGVz
dE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcjsKIAogLyogSGFzaCB0YWJsZSAqLwogCkBAIC0x
MDEsMjIgKzgzLDE1IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zVGFibGVWYWx1ZXNbXSA9CiB9OwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpT
VGVzdE92ZXJyaWRlQnVpbHRpbnNUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNUZXN0T3ZlcnJpZGVC
dWlsdGluc1RhYmxlVmFsdWVzLCBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zVGFibGVJbmRleCB9Owot
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9
OwotCi1KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OkpTVGVzdE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19
Ci0KLXZvaWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0ZW1wbGF0ZTw+IHZv
aWQgSlNUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGll
cyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcnJpZGVC
dWlsdGluczo6Z2V0UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE92
ZXJyaWRlQnVpbHRpbnMiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dEVudW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBl
ICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVycmlkZUJ1aWx0aW5z
UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDRjN2ZlMGMwZjhmY2QzNDRkYzVi
NmUxMDBjMDAyZGM2YjI4YmJhNWIuLmJjNzVkMmVhNWNlZmZjZGM0ZWE3ZGI4NmFmMjliOTQ4NWM3
MjE0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCkBAIC03MSw0MyArNzIsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXByaXZh
dGU6Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3Io
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0eXBlZGVmIEpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZT4gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I7CiAKLXB1
YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGlj
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4odm0u
aGVhcCkpIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJF
X0lORk87Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCAmZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotfTsKLQotY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3IiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ29uc3RydWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQot
Ci12b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmdldFByb3Rv
dHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVt
KTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlh
bFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVu
dW0pOwogfQogCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1
Y3RvcikgfTsKKwogLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCiAKIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCmluZGV4IDgyMmE4MWYwZDEy
OGRkYjc1MzQ2MTNiMWJjMGI1NWM1MzNhZDRhMzQuLmMyM2RmZTJkYzk3OGE0YmE0MjYzMjhkMzQ1
MzY0NzIzMDA5MzFiN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcApAQCAtMjQsNiArMjQsNyBAQAog
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKICNp
bmNsdWRlICJKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgpAQCAtOTcsMjkgKzk4LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewot
cHJpdmF0ZToKLSAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwotCi1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKiBjcmVh
dGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVj
dG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3I+KHZtLmhlYXApKSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKHN0cnVjdHVy
ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87
Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAmZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0KEpTQzo6RXhlY1N0YXRlKik7
Ci0gICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlND
ZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci19OwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9y
PEpTVGVzdFR5cGVkZWZzPiBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOwogCiAvKiBIYXNoIHRh
YmxlICovCiAKQEAgLTE0Miw3ICsxMjEsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQogICAgIHsgIlRlc3RTdWJP
YmoiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvclRlc3RTdWJPYmopLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPigwKSB9IH0sCiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQor
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3I6OmNvbnN0cnVjdChFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUo
KSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKQEAgLTE1
NywyOSArMTM2LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3RhCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhc09iamVjdCh0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgb2JqZWN0LmdldCgpKSkpOwogfQogCi1jb25zdCBDbGFzc0luZm8gSlNUZXN0VHlwZWRlZnND
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFR5cGVkZWZzQ29uc3RydWN0b3IiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3Ip
IH07Ci0KLUpTVGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OkpTVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpT
VGVzdFR5cGVkZWZzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLX0KLQotdm9pZCBKU1Rlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFTU0VS
VChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0VHlwZWRlZnM6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVj
dCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhB
U0NJSUxpdGVyYWwoIlRlc3RUeXBlZGVmcyIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigyKSwgUmVh
ZE9ubHkgfCBEb250RW51bSk7CiAgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKIH0KIAotQ29uc3RydWN0VHlw
ZSBKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCogY2Vs
bCwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY2Vs
bCk7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3Q7Ci0gICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwotfQordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8g
SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3IpIH07CiAKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRy
aWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0
cmlidXRlLmNwcAppbmRleCA1MmRhNjgyN2JlZmVjMDI2Y2ZmZjg5MTkyYjZkYWQwYjE0OGQxOWU5
Li42NGFmMzE4NGFiZWI2MzlmNjRlODNjZjcyNWJlODZjMTM1MDAxYjI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5j
cHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJKU2F0dHJpYnV0ZS5oIgogCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CkBAIC02MCw0MyArNjEsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKIH07CiAKLWNsYXNzIEpTYXR0cmlidXRlQ29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJpdmF0ZToKLSAgICBKU2F0dHJpYnV0ZUNv
bnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordHlwZWRlZiBK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU2F0dHJpYnV0ZT4gSlNhdHRyaWJ1dGVD
b25zdHJ1Y3RvcjsKIAotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKLSAgICBzdGF0aWMgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQotICAgIHsKLSAgICAgICAgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvciogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yPih2bS5o
ZWFwKSkgSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0g
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJl
dHVybiBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwotICAgIH0KLX07Ci0KLWNvbnN0IENsYXNzSW5mbyBKU2F0dHJpYnV0ZUNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJhdHRyaWJ1dGVDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcikgfTsKLQotSlNhdHRyaWJ1dGVD
b25zdHJ1Y3Rvcjo6SlNhdHRyaWJ1dGVDb25zdHJ1Y3RvcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEJhc2Uoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxh
dGU8PiB2b2lkIEpTYXR0cmlidXRlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU2F0dHJpYnV0ZTo6Z2V0UHJv
dG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2
aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiYXR0cmlidXRlIikpKSwgUmVhZE9u
bHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAordGVtcGxhdGU8PiBj
b25zdCBDbGFzc0luZm8gSlNhdHRyaWJ1dGVDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiYXR0cmli
dXRlQ29uc3RydWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
YXR0cmlidXRlQ29uc3RydWN0b3IpIH07CisKIC8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAq
LwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNhdHRyaWJ1dGVQcm90b3R5cGVUYWJs
ZVZhbHVlc1tdID0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU3JlYWRvbmx5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU3JlYWRvbmx5LmNwcAppbmRleCBlM2Y5OWRhYzg2ZTEwYzEzMmMwMmExN2NlNTNj
MGQ3NjE5ODkzNDM0Li41NGZjYThjNzc5MGI3OGRiZTE2MzhhZDk2ZDljODQ1MTNhZTc1ZDY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNyZWFk
b25seS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
cmVhZG9ubHkuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiSlNyZWFkb25seS5oIgog
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTU3
LDQzICs1OCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OwogfTsKIAotY2xhc3MgSlNyZWFkb25seUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVj
dG9yT2JqZWN0IHsKLXByaXZhdGU6Ci0gICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90
Q29uc3RydWN0YWJsZTxKU3JlYWRvbmx5PiBKU3JlYWRvbmx5Q29uc3RydWN0b3I7CiAKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIEpT
cmVhZG9ubHlDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgSlNyZWFkb25seUNvbnN0cnVjdG9yKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTcmVhZG9ubHlDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpIEpTcmVhZG9ubHlDb25zdHJ1
Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAg
REVDTEFSRV9JTkZPOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotICAgIH0KLX07Ci0KLWNvbnN0IENs
YXNzSW5mbyBKU3JlYWRvbmx5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgInJlYWRvbmx5Q29uc3Ry
dWN0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTcmVhZG9ubHlD
b25zdHJ1Y3RvcikgfTsKLQotSlNyZWFkb25seUNvbnN0cnVjdG9yOjpKU3JlYWRvbmx5Q29uc3Ry
dWN0b3IoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi0gICAgOiBCYXNlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi12b2lkIEpT
cmVhZG9ubHlDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQordGVtcGxhdGU8PiB2b2lkIEpTcmVhZG9ubHlDb25zdHJ1Y3Rv
cjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICBBU1NFUlQoaW5o
ZXJpdHMoaW5mbygpKSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTcmVhZG9ubHk6OmdldFByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVy
YWwoInJlYWRvbmx5IikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRF
bnVtKTsKIH0KIAordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNyZWFkb25seUNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJyZWFkb25seUNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU3JlYWRvbmx5Q29uc3RydWN0b3IpIH07CisKIC8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNy
ZWFkb25seVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>