<?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>64466</bug_id>
          
          <creation_ts>2011-07-13 10:48:20 -0700</creation_ts>
          <short_desc>Refactor JSC to replace JSCell::operator new with static create method</short_desc>
          <delta_ts>2011-07-18 10:47:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>darin</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436517</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 10:48:20 -0700</bug_when>
    <thetext>This is the first of a series of bugs to refactor JSC and its related DOM bindings to use static create methods when creating heap-allocated JS objects.  The goal of this bug is simply to replace all instances of JSCell::operator new within JSC with the new static create methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436556</commentid>
    <comment_count>1</comment_count>
      <attachid>100695</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 11:33:57 -0700</bug_when>
    <thetext>Created attachment 100695
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436560</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 11:37:41 -0700</bug_when>
    <thetext>Attachment 100695 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackConstr...&quot; exit_code: 1

Source/JavaScriptCore/runtime/StringConstructor.h:32:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/RegExpConstructor.h:60:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/NumberConstructor.h:32:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 75 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>436562</commentid>
    <comment_count>3</comment_count>
      <attachid>100695</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-13 11:39:28 -0700</bug_when>
    <thetext>Comment on attachment 100695
Proposed patch.

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

&gt; Source/JavaScriptCore/API/JSCallbackConstructor.h:36
&gt; +        JSCallbackConstructor(JSGlobalObject*, Structure*, JSClassRef, JSObjectCallAsConstructorCallback);

Incorrect indentation here.

&gt; Source/JavaScriptCore/API/JSCallbackConstructor.h:42
&gt; +        JSCallbackConstructor* result = static_cast&lt;JSCallbackConstructor*&gt;(exec-&gt;heap()-&gt;allocate(sizeof(JSCallbackConstructor)));
&gt; +        result-&gt;m_structure.clear();
&gt; +        return new (result) JSCallbackConstructor(globalObject, structure, classRef, callback);

Before we repeat this idiom everywhere, I suggest we:

    1) Make a function that combines the allocation and the clear in a single function call.
    2) Make a function template that takes the type as an argument and does the sizeof and typecasting.

Then this function would be a one-liner:

    return new (allocateJSObject&lt;JSCallbackConstructor&gt;(exec)) JSCallbackConstructor(globalObject, structure, classRef, callback);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436584</commentid>
    <comment_count>4</comment_count>
      <attachid>100695</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-13 11:57:26 -0700</bug_when>
    <thetext>Comment on attachment 100695
Proposed patch.

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

In general this patch is correct, there are just a few overall refinements i&apos;d recommend

* You don&apos;t need to clear the structure everytime, that&apos;s only needed as a workaround for the existing sequencing issues.
* Given you don&apos;t need to clear the structure a single function along the lines of template &lt;typename T&gt; void* allocateCell&lt;T&gt;(exec/globalData/heap/whatever) can just be used for all allocations, and the create methods become 
return new (allocateCell&lt;type goes here&gt;(exec/globalData/whatever)) Constructor(...)

That should simplify the creation routines quite a bit.

If you use the webkit-patch script it will run the style checker before uploading so you can correct any style issues before submitting for review (the commit queue is meant to reject patches with style errors so theoretically wouldn&apos;t accept a patch with such errors)

&gt; Source/JavaScriptCore/ChangeLog:6
&gt; +

There needs to be a description of the change here, look for other changelog entries for examples of the level of detail that&apos;s expected.  While this is mostly a mechanical change, so doesn&apos;t require huge amounts of elaboration, we typically expect a reasonable amount of detail from new-ish contributors.

&gt; Source/JavaScriptCore/API/JSCallbackConstructor.h:41
&gt; +        result-&gt;m_structure.clear();

You don&apos;t need these calls to clear the structure -- they exist in operator new() to mitigate the problem that this patch is fixing.

&gt; Source/JavaScriptCore/API/JSCallbackObject.h:136
&gt; +    static JSCallbackObject* allocCallbackObj(ExecState* exec)
&gt; +    {
&gt; +        JSCallbackObject* result = static_cast&lt;JSCallbackObject*&gt;(exec-&gt;heap()-&gt;allocate(sizeof(JSCallbackObject)));
&gt; +        result-&gt;m_structure.clear();
&gt; +        return result;
&gt; +    }
&gt; +public:
&gt; +    static JSCallbackObject* create(ExecState* exec, JSGlobalObject* globalObject, Structure* structure, JSClassRef classRef, void* data)
&gt; +    {
&gt; +        return new (allocCallbackObj(exec)) JSCallbackObject(exec, globalObject, structure, classRef, data);
&gt; +    }
&gt; +    static JSCallbackObject* create(JSGlobalData* globalData, JSClassRef classRef, Structure* structure)
&gt; +    {
&gt; +        return new (globalData) JSCallbackObject(*globalData, classRef, structure);
&gt; +    }

i think allocCallbackObj can be private, and you should kill off the new (globalData) usage

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:585
&gt; +    JSArray* resObj = JSArray::create(exec, exec-&gt;globalData(), exec-&gt;lexicalGlobalObject()-&gt;arrayStructure(), deleteCount, CreateCompact);

The additional exec shouldn&apos;t be necessary.

&gt; Source/JavaScriptCore/runtime/BooleanObject.h:33
&gt; +        static BooleanObject* create(ExecState* exec, JSGlobalData&amp; globalData, Structure* structure)

You don&apos;t need the exec parameter -- just use globalData.heap (exec-&gt;heap() is actually doing exec-&gt;globalData().heap)

&gt; Source/JavaScriptCore/runtime/DateInstance.h:37
&gt; +        static DateInstance* allocDateInstance(ExecState* exec)

This can probably be private.

&gt; Source/JavaScriptCore/runtime/Error.cpp:172
&gt; +    : InternalFunction(&amp;exec-&gt;globalData(), globalObject, structure, exec-&gt;globalData().propertyNames-&gt;emptyIdentifier)
&gt; +    , m_message(message)

should be indented

&gt; Source/JavaScriptCore/runtime/Executable.h:327
&gt; +            ProgramExecutable* result = static_cast&lt;ProgramExecutable*&gt;(exec-&gt;heap()-&gt;allocate(sizeof(ProgramExecutable)));

The more i look at this pattern the more i wonder if we want to add a void* allocate&lt;T&gt;() { return allocate(sizeof(T)); } style function to heap.

Also these casts are unnecessary, void* is fine (as you don&apos;t need to clear the structure)

&gt; Source/JavaScriptCore/runtime/GetterSetter.h:43
&gt; +        : JSCell(exec-&gt;globalData(), exec-&gt;globalData().getterSetterStructure.get())
&gt; +        {
&gt; +        }

indentation

&gt; Source/JavaScriptCore/runtime/JSCell.h:89
&gt;      protected:
&gt;          enum VPtrStealingHackType { VPtrStealingHack };
&gt; -
&gt; +        
&gt;      private:
&gt;          explicit JSCell(VPtrStealingHackType) { }
&gt;          JSCell(JSGlobalData&amp;, Structure*);
&gt;          JSCell(JSGlobalData&amp;, Structure*, CreatingEarlyCellTag);
&gt;          virtual ~JSCell();
&gt;          static const ClassInfo s_dummyCellInfo;
&gt; -
&gt; +        
&gt; +        

Random whitespace changes == badness

&gt; Source/JavaScriptCore/runtime/JSCell.h:-168
&gt; +        WriteBarrier&lt;Structure&gt; m_structure;
&gt;  
&gt;      private:
&gt;          // Base implementation; for non-object classes implements getPropertySlot.
&gt;          virtual bool getOwnPropertySlot(ExecState*, const Identifier&amp; propertyName, PropertySlot&amp;);
&gt;          virtual bool getOwnPropertySlot(ExecState*, unsigned propertyName, PropertySlot&amp;);
&gt;          
&gt; -        WriteBarrier&lt;Structure&gt; m_structure;

This should be unnecessary once you remove the extraneous calls to clear()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436848</commentid>
    <comment_count>5</comment_count>
      <attachid>100754</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 19:00:32 -0700</bug_when>
    <thetext>Created attachment 100754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436849</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 19:03:34 -0700</bug_when>
    <thetext>Attachment 100754 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/API/JSCallbackConstr...&quot; exit_code: 1

Source/JavaScriptCore/runtime/StringConstructor.h:32:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/RegExpConstructor.h:60:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/NumberConstructor.h:32:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 87 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>436852</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 19:05:50 -0700</bug_when>
    <thetext>On a side note, I don&apos;t think that I added the additional parameters that the style bot is talking about.  Superficially it does appear that they aren&apos;t used, but I didn&apos;t want to mess with it right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436858</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 19:11:28 -0700</bug_when>
    <thetext>Never mind, upon closer scrutiny I guess I did accidentally add the parameter name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436860</commentid>
    <comment_count>9</comment_count>
      <attachid>100755</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-13 19:14:06 -0700</bug_when>
    <thetext>Created attachment 100755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436895</commentid>
    <comment_count>10</comment_count>
      <attachid>100755</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-13 19:41:52 -0700</bug_when>
    <thetext>Comment on attachment 100755
Patch

Attachment 100755 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9019859</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436913</commentid>
    <comment_count>11</comment_count>
      <attachid>100755</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-13 20:58:14 -0700</bug_when>
    <thetext>Comment on attachment 100755
Patch

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

This looks good.

There are some calls to new inside WebCore/bridge/qt/qt_runtime.cpp that need to be changed to use create instead.

review+ but you’ll need to at least fix the Qt build issue.

&gt; Source/JavaScriptCore/jsc.cpp:147
&gt; +protected:
&gt;      GlobalObject(JSGlobalData&amp;, Structure*, const Vector&lt;UString&gt;&amp; arguments);

I suggest you make these constructors private rather than protected in classes where there is no derived class. Generally speaking we would like to use private more often than protected.

&gt; Source/JavaScriptCore/jsc.cpp:152
&gt; +        return new (allocateCell&lt;GlobalObject&gt;(&amp;(globalData.heap))) GlobalObject(globalData, structure, arguments);

This has one extra set of parentheses, around globalData.heap, and I think it would read better without them. There are similar extra parentheses in other places in the patch.

&gt; Source/JavaScriptCore/API/JSCallbackObject.h:123
&gt; +    // pseudo-placement version of operator new
&gt; +    void* operator new(size_t, void* ptr) { return ptr; }

Why is this needed? What about the real placement new? Why can’t we use that?

This comment is a “what” comment, and instead we want our comments to be “why” comments. Also we normally want our comments to be sentence style with a first capital letter and a period.

&gt; Source/JavaScriptCore/runtime/JSCell.h:379
&gt; +    template &lt;typename T&gt; void* allocateCell(Heap* heap)

I think we should use a reference to a heap here instead of a pointer to a heap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437304</commentid>
    <comment_count>12</comment_count>
      <attachid>100855</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-14 13:57:03 -0700</bug_when>
    <thetext>Created attachment 100855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437313</commentid>
    <comment_count>13</comment_count>
      <attachid>100855</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 14:07:23 -0700</bug_when>
    <thetext>Comment on attachment 100855
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1738
&gt; +    JSActivation* activation = JSActivation::create(&amp;(callFrame-&gt;globalData()), callFrame, static_cast&lt;FunctionExecutable*&gt;(ownerExecutable()));

This still has extra parentheses.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:5070
&gt; +        JSValue arguments = JSValue(Arguments::create(&amp;(callFrame-&gt;globalData()), functionCallFrame));

This still has extra parentheses.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:5076
&gt; +    Arguments* arguments = Arguments::create(&amp;(functionCallFrame-&gt;globalData()), functionCallFrame);

This still has extra parentheses.

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:2065
&gt; +    JSActivation* activation = JSActivation::create(&amp;(stackFrame.callFrame-&gt;globalData()), stackFrame.callFrame, static_cast&lt;FunctionExecutable*&gt;(stackFrame.callFrame-&gt;codeBlock()-&gt;ownerExecutable()));

This still has extra parentheses.

&gt; Source/JavaScriptCore/runtime/Arguments.h:72
&gt; +        static Arguments* create(JSGlobalData* globalData, CallFrame* callFrame, NoParametersType noParams)
&gt; +        {
&gt; +            return new (allocateCell&lt;Arguments&gt;(globalData-&gt;heap)) Arguments(callFrame, noParams);
&gt; +        }

For &quot;new&quot; we need to use an extra argument because it’s a way to make a named constructor.

But for a create function, we can actually name the create function in a way that makes clear what these two different types of creation are and thus we don’t need to use the “extra argument” technique.

&gt; Source/JavaScriptCore/runtime/JSActivation.cpp:223
&gt; +    JSValue arguments = JSValue(Arguments::create(&amp;(callFrame-&gt;globalData()), callFrame));

This still has extra parentheses.

&gt; Source/JavaScriptCore/runtime/JSString.h:351
&gt; +        static JSString* create(JSGlobalData* globalData, const UString&amp; value, HasOtherOwnerType hasOtherOwnerType)
&gt; +        {
&gt; +            return new (allocateCell&lt;JSString&gt;(globalData-&gt;heap)) JSString(globalData, value, hasOtherOwnerType);
&gt; +        }
&gt; +        static JSString* create(JSGlobalData* globalData, PassRefPtr&lt;StringImpl&gt; value, HasOtherOwnerType hasOtherOwnerType)
&gt; +        {
&gt; +            return new (allocateCell&lt;JSString&gt;(globalData-&gt;heap)) JSString(globalData, value, hasOtherOwnerType);
&gt; +        }

Same comment here as above. In a create function we can use a sensible function name rather than an extra parameter as the way to implement alternate constructors.

This lets us limit the awkward “extra parameter” technique to local use inside a class, and the type used for that technique can even be private to the class.

&gt; Source/JavaScriptCore/runtime/NumberObject.h:30
&gt;          explicit NumberObject(JSGlobalData&amp;, Structure*);

It makes no sense to have “explicit” on a constructor with multiple arguments, so we really ought to remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437448</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-14 18:18:10 -0700</bug_when>
    <thetext>I thought the main reason for the additional argument to operator new was to intercept the allocation request so that we can allocate the memory for the new object on our own GC-managed heap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437449</commentid>
    <comment_count>15</comment_count>
      <attachid>100909</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-14 18:18:35 -0700</bug_when>
    <thetext>Created attachment 100909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437455</commentid>
    <comment_count>16</comment_count>
      <attachid>100909</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 18:29:13 -0700</bug_when>
    <thetext>Comment on attachment 100909
Patch

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

Sorry to drive you crazy with new comments each time. I noticed some other things I missed last time.

&gt; Source/JavaScriptCore/jsc.cpp:146
&gt; -public:
&gt;      GlobalObject(JSGlobalData&amp;, Structure*, const Vector&lt;UString&gt;&amp; arguments);

We are normally explicit about private even at the top of a class.

&gt; Source/JavaScriptCore/API/JSCallbackObject.h:123
&gt; +    // This version of operator new is necessary because we can&apos;t tell statically 
&gt; +    // that Base will inherit the correct placement version of operator new from JSCell.

The wording here is confusing. I think what you mean to say is that we would like to use the placement version of operator new in JSCell, but can’t because Base is a template argument.

&gt; Source/JavaScriptCore/API/JSContextRef.cpp:100
&gt; +    JSGlobalObject* globalObject = JSCallbackObject&lt;JSGlobalObject&gt;::create(*globalData.get(), globalObjectClass, JSCallbackObject&lt;JSGlobalObject&gt;::createStructure(*globalData, jsNull()));

I am surprised that this .get() is needed. Are you sure you needed to add it?

&gt; Source/JavaScriptCore/runtime/ArrayConstructor.h:31
&gt; -    public:
&gt;          ArrayConstructor(ExecState*, JSGlobalObject*, Structure*, ArrayPrototype*);

Same issue here, where in this project we would normally make private explicit rather than depending on the &quot;first things in a class are private&quot; feature.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.h:-30
&gt; -    public:

Here too.

&gt; Source/JavaScriptCore/runtime/BooleanConstructor.h:-31
&gt; -    public:

Again. I won’t call out the other cases.

&gt; Source/JavaScriptCore/runtime/RegExp.h:82
&gt; +        // Normally this method would be called create, but we have to avoid a potential conflict with the 
&gt; +        // normal public create method that handles caching as well.
&gt; +        static RegExp* allocateAndInit(JSGlobalData&amp;, const UString&amp;, RegExpFlags);

Given that description I would name it createWithoutCaching or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437481</commentid>
    <comment_count>17</comment_count>
      <attachid>100914</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-14 19:10:21 -0700</bug_when>
    <thetext>Created attachment 100914
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437499</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 20:20:45 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I thought the main reason for the additional argument to operator new was to intercept the allocation request so that we can allocate the memory for the new object on our own GC-managed heap?

The reason for the argument is to tell that we want it on our own heap. The clearest way to do that would be to name the function to state that we want it this way. The use of an argument instead is an alternative that’s used because it’s a constructor and we don’t have the option of renaming it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437500</commentid>
    <comment_count>19</comment_count>
      <attachid>100914</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 20:21:12 -0700</bug_when>
    <thetext>Comment on attachment 100914
Patch

Windows build is failing:


2&gt;   Creating library C:\cygwin\home\buildbot\WebKitBuild\Debug\lib\JavaScriptCore.lib and object C:\cygwin\home\buildbot\WebKitBuild\Debug\lib\JavaScriptCore.exp
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::DateInstance::DateInstance(class JSC::ExecState *,class JSC::Structure *,double)&quot; (??0DateInstance@JSC@@QAE@PAVExecState@1@PAVStructure@1@N@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::JSArray::JSArray(class JSC::JSGlobalData &amp;,class JSC::Structure *)&quot; (??0JSArray@JSC@@QAE@AAVJSGlobalData@1@PAVStructure@1@@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::JSArray::JSArray(class JSC::JSGlobalData &amp;,class JSC::Structure *,class JSC::ArgList const &amp;)&quot; (??0JSArray@JSC@@QAE@AAVJSGlobalData@1@PAVStructure@1@ABVArgList@1@@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::JSFunction::JSFunction(class JSC::ExecState *,class JSC::JSGlobalObject *,class JSC::Structure *,int,class JSC::Identifier const &amp;,__int64 (__fastcall*)(class JSC::ExecState *))&quot; (??0JSFunction@JSC@@QAE@PAVExecState@1@PAVJSGlobalObject@1@PAVStructure@1@HABVIdentifier@1@P6I_J0@Z@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::RegExpObject::RegExpObject(class JSC::JSGlobalObject *,class JSC::Structure *,class JSC::RegExp *)&quot; (??0RegExpObject@JSC@@QAE@PAVJSGlobalObject@1@PAVStructure@1@PAVRegExp@1@@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: __thiscall JSC::StringObject::StringObject(class JSC::ExecState *,class JSC::Structure *,class JSC::UString const &amp;)&quot; (??0StringObject@JSC@@QAE@PAVExecState@1@PAVStructure@1@ABVUString@1@@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: static void * __cdecl JSC::JSGlobalObject::operator new(unsigned int,class JSC::JSGlobalData *)&quot; (??2JSGlobalObject@JSC@@SAPAXIPAVJSGlobalData@1@@Z)
2&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: static class JSC::RegExp * __cdecl JSC::RegExp::create(class JSC::JSGlobalData *,class JSC::UString const &amp;,enum JSC::RegExpFlags)&quot; (?create@RegExp@JSC@@SAPAV12@PAVJSGlobalData@2@ABVUString@2@W4RegExpFlags@2@@Z)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437501</commentid>
    <comment_count>20</comment_count>
      <attachid>100914</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 20:21:44 -0700</bug_when>
    <thetext>Comment on attachment 100914
Patch

You’ll need to update the Windows export file to fix the Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437913</commentid>
    <comment_count>21</comment_count>
      <attachid>101025</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-15 12:37:16 -0700</bug_when>
    <thetext>Created attachment 101025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437915</commentid>
    <comment_count>22</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-15 12:38:38 -0700</bug_when>
    <thetext>Ignore the last patch, review is unnecessary.  There&apos;s more link errors on Windows.  I&apos;m just using the build bots to give me copy &amp; paste-able text.  The Windows try bot is rather painful to use for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437926</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-15 12:53:46 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #14)
&gt; &gt; I thought the main reason for the additional argument to operator new was to intercept the allocation request so that we can allocate the memory for the new object on our own GC-managed heap?
&gt; 
&gt; The reason for the argument is to tell that we want it on our own heap. The clearest way to do that would be to name the function to state that we want it this way. The use of an argument instead is an alternative that’s used because it’s a constructor and we don’t have the option of renaming it.

So I should rename all of the create functions to createInGCHeap (or something similar) or individually name each create function (e.g. JSString::createFromUString(...) vs. JSString::createFromRope(...))?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437942</commentid>
    <comment_count>24</comment_count>
      <attachid>101031</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-15 13:17:55 -0700</bug_when>
    <thetext>Created attachment 101031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437944</commentid>
    <comment_count>25</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-15 13:18:53 -0700</bug_when>
    <thetext>Again, ignore the patch, still testing builds until I get my Windows VM setup :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438509</commentid>
    <comment_count>26</comment_count>
      <attachid>101166</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-07-18 09:04:12 -0700</bug_when>
    <thetext>Created attachment 101166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438551</commentid>
    <comment_count>27</comment_count>
      <attachid>101166</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-18 10:29:14 -0700</bug_when>
    <thetext>Comment on attachment 101166
Patch

Rejecting attachment 101166 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 1

Last 500 characters of output:
g does not appear to be a valid reviewer according to committers.py.
ERROR: /mnt/git/webkit-commit-queue/Source/JavaScriptCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).
Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/9114381</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438568</commentid>
    <comment_count>28</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-18 10:47:18 -0700</bug_when>
    <thetext>Landing manually</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438569</commentid>
    <comment_count>29</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-18 10:47:42 -0700</bug_when>
    <thetext>Committed r91194</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100695</attachid>
            <date>2011-07-13 11:33:57 -0700</date>
            <delta_ts>2011-07-13 19:00:29 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>bug64466.patch</filename>
            <type>text/plain</type>
            <size>112671</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY4IEBA
CisyMDExLTA3LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgSlNDIHRvIHJlcGxhY2UgSlNDZWxsOjpvcGVyYXRvciBuZXcgd2l0
aCBzdGF0aWMgY3JlYXRlIG1ldGhvZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0NDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2Fs
bGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0
aW9uLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2Jq
ZWN0OjphbGxvY0NhbGxiYWNrT2JqKToKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDo6
Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgorICAg
ICAgICAoSlNDOjo6OnN0YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBBUEkvSlNDbGFz
c1JlZi5jcHA6CisgICAgICAgIChPcGFxdWVKU0NsYXNzOjpwcm90b3R5cGUpOgorICAgICAgICAq
IEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6Cisg
ICAgICAgIChKU09iamVjdE1ha2UpOgorICAgICAgICAoSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRo
Q2FsbGJhY2spOgorICAgICAgICAoSlNPYmplY3RNYWtlQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpz
Yy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJy
YXlXaXRoU2l6ZVF1aXJrKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoK
KyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxp
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50
aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0
b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFu
UHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3REYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRl
SW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjphbGxvY0RhdGVJbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0RhdGVQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RGF0ZVByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29u
c3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6Om1ha2UpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRW5hYmxlZENoZWNrKToK
KyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Qcm90b3R5cGU6OmFkZEZ1bmN0
aW9uUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0dldHRlclNldHRlci5oOgorICAgICAgICAoSlNDOjpHZXR0ZXJTZXR0ZXI6OkdldHRlclNl
dHRlcik6CisgICAgICAgIChKU0M6OkdldHRlclNldHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAgICAgIChKU0M6OkpTQVBJVmFsdWVXcmFw
cGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmFsbG9jSlNBcnJh
eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6YWxsb2NKU0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5
KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNO
b3RBbk9iamVjdDo6SlNOb3RBbk9iamVjdCk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTT05PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6ZGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEpTQzo6cHV0RGVzY3JpcHRvcik6CisgICAg
ICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
Ojp0b09iamVjdFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9i
amVjdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5j
dGlvblNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlND
OjpNYXRoT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2
ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6
TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1
Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAo
SlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJl
ck9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6
Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKToKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0UmVnRXhwKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVj
dC5oOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVDaGFpbi5oOgorICAgICAgICAoSlNDOjpT
Y29wZUNoYWluTm9kZTo6U2NvcGVDaGFpbk5vZGUpOgorICAgICAgICAoSlNDOjpTY29wZUNoYWlu
Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAg
KiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0
cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OlN0cmluZ09iamVjdDo6YWxsb2NTdHJpbmdPYmplY3QpOgorICAgICAgICAoSlND
OjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3RU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3RU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZSk6
CisKIDIwMTEtMDctMTMgIEFkZW1hciBkZSBTb3V6YSBSZWlzIEpyLiAgPGFkZW1hci5yZWlzQG9w
ZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMjIgKzE1MywyMiBAQCBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEdsb2JhbE9iamVjdCk7CiBHbG9iYWxPYmplY3Q6Okdsb2JhbE9i
amVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cykKICAgICA6IEpTR2xvYmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCks
IG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJkZWJ1ZyIpLCBmdW5j
dGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicHJpbnQiKSwgZnVuY3Rpb25Qcmlu
dCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVj
KCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAw
LCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVuY3Rpb25RdWl0KSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5j
dGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJkZWJ1ZyIp
LCBmdW5jdGlvbkRlYnVnKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInByaW50IiksIGZ1bmN0aW9uUHJpbnQpKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShn
bG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1
bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVu
Y3Rpb25HQykpOwogI2lmbmRlZiBOREVCVUcKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWxlYXNl
RXhlY3V0YWJsZU1lbW9yeSIpLCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KSk7Cisg
ICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xv
YmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2Jh
bEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkpKTsKICNlbmRpZgotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5j
dGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwg
ZnVuY3Rpb25WZXJzaW9uKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBu
ZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9u
U3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicnVuIiksIGZ1bmN0aW9u
UnVuKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4
ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKLSAg
ICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5jdGlvbkNoZWNrU3ludGF4KSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkg
SlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElk
ZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGds
b2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9i
YWxFeGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhp
cywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJydW4i
KSwgZnVuY3Rpb25SdW4pKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpT
RnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9i
YWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFs
RXhlYygpLCAiY2hlY2tTeW50YXgiKSwgZnVuY3Rpb25DaGVja1N5bnRheCkpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJyZWFkbGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdf
RkxBR1MpCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4
ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAic2V0U2FtcGxpbmdGbGFncyIpLCBmdW5jdGlv
blNldFNhbXBsaW5nRmxhZ3MpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCks
IG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5n
RmxhZ3MiKSwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXREaXJlY3RGdW5j
dGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMs
IGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAic2V0U2Ft
cGxpbmdGbGFncyIpLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiY2xl
YXJTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKSk7CiAjZW5kaWYK
IAogICAgIEpTT2JqZWN0KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiwxNiBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgeworcHJvdGVjdGVkOgorICAgICAgICBKU0NhbGxi
YWNrQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCBK
U09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2spOwogcHVibGljOgotICAgIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTQ2xhc3NSZWYsIEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayk7CisgICAgc3RhdGljIEpTQ2FsbGJhY2tD
b25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIEpTT2Jq
ZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykgCisgICAgeworICAgICAgICBK
U0NhbGxiYWNrQ29uc3RydWN0b3IqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEpTQ2FsbGJhY2tDb25zdHJ1
Y3RvcikpKTsKKyAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBy
ZXR1cm4gbmV3IChyZXN1bHQpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCB+
SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6
Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSkK
KyAgICB7CisgICAgICAgIEpTQ2FsbGJhY2tGdW5jdGlvbiogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
SlNDYWxsYmFja0Z1bmN0aW9uKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoSlNDYWxs
YmFja0Z1bmN0aW9uKSkpOworICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgY2FsbGJhY2ssIG5hbWUpOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKICAgICAKICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFz
aGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5jdGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiwyNCBAQCBzdHJ1Y3QgSlNDYWxsYmFja09i
amVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNsYXNz
IEpTQ2FsbGJhY2tPYmplY3QgOiBwdWJsaWMgQmFzZSB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAg
ICAgSlNDYWxsYmFja09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIEpTQ2xhc3NSZWYsIHZvaWQqIGRhdGEpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNHbG9i
YWxEYXRhJiwgSlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIEpTQ2FsbGJhY2tP
YmplY3QqIGFsbG9jQ2FsbGJhY2tPYmooRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAg
SlNDYWxsYmFja09iamVjdCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDYWxsYmFja09iamVjdCo+
KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEpTQ2FsbGJhY2tPYmplY3QpKSk7CisgICAg
ICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CitwdWJsaWM6CisgICAgc3RhdGljIEpTQ2FsbGJhY2tPYmplY3QqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NDYWxsYmFja09iaihleGVjKSkgSlNDYWxsYmFja09iamVjdChleGVj
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBz
dGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
SlNDbGFzc1JlZiBjbGFzc1JlZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU0NhbGxiYWNrT2JqZWN0KCpnbG9iYWxEYXRhLCBj
bGFzc1JlZiwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICB2b2lkIHNldFByaXZhdGUodm9pZCog
ZGF0YSk7CiAgICAgdm9pZCogZ2V0UHJpdmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9u
IDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAsNyBAQCBKU1ZhbHVlIEpTQ2Fs
bGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1CiAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rp
b25FbnRyeSogZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgp
KSkgewogICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sg
Y2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gbmV3IChleGVjKSBKU0Nh
bGxiYWNrRnVuY3Rpb24oZXhlYywgYXNHbG9iYWxPYmplY3QodGhpc09iai0+Z2V0QW5vbnltb3Vz
VmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlvbiwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBhc0ds
b2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKSksIGNhbGxBc0Z1bmN0aW9u
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG8sIGVudHJ5LT5hdHRyaWJ1dGVzKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBKU09iamVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBl
KEV4ZWNTCiAKICAgICBpZiAoIWpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZSkgewogICAgICAg
ICAvLyBSZWN1cnNpdmUsIGJ1dCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG91ciBwdXJwb3Nl
cwotICAgICAgICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgbmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dD4oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAmanND
bGFzc0RhdGEpLCAwKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRl
IGRhdGEsIHNvIGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCisgICAg
ICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBK
U0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSks
IDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28g
aXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICAgICAgaWYgKHBh
cmVudENsYXNzKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IHBhcmVu
dENsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgICAgICAgICAganNDbGFzc0RhdGEuY2Fj
aGVkUHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2
aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpT
R2xvYmFsQ29udGV4dENyZWF0ZQogICAgICAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWlu
KHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKSk7CiAgICAgfQogCi0gICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YS5nZXQoKSkgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4oKmdsb2JhbERhdGEsIGdsb2JhbE9iamVjdENs
YXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKCpn
bG9iYWxEYXRhLCBqc051bGwoKSkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKGdsb2JhbERhdGEuZ2V0
KCksIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gZ2xvYmFsT2JqZWN0Q2xhc3MtPnByb3RvdHlwZShleGVjKTsKICAgICBpZiAoIXByb3RvdHlw
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShyZXZp
c2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFr
ZShKU0NvbnRleHRSZWYgY3QKICAgICBpZiAoIWpzQ2xhc3MpCiAgICAgICAgIHJldHVybiB0b1Jl
Zihjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKSk7CiAKLSAgICBKU0NhbGxiYWNrT2JqZWN0PEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdD4qIG9iamVjdCA9IG5ldyAoZXhlYykgSlNDYWxsYmFja09i
amVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja09iamVjdFN0cnVj
dHVyZSgpLCBqc0NsYXNzLCBkYXRhKTsKKyAgICBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdD4qIG9iamVjdCA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xv
YmFsT2JqZWN0Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBqc0Ns
YXNzLCBkYXRhKTsKICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzQ2xhc3MtPnByb3Rv
dHlwZShleGVjKSkKICAgICAgICAgb2JqZWN0LT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm90b3R5cGUpOwogCkBAIC05NSw3ICs5NSw3IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0
TWFrZUZ1bmN0aW9uV2l0aENhbGwKIAogICAgIElkZW50aWZpZXIgbmFtZUlEID0gbmFtZSA/IG5h
bWUtPmlkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSkgOiBJZGVudGlmaWVyKGV4ZWMsICJh
bm9ueW1vdXMiKTsKICAgICAKLSAgICByZXR1cm4gdG9SZWYobmV3IChleGVjKSBKU0NhbGxiYWNr
RnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsQXNGdW5jdGlv
biwgbmFtZUlEKSk7CisgICAgcmV0dXJuIHRvUmVmKEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEFzRnVuY3Rpb24sIG5hbWVJ
RCkpOwogfQogCiBKU09iamVjdFJlZiBKU09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvbnRleHRS
ZWYgY3R4LCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxs
YmFjayBjYWxsQXNDb25zdHJ1Y3RvcikKQEAgLTEwNyw3ICsxMDcsNyBAQCBKU09iamVjdFJlZiBK
U09iamVjdE1ha2VDb25zdHJ1Y3RvcihKU0NvCiAgICAgaWYgKCFqc1Byb3RvdHlwZSkKICAgICAg
ICAganNQcm90b3R5cGUgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3Rv
dHlwZSgpOwogCi0gICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IG5ldyAo
ZXhlYykgSlNDYWxsYmFja0NvbnN0cnVjdG9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJl
KCksIGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKKyAgICBKU0NhbGxiYWNrQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yID0gSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNh
bGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUoKSwganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3Ip
OwogICAgIGNvbnN0cnVjdG9yLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBqc1Byb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOwogICAgIHJldHVybiB0b1JlZihjb25zdHJ1Y3Rvcik7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ2LDcgKzI0Niw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8K
ICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOwog
ICAgICAgICBnbG9iYWxPYmplY3QtPnJlbW92ZURpcmVjdCgqbV9nbG9iYWxEYXRhLCBmdW5jdGlv
bi0+aWRlbnQoKSk7IC8vIE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3Rp
bmcgcHJvcGVydGllcy4KIAotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIG1ha2VGdW5jdGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlQ2hhaW4pOwor
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5j
dGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlQ2hhaW4pOwogICAgICAgICBpbnQgaW5kZXggPSBh
ZGRHbG9iYWxWYXIoZnVuY3Rpb24tPmlkZW50KCksIGZhbHNlKTsKICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKm1fZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMjgsNyArMzEyOCw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEpTT2JqZWN0Kiwgb3BfbmV3X3IKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBSZWdFeHBPYmpl
Y3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJl
Z0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKHN0YWNrRnJhbWUuZ2xvYmFs
RGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9i
aXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSAr
NzksMTEgQEAgc3RhdGljIGlubGluZSBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaQogICAgICAg
ICB1aW50MzJfdCBuID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgaWYgKG4g
IT0gYXJncy5hdCgwKS50b051bWJlcihleGVjKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5IHNpemUgaXMgbm90IGEgc21h
bGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgICAgICByZXR1cm4gbmV3IChleGVj
KSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCBuLCBDcmVhdGVJbml0aWFsaXplZCk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVh
dGUoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
KCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKICAgICB9CiAKICAgICAvLyBvdGhlcndpc2UgdGhl
IGFycmF5IGlzIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBpbiBpdAotICAgIHJldHVy
biBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlKCksIGFyZ3MpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYywg
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGFyZ3Mp
OwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
QXJyYXlQcm90b3R5cGU7CiAKICAgICBjbGFzcyBBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIElu
dGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEFy
cmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBB
cnJheVByb3RvdHlwZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBB
cnJheUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJyYXlQcm90b3R5cGUqIGFyclBy
b3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQXJyYXlDb25zdHJ1Y3RvciogcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8QXJyYXlDb25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUo
c2l6ZW9mKEFycmF5Q29uc3RydWN0b3IpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0
dXJlLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEFycmF5Q29uc3Ry
dWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGFyclByb3RvdHlwZSk7CisgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
cmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBkZWxldGVDb3VudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWxldGVEb3VibGUpOwogICAgIH0KIAotICAgIEpTQXJy
YXkqIHJlc09iaiA9IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgZGVsZXRlQ291bnQsIENy
ZWF0ZUNvbXBhY3QpOworICAgIEpTQXJyYXkqIHJlc09iaiA9IEpTQXJyYXk6OmNyZWF0ZShleGVj
LCBleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlT
dHJ1Y3R1cmUoKSwgZGVsZXRlQ291bnQsIENyZWF0ZUNvbXBhY3QpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gcmVzT2JqOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGVsZXRlQ291bnQ7IGsrKykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
aAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNyBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKU0FycmF5IHsKLSAg
ICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBBcnJheVByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBBcnJheVByb3RvdHlwZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8QXJyYXlQcm90b3R5
cGUqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihBcnJheVByb3RvdHlwZSkpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKHJlc3VsdCkgQXJyYXlQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBCb29sZWFuQ29uc3RydWN0b3I6
OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiAvLyBFQ01BIDE1LjYuMgogSlNPYmplY3QqIGNvbnN0cnVj
dEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEJv
b2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxE
YXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJv
b2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3Ry
dWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCks
IGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkpOwogICAgIHJldHVybiBvYmo7
CiB9CkBAIC03MSw3ICs3MSw3IEBAIENhbGxUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Z2V0Q2Fs
bERhdGEKIAogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgaW1t
ZWRpYXRlQm9vbGVhblZhbHVlKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhl
YykgQm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+Ym9vbGVh
bk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2Jq
ZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmJvb2xl
YW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmds
b2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKICAgICByZXR1cm4gb2JqOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGU7CiAKICAgICBjbGFz
cyBCb29sZWFuQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVi
bGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlwZSopOworICAg
ICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3RydWN0b3IqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IqIHJlc3VsdCA9IHN0YXRpY19jYXN0
PEJvb2xlYW5Db25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEJvb2xl
YW5Db25zdHJ1Y3RvcikpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIo
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgQm9vbGVhbkNvbnN0cnVjdG9yKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBib29sUHJvdG90eXBlKTsKKyAgICAgICAgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoQ29uc3RydWN0RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkg
KzI2LDE3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBw
dWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAg
ICAgICBleHBsaWNpdCBCb29sZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQm9vbGVhbk9iamVjdCogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8Qm9vbGVhbk9iamVjdCo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEJvb2xl
YW5PYmplY3QpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEJvb2xlYW5PYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90
eXBlLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNyBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCb29sZWFuUHJvdG90eXBlIDogcHVibGljIEJvb2xl
YW5PYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEJvb2xlYW5Q
cm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEJvb2xlYW5Qcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlKiByZXN1bHQgPSBz
dGF0aWNfY2FzdDxCb29sZWFuUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXpl
b2YoQm9vbGVhblByb3RvdHlwZSkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgQm9vbGVhblByb3RvdHlw
ZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Miw3ICsxNDIsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhl
YywgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAgICByZXR1cm4gRGF0
ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZh
bHVlKTsKIH0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFdpdGhEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIERhdGVQcm90b3R5cGU7CiAKICAgICBjbGFzcyBEYXRlQ29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAg
RGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
RGF0ZVByb3RvdHlwZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBE
YXRlQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBkYXRlUHJv
dG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBEYXRlQ29uc3RydWN0b3IqIHJlc3VsdCA9
IHN0YXRpY19jYXN0PERhdGVDb25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6
ZW9mKERhdGVDb25zdHJ1Y3RvcikpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgRGF0ZUNvbnN0cnVjdG9y
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBkYXRlUHJvdG90eXBlKTsKKyAgICAgICAg
fQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gOTA5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDI3IEBAIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0
IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBEYXRlSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgZG91YmxlKTsKICAgICAgICAgZXhwbGljaXQgRGF0ZUluc3Rh
bmNlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotCisgICAgICAgIAorICAgICAgICBzdGF0aWMg
RGF0ZUluc3RhbmNlKiBhbGxvY0RhdGVJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIERhdGVJbnN0YW5jZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RGF0ZUlu
c3RhbmNlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoRGF0ZUluc3RhbmNlKSkpOwor
ICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBEYXRlSW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBkb3VibGUgZGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NEYXRlSW5zdGFuY2UoZXhlYykpIERhdGVJbnN0YW5jZShleGVjLCBzdHJ1Y3R1cmUsIGRh
dGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBEYXRlSW5zdGFuY2UqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY0RhdGVJbnN0YW5jZShleGVjKSkgRGF0ZUluc3RhbmNlKGV4ZWMs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGRvdWJsZSBpbnRlcm5h
bE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsVmFsdWUoKS51bmNoZWNrZWRHZXROdW1i
ZXIoKTsgfQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZVBy
b3RvdHlwZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBEYXRlUHJvdG90eXBl
KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxEYXRlUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxv
Y2F0ZShzaXplb2YoRGF0ZVByb3RvdHlwZSkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgRGF0ZVByb3Rv
dHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShy
ZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDExICsxNjYsMTggQEAgSlNPYmplY3QqIHRocm93U3lu
dGF4RXJyb3IoRXhlY1N0YXRlKiBleAogfQogCiBjbGFzcyBTdHJpY3RNb2RlVHlwZUVycm9yRnVu
Y3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAg
ICAgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcm
IG1lc3NhZ2UpCi0gICAgICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcikKLSAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKKyAgICA6
IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIp
CisgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKKyAgICB7CisgICAgfQorcHVibGljOgorICAgIHN0
YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBVU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKKyAgICAgICAgSlNBcnJheSogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEpTQXJyYXkp
KSk7CisgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAocmVzdWx0KSBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCkBAIC0yMDUsNyArMjEyLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJp
Y3RNb2RlVHlwZQogCiBKU1ZhbHVlIGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw5ICsyOSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFcnJvclByb3RvdHlw
ZTsKIAogICAgIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgRXJyb3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEVycm9yUHJvdG90eXBl
Kik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVyclByb3RvdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRXJyb3JDb25zdHJ1Y3RvciogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RXJyb3JD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEVycm9yQ29uc3RydWN0
b3IpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIGVyclByb3RvdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENh
bGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3Rh
bmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTEg
QEAgRXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKEpTRwogCiBFcnJvckluc3Rh
bmNlKiBFcnJvckluc3RhbmNlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlKQogeworICAgIEVycm9ySW5zdGFuY2UqIHJlc3VsdCA9
IHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVv
ZihFcnJvckluc3RhbmNlKSkpOworICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAg
ICBpZiAobWVzc2FnZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBF
cnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUs
IG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEVy
cm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKKyAgICByZXR1cm4g
bmV3IChyZXN1bHQpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
LCBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRXJyb3JQcm90b3R5cGUg
OiBwdWJsaWMgRXJyb3JJbnN0YW5jZSB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAg
ICAgICAgRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEVycm9yUHJvdG90eXBlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgRXJyb3JQcm90b3R5cGUqIHJl
c3VsdCA9IHN0YXRpY19jYXN0PEVycm9yUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0
ZShzaXplb2YoRXJyb3JQcm90b3R5cGUpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0
dXJlLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEVycm9yUHJvdG90
eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9ldmFsQ29kZUJsb2NrOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIHsg
cmV0dXJuIG5ldyAoZXhlYykgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0
Q29udGV4dCk7IH0KKyAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRl
eHQpIAorICAgICAgICB7CisgICAgICAgICAgICBFdmFsRXhlY3V0YWJsZSogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihF
dmFsRXhlY3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIo
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgRXZhbEV4ZWN1dGFibGUoZXhlYywg
c291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7IAorICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklU
KQogICAgICAgICBKSVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlKCkKQEAgLTMxOSw3ICszMjQsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQcm9ncmFtRXhl
Y3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNl
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBQcm9ncmFtRXhlY3V0
YWJsZShleGVjLCBzb3VyY2UpOworICAgICAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHJlc3Vs
dCA9IHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0
ZShzaXplb2YoUHJvZ3JhbUV4ZWN1dGFibGUpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIFByb2dyYW1F
eGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICB+UHJvZ3JhbUV4
ZWN1dGFibGUoKTsKQEAgLTM3Miw3ICszNzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywg
Ym9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBGdW5jdGlvbkV4ZWN1dGFibGUo
ZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5T
dHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Yy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoRnVuY3Rpb25FeGVjdXRhYmxlKSkpOworICAgICAg
ICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIG5l
dyAocmVzdWx0KSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVz
ZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxh
c3RMaW5lKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUq
IGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0
aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lKQpAQCAtMzgyLDcgKzM5MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNGdW5jdGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAgICAgICAgIHJldHVy
biBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3IgY29uc3RydWN0IGJ5
dGVjb2RlLiBUaGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBKU09iamVjdCogY29u
c3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBuZXcgKGV4ZWMpIFNjb3BlQ2hhaW5Ob2RlKDAsIGdsb2JhbE9iamVjdCwgJmdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4pOworICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZShleGVjLCAwLCBn
bG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmdsb2JhbFRoaXNW
YWx1ZSgpKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLCBz
Y29wZUNoYWluKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9y
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CiAKICAg
ICBjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewot
ICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEZ1bmN0aW9uQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBGdW5jdGlvblByb3RvdHlw
ZSopOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQ29uc3RydWN0b3IqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgRnVuY3Rpb25Db25zdHJ1Y3RvciogcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8RnVuY3Rpb25Db25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEZ1
bmN0aW9uQ29uc3RydWN0b3IpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEZ1bmN0aW9uQ29uc3RydWN0
b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGZ1bmNQcm90b3R5cGUpOworICAgICAg
ICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5j
dGlvblByb3RvdHlwZShFeGUKIAogdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Q
cm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwg
SlNGdW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5n
LCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwotICAgICphcHBseUZ1bmN0
aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25T
dHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1
bmNBcHBseSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3Ry
aW5nKSwgRG9udEVudW0pOworICAgICphcHBseUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CiAgICAgcHV0RGlyZWN0RnVu
Y3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBwbHlGdW5jdGlvbiwgRG9udEVudW0pOwot
ICAgICpjYWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1
bmN0aW9uUHJvdG9GdW5jQ2FsbCk7CisgICAgKmNhbGxGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsKICAgICBwdXREaXJlY3RG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rpb24sIERvbnRFbnVtKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwx
OSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZSA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAg
ICAgICBGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOwotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24q
KiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgeworICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUqIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PEZ1bmN0aW9uUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2Yo
RnVuY3Rpb25Qcm90b3R5cGUpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIEZ1bmN0aW9uUHJvdG90eXBl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0
aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CisgICAgICAgIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxMCArMzYsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gZm9yIGEgcHJvcGVy
dHkuCiAgICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVQ7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgR2V0
dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgICAgIDogSlNDZWxsKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQo
KSkKKyAgICAgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRh
KCkuZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBHZXR0ZXJTZXR0ZXIqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEdldHRlclNldHRlciogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8R2V0dGVyU2V0dGVyKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoR2V0
dGVyU2V0dGVyKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVl
V3JhcHBlci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDEzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FQSVZhbHVl
V3JhcHBlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisgICAgICAg
IHsKKyAgICAgICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxK
U0FQSVZhbHVlV3JhcHBlcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKEpTQVBJVmFs
dWVXcmFwcGVyKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBKU0FQSVZhbHVlV3JhcHBlcihleGVjLCB2
YWx1ZSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTQVBJVmFsdWVXcmFw
cGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTU2LDcgKzYzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FQSVZhbHVlV3JhcHBlcihleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0FQ
SVZhbHVlV3JhcHBlcjo6Y3JlYXRlKGV4ZWMsIHZhbHVlKTsKICAgICB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2
aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwzNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQg
Y2xhc3MgV2Fsa2VyOwogCi0gICAgcHVibGljOgotICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGlu
Z0hhY2tUeXBlKTsKLQorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNBcnJheShK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7
CiAgICAgICAgIEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgQXJnTGlz
dCYgaW5pdGlhbFZhbHVlcyk7CisgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBhbGxv
Y0pTQXJyYXkoRXhlY1N0YXRlKiBleGVjKSAKKyAgICAgICAgeworICAgICAgICAgICAgSlNBcnJh
eSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUo
c2l6ZW9mKEpTQXJyYXkpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRyU3RlYWxpbmdIYWNrVHlwZSk7CiAgICAgICAg
IHZpcnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NKU0FycmF5KGV4
ZWMpKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFs
TGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSBjcmVhdGVNb2RlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY0pTQXJyYXkoZXhlYykpIEpTQXJyYXkoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoLCBjcmVhdGVNb2RlKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3Qm
IGluaXRpYWxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
SlNBcnJheShleGVjKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxWYWx1
ZXMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkBAIC0xMjIsNyArMTQ1LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciYpOwogICAgICAgICB2b2lkIGNvcHlUb1JlZ2lzdGVycyhFeGVjU3Rh
dGUqLCBSZWdpc3RlciosIHVpbnQzMl90KTsKKyAgICAgICAgCiAKKyAgICAgICAgCiAgICAgICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTA5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
NzgsMTQgKzc4LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBlbnVtIFZQdHJTdGVhbGluZ0hhY2tUeXBlIHsgVlB0clN0ZWFsaW5nSGFjayB9OwotCisgICAg
ICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGV4cGxpY2l0IEpTQ2VsbChWUHRyU3RlYWxpbmdI
YWNrVHlwZSkgeyB9CiAgICAgICAgIEpTQ2VsbChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsK
ICAgICAgICAgSlNDZWxsKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIENyZWF0aW5nRWFybHlD
ZWxsVGFnKTsKICAgICAgICAgdmlydHVhbCB+SlNDZWxsKCk7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19kdW1teUNlbGxJbmZvOwotCisgICAgICAgIAorICAgICAgICAKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZUR1bW15U3RydWN0dXJlKEpT
R2xvYmFsRGF0YSYpOwogCkBAIC0xNTksMTMgKzE2MCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgQW5v
bnltb3VzU2xvdENvdW50ID0gMDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9z
dHJ1Y3R1cmU7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBCYXNlIGltcGxlbWVudGF0aW9u
OyBmb3Igbm9uLW9iamVjdCBjbGFzc2VzIGltcGxlbWVudHMgZ2V0UHJvcGVydHlTbG90LgogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgCi0gICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fc3RydWN0dXJlOwogICAgIH07CiAKICAgICBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkwOTMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxMCArNDgsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRl
ZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAgIHB1YmxpYzoKKyAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24p
OwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUV4ZWN1dGFibGUqKTsK
ICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBTY29w
ZUNoYWluTm9kZSopOworICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogYWxsb2NKU0Z1bmN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgSlNGdW5jdGlvbiogcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6
ZW9mKEpTRnVuY3Rpb24pKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBp
bnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgTmF0aXZlRnVuY3Rpb24gbmF0aXZl
RnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NKU0Z1bmN0aW9u
KGV4ZWMpKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgs
IGlkZW50LCBuYXRpdmVGdW5jKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5jdGlv
biogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY0pTRnVuY3Rpb24oZXhlYykpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQsIG5hdGl2ZUV4ZWMpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NKU0Z1bmN0aW9uKGV4ZWMpKSBK
U0Z1bmN0aW9uKGV4ZWMsIGZ1bmNFeGVjLCBzY29wZUNoYWluKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgdmlydHVhbCB+SlNGdW5jdGlvbigpOwogCiAgICAgICAgIGNvbnN0IFVTdHJp
bmcmIG5hbWUoRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRo
aXMKICAgICBzdHJ1Y3R1cmUoKS0+ZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpOwog
CiAgICAgbV9nbG9iYWxEYXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwotICAg
IG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbmV3IChtX2dsb2Jh
bERhdGEuZ2V0KCkpIFNjb3BlQ2hhaW5Ob2RlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwg
dGhpcywgdGhpc1ZhbHVlKSk7CisgICAgbV9nbG9iYWxTY29wZUNoYWluLnNldCgqbV9nbG9iYWxE
YXRhLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5n
ZXQoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CiAKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhl
YygpLT5pbml0KDAsIDAsIG1fZ2xvYmFsU2NvcGVDaGFpbi5nZXQoKSwgQ2FsbEZyYW1lOjpub0Nh
bGxlcigpLCAwLCAwKTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0KEpTVmFsdWUgcHJvdG8KIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU0dsb2JhbE9i
amVjdDo6Z2xvYmFsRXhlYygpOwogCi0gICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMsIHRo
aXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2Jq
ZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCisgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2Jq
ZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCiAgICAgbV9mdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9pbnRlcm5h
bEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSAwOwpAQCAt
MTk1LDcgKzE5NSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8K
ICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhp
cywgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgJmNhbGxGdW5jdGlvbiwgJmFwcGx5RnVuY3Rp
b24pOwogICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNh
bGxGdW5jdGlvbik7CiAgICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIGFwcGx5RnVuY3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIHRoaXMs
IE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNO
dWxsKCkpKSk7CisgICAgbV9vYmplY3RQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsKICAgICBt
X2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAg
ICBtX2VtcHR5T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLT5pbmhlcml0b3JJRChleGVjLT5nbG9iYWxEYXRhKCkpKTsKQEAgLTIw
Niw1NCArMjA2LDU0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8K
ICAgICBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fY2FsbGJhY2tPYmpl
Y3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9hcnJheVByb3RvdHlw
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEFycmF5UHJvdG90eXBl
KHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2FycmF5UHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0Fy
cmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNB
cnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJheVByb3RvdHlw
ZS5nZXQoKSkpOwogCi0gICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbmV3IChleGVjKSBTdHJpbmdQcm90b3R5cGUoZXhlYywgdGhpcywgU3RyaW5nUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOwogICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fYm9vbGVhblByb3Rv
dHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEJvb2xlYW5Qcm90
b3R5cGUoZXhlYywgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFu
UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2Jvb2xl
YW5PYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQm9vbGVhbk9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9ib29sZWFuUHJvdG90
eXBlLmdldCgpKSk7CiAKLSAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE51bWJlclByb3RvdHlwZShleGVjLCB0aGlzLCBOdW1iZXJQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSkpOworICAgIG1fbnVtYmVyUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgTnVtYmVyT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX251bWJlclByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9kYXRlUHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRGF0ZVByb3RvdHlw
ZShleGVjLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVQcm90b3R5cGUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fZGF0ZVN0cnVjdHVyZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgUmVnRXhwKiBl
bXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5vRmxh
Z3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIHRoaXMsIFJlZ0V4cFByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CisgICAgbV9yZWdFeHBQcm90b3R5cGUuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
UmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKICAgICBtX3JlZ0V4cFN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CiAKICAg
ICBtX21ldGhvZENhbGxEdW1teS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjKSk7CiAKLSAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5
cGUgPSBuZXcgKGV4ZWMpIEVycm9yUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpOworICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IEVycm9yUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9lcnJv
clN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckluc3RhbmNlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJvclByb3RvdHlwZSkpOwogCiAg
ICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gbmV3
IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIGZ1bmN0aW9uQ29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgdGhpcywgRnVu
Y3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwotICAg
IEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3Rvcihl
eGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheVByb3RvdHlwZS5nZXQo
KSk7Ci0gICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5nQ29u
c3RydWN0b3IoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3N0cmluZ1By
b3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBCb29sZWFuQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogbnVtYmVyQ29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIE51bWJlckNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCog
ZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgdGhpcywg
RGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0Nl
bGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0
aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsK
KyAgICBKU0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBGdW5jdGlvbkNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IFN0
cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBib29sZWFuQ29uc3Ry
dWN0b3IgPSBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFuQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCog
bnVtYmVyQ29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOworICAg
IEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywg
dGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsKIAot
ICAgIG1fcmVnRXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3
IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9yZWdFeHBDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5cGUu
Z2V0KCkpKTsKIAotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBuZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgRXJyb3JDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIGVycm9yUHJvdG90eXBlKSk7CisgICAgbV9lcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShl
eGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJyb3JQcm90b3R5cGUpKTsKIAog
ICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJv
clByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90
b3R5cGUpOwogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKTsKLSAgICBtX2V2YWxFcnJvckNvbnN0cnVjdG9yLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcihl
eGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1
Y3R1cmUsICJFdmFsRXJyb3IiKSk7Ci0gICAgbV9yYW5nZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0
cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90
b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIpKTsKLSAgICBtX3N5bnRheEVycm9yQ29u
c3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVF
cnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIikpOwotICAgIG1fdHlwZUVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIpKTsKLSAgICBtX1VSSUVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOworICAgIG1fZXZhbEVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVF
cnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIpKTsKKyAgICBtX3JhbmdlRXJyb3JD
b25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVy
cm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIpKTsKKyAgICBtX3JlZmVyZW5jZUVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJlZmVyZW5jZUVycm9yIikpOworICAgIG1fc3lu
dGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUs
IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiU3ludGF4RXJyb3IiKSk7CisgICAgbV90
eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUs
IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVHlwZUVycm9yIikpOworICAgIG1fVVJJ
RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5h
dGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVVJJRXJyb3IiKSk7CiAKICAgICBtX29iamVj
dFByb3RvdHlwZS0+cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgb2JqZWN0Q29uc3Ry
dWN0b3IsIERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CkBAIC0y
ODEsMTUgKzI4MSwxNSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3Rv
CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJvciIpLCBtX3R5cGVFcnJvckNvbnN0cnVjdG9y
LmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1fVVJJ
RXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rpb24u
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMs
IHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOworICAgIG1fZXZhbEZ1bmN0aW9uLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBtX2Z1bmN0
aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFs
RnVuY0V2YWwpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMs
IG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRp
ZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywgdGhpcywgTWF0
aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKKyAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4iKSwganNOYU4oKSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5maW5pdHkiKSwganNOdW1iZXIoc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAidW5k
ZWZpbmVkIiksIGpzVW5kZWZpbmVkKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkpTT04iKSwg
bmV3IChleGVjKSBKU09OT2JqZWN0KHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSkKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywg
IkpTT04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSkKICAgICB9OwogICAgIGFkZFN0YXRpY0dsb2JhbHMoc3Rh
dGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNyArMzc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3
IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLCBleGVjLT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAg
IAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhl
YykKQEAgLTM4OCw3ICszODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0Fy
cmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgsIENyZWF0ZUluaXRpYWxpemVkKTsKKyAg
ICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLCBleGVjLT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlh
bGl6ZWQpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKQEAgLTQwMCw3ICs0MDAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IHZhbHVlczsKICAgICAgICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJdGVtVmFsdWUpOwotICAgICAg
ICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZSgpLCB2YWx1ZXMpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2luZ2xlSXRlbVZhbHVlKQpAQCAtNDEwLDcg
KzQxMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVj
dEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNB
cnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
dmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLCBleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKICAgICB9
CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiB2YWx1ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGluIGNlcnRhaW4gU3F1aXJyZWxGaXNo
IGJ5dGVjb2RlcyAtLSBlZmZlY3RpdmVseSBpdCBqdXN0IHNpbGVudGx5IGNvbnN1bWVzCiAgICAg
Ly8gYW55IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSByZXN1bHQgb2YgYSBmYWlsZWQgdG9P
YmplY3QgY2FsbC4KICAgICBjbGFzcyBKU05vdEFuT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEpTTm90QW5PYmpl
Y3QoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdl
dCgpKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
LT5nbG9iYWxEYXRhKCkubm90QW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU05vdEFuT2Jq
ZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB7CisgICAgICAgICAgICBKU05v
dEFuT2JqZWN0KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU05vdEFuT2JqZWN0Kj4oZXhlYy0+aGVh
cCgpLT5hbGxvY2F0ZShzaXplb2YoSlNOb3RBbk9iamVjdCkpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkg
SlNOb3RBbk9iamVjdChleGVjKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJv
dG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
aAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDE3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAgICAgY2xhc3MgSlNPTk9iamVjdCA6IHB1Ymxp
YyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIEpTT05PYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTT05PYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICB7CisgICAgICAgICAgICBKU09OT2JqZWN0KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxK
U09OT2JqZWN0Kj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoSlNPTk9iamVjdCkpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKHJlc3VsdCkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Ns
b3RDb3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHZv
aWQgSlNPYmplY3Q6OmRlZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVy
U2V0dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0
dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJv
cGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3Qp
OwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRk
IGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIEpTT2JqZWN0Ojpk
ZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Q7Ci0gICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNl
dHRlcihleGVjKTsKKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRl
cjo6Y3JlYXRlKGV4ZWMpOwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBTZXR0ZXIsIHRydWUs
IHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYg
d2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgYm9v
bCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNH
ZW5lcmljRGVzY3JpcHRvcigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAmJiBvbGREZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgICAgIEdl
dHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAg
ICAgICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgYXR0
cmlidXRlcyB8PSBHZXR0ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihl
eGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTA5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTQsNyArMzU0LDkgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3Rf
aW5saW5lU3RvcgogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIEpTRmluYWxPYmplY3QqIHJlc3VsdCA9IHN0
YXRpY19jYXN0PEpTRmluYWxPYmplY3QqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihK
U0ZpbmFsT2JqZWN0KSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUg
cHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDEwIEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpT
UHJvcGVydHlOYW1lSXQKICAgICAgICAgIW8tPnN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQ
cm9wZXJ0aWVzKCkgJiYgIW8tPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
ICYmCiAgICAgICAgICFvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzKCkpCiAgICAgICAgIG51bUNhY2hlYWJsZVNsb3RzID0gby0+c3RydWN0dXJlKCkt
PnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLQotICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpz
UHJvcGVydHlOYW1lSXRlcmF0b3IgPSBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Io
ZXhlYywgcHJvcGVydHlOYW1lcy5kYXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKKyAgICAKKyAg
ICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcikpKTsKKyAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IG5ldyAocmVzdWx0
KSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKGV4ZWMsIHByb3BlcnR5TmFtZXMuZGF0YSgpLCBudW1D
YWNoZWFibGVTbG90cyk7CiAKICAgICBpZiAoby0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgp
KQogICAgICAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsNyArMjk4LDkgQEAgVVN0cmluZyBKU1N0cmluZzo6dG9TdHJpbmcoRXhlY1N0YXRl
KiBleAogCiBpbmxpbmUgU3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcp
CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgc3RyaW5nKTsKKyAgICBT
dHJpbmdPYmplY3QqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFN0cmluZ09iamVjdCo+KGV4ZWMtPmhl
YXAoKS0+YWxsb2NhdGUoc2l6ZW9mKFN0cmluZ09iamVjdCkpKTsKKyAgICByZXN1bHQtPm1fc3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBTdHJpbmdPYmplY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBz
dHJpbmcpOwogfQogCiBKU09iamVjdCogSlNTdHJpbmc6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NSw3ICs2NSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEV4ZWMKIAog
ICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3IChleGVj
KSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0OjpjcmVhdGUo
ZXhlYyk7CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3RTbG93Q2FzZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC05MCw3ICs5MCw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpz
eW50aGVzaXplT2JqZWN0KEV4ZWMKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsK
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMp
KTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVy
biBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjpz
eW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTEwMyw3ICsxMDMs
NyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAKICAgICBBU1NF
UlQoaXNVbmRlZmluZWRPck51bGwoKSk7CiAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RB
bk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RB
bk9iamVjdChleGVjKTsKKyAgICByZXR1cm4gSlNOb3RBbk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwog
fQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TG9va3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMCBAQCB2b2lkIHNl
dFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1
ZSgwKS5hc0NlbGwoKSk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgaWYgKGVudHJ5LT5nZW5l
cmF0b3IoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4
ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRy
eS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0
SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5n
dGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVu
dHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKICAgICAgICAgZWxzZQogI2Vu
ZGlmCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1
bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOworICAgICAg
ICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgp
LCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKIAogICAgICAgICB0aGlzT2JqLT5w
dXREaXJlY3RGdW5jdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZnVuY3Rp
b24sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICBsb2NhdGlvbiA9IHRoaXNPYmotPmdl
dERpcmVjdExvY2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBNYXRoT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVi
bGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgTWF0aE9iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
TWF0aE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE1h
dGhPYmplY3QqIHJlc3VsdCA9IHN0YXRpY19jYXN0PE1hdGhPYmplY3QqPihleGVjLT5oZWFwKCkt
PmFsbG9jYXRlKHNpemVvZihNYXRoT2JqZWN0KSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0
cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBNYXRoT2Jq
ZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2
ZUVycm9yQ29uc3QKIHsKICAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCi0gICAgTmF0
aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JQcm90
b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIG5hbWVBbmRNZXNz
YWdlLCB0aGlzKTsKKyAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gTmF0aXZl
RXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVj
dHVyZSwgbmFtZUFuZE1lc3NhZ2UsIHRoaXMpOwogCiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUKICAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBwcm90b3R5cGUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwx
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZTsKIAog
ICAgIGNsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJik7CiAKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWVBbmRNZXNz
YWdlKQorICAgICAgICB7CisgICAgICAgICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiByZXN1
bHQgPSBzdGF0aWNfY2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+aGVhcCgpLT5h
bGxvY2F0ZShzaXplb2YoTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcikpKTsKKyAgICAgICAgICAgIHJl
c3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3Vs
dCkgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
cHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
VmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDggKzI3LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZSA6IHB1
YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
KTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvclByb3RvdHlwZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWVBbmRNZXNzYWdlLCBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgTmF0aXZl
RXJyb3JQcm90b3R5cGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PE5hdGl2ZUVycm9yUHJvdG90eXBl
Kj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoTmF0aXZlRXJyb3JQcm90b3R5cGUpKSk7
CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChyZXN1bHQpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgY29uc3RydWN0b3IpOworICAgICAgICB9CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBKU1ZhbHVlIG51bWJlckNv
bnN0cnVjdG9yTWluVmFsdWUKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmpl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIE51bWJlck9i
amVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+
bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRD
b3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIG9iamVj
dC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVtYmVyKG4pKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgTnVtYmVyUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTnVtYmVyQ29uc3RydWN0b3IgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBOdW1iZXJDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBOdW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgCiAgICAgcHVibGljOgotICAgICAgICBOdW1i
ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE51
bWJlclByb3RvdHlwZSopOworICAgICAgICBzdGF0aWMgTnVtYmVyQ29uc3RydWN0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBOdW1iZXJQcm90b3R5cGUqIG51bVByb3RvdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9IHN0YXRpY19jYXN0PE51bWJl
ckNvbnN0cnVjdG9yKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoTnVtYmVyQ29uc3Ry
dWN0b3IpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBudW1Qcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNW
YWx1ZSBOdW1iZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKIAogTnVtYmVyT2JqZWN0KiBjb25zdHJ1
Y3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIG51bWJlcikKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IG5ldyAoZXhlYykg
TnVtYmVyT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6
OmNyZWF0ZShleGVjLCBleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2Jq
ZWN0U3RydWN0dXJlKCkpOwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIG51bWJlcik7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw5ICsyNiwxNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBO
dW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAg
cHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBOdW1iZXJPYmplY3QoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJPYmplY3Qq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIE51bWJlck9iamVjdCogcmVz
dWx0ID0gc3RhdGljX2Nhc3Q8TnVtYmVyT2JqZWN0Kj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShz
aXplb2YoTnVtYmVyT2JqZWN0KSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5j
bGVhcigpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBOdW1iZXJPYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZSA6IHB1YmxpYyBOdW1iZXJPYmplY3Qgewot
ICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIE51bWJlclByb3RvdHlwZShFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgTnVtYmVyUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
eworICAgICAgICAgICAgTnVtYmVyUHJvdG90eXBlKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxOdW1i
ZXJQcm90b3R5cGUqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihOdW1iZXJQcm90b3R5
cGUpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChyZXN1bHQpIE51bWJlclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIE9iamVj
dENvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgT2JqZWN0UHJvdG90eXBlKik7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgT2JqZWN0Q29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBPYmpl
Y3RQcm90b3R5cGUqIG9ialByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgT2JqZWN0
Q29uc3RydWN0b3IqIHJlc3VsdCA9IHN0YXRpY19jYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhl
Yy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoT2JqZWN0Q29uc3RydWN0b3IpKSk7CisgICAgICAg
ICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChyZXN1bHQpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBvYmpQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlz
aW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE3IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
LSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIE9iamVjdFByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIE9iamVjdFByb3RvdHlwZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0UHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoT2JqZWN0UHJvdG90
eXBlKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBPYmplY3RQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQg
UmVnRXhwTWF0Y2hlc0FycmF5OjpmaWxsQXJyYXlJbnN0YW4KIAogSlNPYmplY3QqIFJlZ0V4cENv
bnN0cnVjdG9yOjphcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGQuZ2V0KCkpOworICAg
IHJldHVybiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBkLmdldCgpKTsKIH0KIAog
SlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGkpIGNvbnN0CkBAIC0zMDQsNyArMzA0LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJl
Z0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAvLyBJZiBjYWxsZWQgYXMgYSBmdW5jdGlvbiwg
dGhpcyBqdXN0IHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IChzZWUgMTUuMTAuMy4xKS4KICAg
ICAgICAgaWYgKGNhbGxBc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4
cCA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFzT2JqZWN0KGFyZzApKS0+cmVnRXhwKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgICAgICAgICAg
cmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gYXNPYmplY3QoYXJnMCk7CiAgICAgfQpAQCAtMzI1LDcgKzMyNSw3IEBAIEpTT2JqZWN0KiBj
b25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4
cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAo
IXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xv
YmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICByZXR1cm4gUmVnRXhw
T2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9iYWxP
YmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDgg
KzU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBjbGFzcyBSZWdFeHBDb25z
dHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cFByb3RvdHlwZSopOwogICAgIHB1YmxpYzoKLSAgICAgICAg
UmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBSZWdFeHBQcm90b3R5cGUqKTsKKyAgICAgICAgc3RhdGljIFJlZ0V4cENvbnN0cnVjdG9yKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwUHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZXN1bHQgPSBzdGF0aWNfY2Fz
dDxSZWdFeHBDb25zdHJ1Y3Rvcio+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKFJlZ0V4
cENvbnN0cnVjdG9yKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBSZWdFeHBDb25zdHJ1Y3RvcihleGVj
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwUHJvdG90eXBlKTsKKyAgICAgICAgfQog
CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2
aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTYgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkgewot
ICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShF
eGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5KiByZXN1bHQgPSBzdGF0aWNfY2FzdDxSZWdFeHBNYXRj
aGVzQXJyYXkqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihSZWdFeHBNYXRjaGVzQXJy
YXkpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChyZXN1bHQpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBjdG9yUHJp
dmF0ZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+UmVnRXhwTWF0Y2hlc0FycmF5KCk7
CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywyNCBA
QAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgUmVnRXhwT2JqZWN0IDogcHVibGlj
IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZWdF
eHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKKwogICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
Z0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAgICAgICBSZWdFeHBPYmplY3QqIHJlc3Vs
dCA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6
ZW9mKFJlZ0V4cE9iamVjdCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xl
YXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKHJlc3VsdCkgUmVnRXhwT2JqZWN0KGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhw
KiByZWdFeHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEp
IFJlZ0V4cE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFz
ZTsKIAotICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9p
ZCBzZXRSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgZC0+cmVn
RXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHJldmlzaW9uIDkwOTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDE3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJl
Z0V4cFByb3RvdHlwZSA6IHB1YmxpYyBSZWdFeHBPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUmVnRXhwUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJlZ0V4cFByb3RvdHlwZSogcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8UmVnRXhwUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoUmVnRXhw
UHJvdG90eXBlKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigpOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBSZWdFeHBQcm90b3R5cGUoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUg
cHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hh
aW4uaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE5ICszNCwzMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBTbG90VmlzaXRvcjsKICAgICAKICAgICBjbGFzcyBTY29wZUNoYWlu
Tm9kZSA6IHB1YmxpYyBKU0NlbGwgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVDaGFpbk5v
ZGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2Jh
bFRoaXMpCisgICAgcHJvdGVjdGVkOgorICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVD
aGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCiAg
ICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c2NvcGVDaGFpbk5v
ZGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkK
ICAgICAgICAgICAgICwgbmV4dCgqZ2xvYmFsRGF0YSwgdGhpcywgbmV4dCwgV3JpdGVCYXJyaWVy
PFNjb3BlQ2hhaW5Ob2RlPjo6TWF5QmVOdWxsKQogICAgICAgICAgICAgLCBvYmplY3QoKmdsb2Jh
bERhdGEsIHRoaXMsIG9iamVjdCkKICAgICAgICAgICAgICwgZ2xvYmFsT2JqZWN0KCpnbG9iYWxE
YXRhLCB0aGlzLCBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAsIGdsb2JhbFRoaXMoKmdsb2Jh
bERhdGEsIHRoaXMsIGdsb2JhbFRoaXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGdsb2JhbERhdGEpOworICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3Qp
OworICAgICAgICAgICAgfQorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5O
b2RlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogbmV4dCwgSlNPYmpl
Y3QqIG9iamVjdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcykKICAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Cisg
ICAgICAgICAgICBTY29wZUNoYWluTm9kZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8U2NvcGVDaGFp
bk5vZGUqPihleGVjLT5oZWFwKCktPmFsbG9jYXRlKHNpemVvZihTY29wZUNoYWluTm9kZSkpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKHJlc3VsdCkgU2NvcGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIGdsb2JhbFRoaXMpOwogICAgICAgICB9Ci0KKyAgICAgICAgc3RhdGlj
IFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGdsb2JhbERhdGEpIFNjb3BlQ2hhaW5Ob2RlKG5leHQsIG9iamVjdCwgZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxUaGlzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwogICAgICAgICBXcml0ZUJhcnJpZXI8U2NvcGVD
aGFpbk5vZGU+IG5leHQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gb2JqZWN0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVj
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBnbG9iYWxPYmplY3Qt
PnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVj
KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTA5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBTdHJpbmdQcm90b3R5cGU7CiAKICAgICBjbGFzcyBTdHJpbmdDb25zdHJ1Y3RvciA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0cmluZ0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cmluZ1Byb3RvdHlwZSopOworICAgICAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0
cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
U3RyaW5nUHJvdG90eXBlKik7CisgICAgICAgIHN0YXRpYyBTdHJpbmdDb25zdHJ1Y3RvciogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCAsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqIHN0clByb3RvdHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgU3RyaW5nQ29uc3RydWN0b3IqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFN0
cmluZ0NvbnN0cnVjdG9yKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoU3RyaW5nQ29u
c3RydWN0b3IpKSk7CisgICAgICAgICAgICByZXN1bHQtPm1fc3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChyZXN1bHQpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBzdHJQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMSArMjcsMjggQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU3RyaW5n
T2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAg
ICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYp
OwotCisgICAgICAgIAorICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBhbGxvY1N0cmluZ09i
amVjdChFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ09iamVj
dCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8U3RyaW5nT2JqZWN0Kj4oZXhlYy0+aGVhcCgpLT5hbGxv
Y2F0ZShzaXplb2YoU3RyaW5nT2JqZWN0KSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVj
dHVyZS5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY1N0cmluZ09iamVjdChleGVjKSkgU3RyaW5nT2JqZWN0KGV4
ZWMsIHN0cnVjdHVyZSk7ICAKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0
cmluZyYgc3RyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY1N0cmlu
Z09iamVjdChleGVjKSkgU3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgc3RyKTsgIAorICAg
ICAgICB9CiAgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgICAgIAogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhh
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCShy
ZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgU3Ry
aW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywK
KyAgICAgICAgICAgIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKiByZXN1
bHQgPSBzdGF0aWNfY2FzdDxTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCo+
KGV4ZWMtPmhlYXAoKS0+YWxsb2NhdGUoc2l6ZW9mKFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBTdHJpbmdPYmplY3RUaGF0TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZChleGVjLAogICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJv
dG90eXBlKCkpLCBzdHJpbmcpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw5ICsyOCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmpl
Y3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBTdHJpbmdQcm90b3R5cGUgOiBwdWJsaWMgU3RyaW5n
T2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdQcm90
b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ1Byb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1Byb3RvdHlwZSogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8U3RyaW5nUHJvdG90eXBlKj4oZXhlYy0+aGVhcCgpLT5hbGxvY2F0ZShzaXplb2YoU3Ry
aW5nUHJvdG90eXBlKSkpOworICAgICAgICAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5jbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuIG5ldyAocmVzdWx0KSBTdHJpbmdQcm90b3R5cGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0w
Ny0xMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3RhdGlj
IGNyZWF0ZSBtZXRob2QuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NDQ2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzRGF0ZU9yTnVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGlj
RnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJtaW5hbCk6CisKIDIwMTEtMDctMTIgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG9uJ3QgcmV1c2UgdGhl
IGxhc3QgSW5zZXJ0VGV4dENvbW1hbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2
LDcgQEAgSlNWYWx1ZSBqc0RhdGVPck51bGwoRXhlY1N0YXRlKiBleGVjLCBkbwogewogICAgIGlm
ICghaXNmaW5pdGUodmFsdWUpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2
YWx1ZSk7CiB9CiAKIGRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCkBAIC0zMDcsNyArMzA3LDcgQEAgRnJhbWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0
ZSogZXhlYykKIAogSlNWYWx1ZSBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCks
IDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOworICAgIHJldHVybiBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5
TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOwogfQogCiBTdHJ1Y3R1cmUqIGdldENhY2hl
ZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgSlNET01XaW5kb3c6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2kKIHRl
bXBsYXRlPE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPgogSlNWYWx1
ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBwcm9wZXJ0
eU5hbWUsIG5hdGl2ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZSwgbmF0aXZlRnVu
Y3Rpb24pOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBjaGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
CShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE3ICs0MCwxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlv
bkJhY2spOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNr
KTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9u
Rm9yd2FyZCk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkZv
cndhcmQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9u
R28pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CiB9
CiAKIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNl
RnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90
eXBlRnVuY3Rpb25SZXBsYWNlKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5
cGVGdW5jdGlvblJlcGxhY2UpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGlj
UmVsb2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlv
bihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9u
UHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblBy
b3RvdHlwZUZ1bmN0aW9uUmVsb2FkKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0
YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVu
Y3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNMb2Nh
dGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRp
b25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CiB9CiAKIGJvb2wgSlNMb2NhdGlvbjo6Z2V0T3du
UHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcgKzEwODYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgICAgICBpZiAoIXJlYWQoZCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykg
RGF0ZUluc3RhbmNlKG1fZXhlYywgbV9nbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgZCk7
CisgICAgICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUobV9leGVjLCBtX2dsb2Jh
bE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCBkKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZp
bGVUYWc6IHsKICAgICAgICAgICAgIFJlZlB0cjxGaWxlPiBmaWxlOwpAQCAtMTE2Nyw3ICsxMTY3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIHJlRmxhZ3MgPSByZWdFeHBG
bGFncyhmbGFncy0+dXN0cmluZygpKTsKICAgICAgICAgICAgIEFTU0VSVChyZUZsYWdzICE9IElu
dmFsaWRGbGFncyk7CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRl
KCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybi0+dXN0cmluZygpLCByZUZsYWdzKTsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykgUmVnRXhwT2JqZWN0KG1fZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4
cCk7IAorICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKG1fZXhlYywgbV9l
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1fZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1
cmUoKSwgcmVnRXhwKTsgCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPYmplY3RSZWZlcmVuY2VU
YWc6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100754</attachid>
            <date>2011-07-13 19:00:32 -0700</date>
            <delta_ts>2011-07-13 19:14:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110713190031.patch</filename>
            <type>text/plain</type>
            <size>141433</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE4IEBA
CisyMDExLTA3LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YgCisgICAgICAgIG9wZXJhdG9y
IG5ldyBvdmVybG9hZGluZyBpbiBvcmRlciB0byBhbGxvY2F0ZSBHQyBvYmplY3RzIGFuZCB0byBy
ZXBsYWNlIAorICAgICAgICB0aGlzIG1ldGhvZCB3aXRoIHN0YXRpYyBjcmVhdGUgbWV0aG9kcyBm
b3IgZWFjaCBpbmRpdmlkdWFsIHR5cGUgb2YgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICAgSlMgb2Jq
ZWN0LiAgVGhpcyBwYXJ0aWN1bGFyIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCByZXBsYWNpbmcgdXNl
cyBvZiAKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBh
dGNoZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUgCisgICAgICAgIHBhcnRzIHRoYXQgaW50ZXJm
YWNlIHdpdGggdGhlIERPTS4gIER1ZSB0byB0aGUgRE9NJ3MgY29udGludWVkIGRlcGVuZGVuY2UK
KyAgICAgICAgb24gaXQsIG9wZXJhdG9yIG5ldyBoYXMgbm90IGFjdHVhbGx5IGJlZW4gcmVtb3Zl
ZCBmcm9tIEpTQ2VsbC4KKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudCAob2xpdmVy
QGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlw
ZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2Jq
ZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1h
a2VGdW5jdGlvbldpdGhDYWxsYmFjayk6CisgICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rv
cik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3Vt
ZW50cyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAg
ICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1l
L0FyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNT
cGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpT
Qzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9E
YXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlND
OjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAg
KEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6
RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rp
b25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAg
IChKU0M6OkdldHRlclNldHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFs
dWVXcmFwcGVyLmg6CisgICAgICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpqc0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRl
cik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1w
dHlBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50
aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6SlNOb3RB
bk9iamVjdCk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT05PYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6cHV0RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjpzdWJzdHJpbmdGcm9tUm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpyZXBs
YWNlQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6Um9wZUJ1aWxkZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OmpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcpOgorICAgICAgICAoSlNDOjpqc05vbnRy
aXZpYWxTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6Ompz
U3Vic3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNPd25lZFN0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9PYmplY3RTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN5bnRoZXNpemVPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0xv
b2t1cC5jcHA6CisgICAgICAgIChKU0M6OnNldFVwU3RhdGljRnVuY3Rpb25TbG90KToKKyAgICAg
ICAgKiBydW50aW1lL01hdGhPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6TWF0aE9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L05hdGl2ZUVycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpOdW1iZXJQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09i
amVjdFByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKToKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0UmVnRXhwKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAo
SlNDOjpSZWdFeHBPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvU2NvcGVDaGFpbi5oOgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6
U2NvcGVDaGFpbk5vZGUpOgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6U2NvcGVDaGFpbk5vZGU6OnB1c2gpOgorICAgICAgICAqIHJ1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcDoKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0
eVN0cmluZyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVj
dG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmg6CisgICAgICAgIChKU0M6OlN0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUNoYWluOjpjcmVhdGUpOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0
aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9f
Wk4zSlNDMTRKU0dsb2JhbE9iamVjdEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1Q
TlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRU
aHJlYWRFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBs
aW5nVGhyZWFkNXN0YXJ0RWoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA5MDkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDMsOCArMTQzLDE0IEBAIGxvbmcgU3RvcFdhdGNoOjpnZXRFbGFwc2VkTVMoKQogfQogCiBjbGFz
cyBHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewotcHVibGljOgorcHJvdGVj
dGVkOgogICAgIEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBW
ZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cyk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgR2xvYmFs
T2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0PigmKGdsb2JhbERhdGEuaGVhcCkp
KSBHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBhcmd1bWVudHMpOworICAgIH0K
ICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gImdsb2JhbCI7
IH0KIH07CiBDT01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEdsb2JhbE9iamVjdD46OnZhbHVlLCBX
VEZfSXNJbnRlZ2VyX0dsb2JhbE9iamVjdF9mYWxzZSk7CkBAIC0xNTMsMjIgKzE1OSwyMiBAQCBB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEdsb2JhbE9iamVjdCk7CiBHbG9iYWxPYmplY3Q6Okds
b2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cykKICAgICA6IEpTR2xvYmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJkZWJ1ZyIp
LCBmdW5jdGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBu
ZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9u
U3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicHJpbnQiKSwgZnVuY3Rp
b25QcmludCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9i
YWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVy
ZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVuY3Rpb25RdWl0KSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkg
SlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElk
ZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwg
dGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJk
ZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInByaW50IiksIGZ1bmN0aW9uUHJp
bnQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2Mi
KSwgZnVuY3Rpb25HQykpOwogI2lmbmRlZiBOREVCVUcKLSAgICBwdXREaXJlY3RGdW5jdGlvbihn
bG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwg
dGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIpLCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVh
dGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9uUmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkpKTsKICNlbmRpZgotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlz
LCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNp
b24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1
bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicnVuIiksIGZ1
bmN0aW9uUnVuKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQp
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygp
KSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
SWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5jdGlvbkNoZWNrU3lu
dGF4KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4
ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGlu
ZSkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQp
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0
ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAiY2hlY2tTeW50YXgiKSwgZnVuY3Rpb25DaGVja1N5bnRheCkpOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJyZWFkbGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfRkxBR1MpCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAic2V0U2FtcGxpbmdGbGFncyIpLCBm
dW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNh
bXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
c2V0U2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVj
KCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygp
LCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKSk7CiAj
ZW5kaWYKIAogICAgIEpTT2JqZWN0KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFs
RXhlYygpKTsKQEAgLTIyNyw3ICsyMzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUnVuCiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAotICAg
IEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3ICgmZXhlYy0+Z2xvYmFsRGF0YSgpKSBH
bG9iYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFVTdHJpbmc+KCkpOwor
ICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFVTdHJpbmc+KCkpOwogCiAgICAgU3RvcFdhdGNo
IHN0b3BXYXRjaDsKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKQEAgLTU1Miw3ICs1NTgsNyBAQCBp
bnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YsIEpTR2xvCiAgICAgT3B0aW9ucyBvcHRp
b25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdsb2JhbERhdGEp
OwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEpIEds
b2JhbE9iamVjdCgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmds
b2JhbERhdGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOworICAgIEdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIEdsb2Jh
bE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSksIG9wdGlvbnMu
YXJndW1lbnRzKTsKICAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhnbG9iYWxPYmpl
Y3QsIG9wdGlvbnMuc2NyaXB0cywgb3B0aW9ucy5kdW1wKTsKICAgICBpZiAob3B0aW9ucy5pbnRl
cmFjdGl2ZSAmJiBzdWNjZXNzKQogICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3Qp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDE0IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDYWxsYmFja0NvbnN0cnVjdG9yIDogcHVibGlj
IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlND
YWxsYmFja0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNDbGFzc1Jl
ZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBj
bGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKSAKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrQ29uc3RydWN0
b3I+KGV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCB+
SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6
Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rp
b24+KGV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGNhbGxiYWNrLCBuYW1lKTsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKICAgICAKICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVj
dG9yIGFuZCBmdW5jdGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gOTA5MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE2LDkgKzExNiwyMSBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBX
ZWFrSGFuZGxlCiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNsYXNzIEpTQ2FsbGJhY2tP
YmplY3QgOiBwdWJsaWMgQmFzZSB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFj
a09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTQ2xhc3NS
ZWYsIHZvaWQqIGRhdGEpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNHbG9iYWxEYXRhJiwgSlND
bGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgLy8gcHNldWRvLXBsYWNlbWVudCB2ZXJzaW9uIG9m
IG9wZXJhdG9yIG5ldworICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHB0cikg
eyByZXR1cm4gcHRyOyB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZXhl
Yy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCog
Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8SlNDYWxsYmFja09iamVjdD4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpTQ2FsbGJhY2tPYmpl
Y3QoKmdsb2JhbERhdGEsIGNsYXNzUmVmLCBzdHJ1Y3R1cmUpOworICAgIH0KIAogICAgIHZvaWQg
c2V0UHJpdmF0ZSh2b2lkKiBkYXRhKTsKICAgICB2b2lkKiBnZXRQcml2YXRlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3
IEBAIEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljRnUKICAgICAgICAgICAg
IGlmIChTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+Z2V0KHBy
b3BlcnR5TmFtZS5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb25DYWxsYmFjayBjYWxsQXNGdW5jdGlvbiA9IGVudHJ5LT5jYWxsQXNGdW5jdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8g
PSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlz
T2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogbyA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdldEFub255bW91c1ZhbHVlKDAp
KSwgY2FsbEFzRnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHRo
aXNPYmotPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgbywgZW50
cnktPmF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVm
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIEpTT2JqZWN0KiBPcGFxdWVK
U0NsYXNzOjpwcm90b3R5cGUoRXhlY1MKIAogICAgIGlmICghanNDbGFzc0RhdGEuY2FjaGVkUHJv
dG90eXBlKSB7CiAgICAgICAgIC8vIFJlY3Vyc2l2ZSwgYnV0IHNob3VsZCBiZSBnb29kIGVub3Vn
aCBmb3Igb3VyIHB1cnBvc2VzCi0gICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJv
dG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhl
IG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24g
ZGVzdHJ1Y3Rpb24KKyAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFz
cywgJmpzQ2xhc3NEYXRhKSwgMCk7IC8vIHNldCBqc0NsYXNzRGF0YSBhcyB0aGUgb2JqZWN0J3Mg
cHJpdmF0ZSBkYXRhLCBzbyBpdCBjYW4gY2xlYXIgb3VyIHJlZmVyZW5jZSBvbiBkZXN0cnVjdGlv
bgogICAgICAgICBpZiAocGFyZW50Q2xhc3MpIHsKICAgICAgICAgICAgIGlmIChKU09iamVjdCog
cHJvdG90eXBlID0gcGFyZW50Q2xhc3MtPnByb3RvdHlwZShleGVjKSkKICAgICAgICAgICAgICAg
ICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUtPnNldFByb3RvdHlwZShleGVjLT5nbG9iYWxE
YXRhKCksIHByb3RvdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBKU0ds
b2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRlCiAgICAgICAgIHJldHVybiBKU0ds
b2JhbENvbnRleHRSZXRhaW4odG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
KTsKICAgICB9CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChnbG9i
YWxEYXRhLmdldCgpKSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PigqZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVh
dGUoZ2xvYmFsRGF0YS5nZXQoKSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOwog
ICAgIGlmICghcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlKEpTQ29udGV4dFJlZiBjdAogICAgIGlmICghanNDbGFzcykKICAg
ICAgICAgcmV0dXJuIHRvUmVmKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpKTsKIAotICAgIEpT
Q2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Piogb2JqZWN0ID0gbmV3IChl
eGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNh
bGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOworICAgIEpTQ2FsbGJhY2tP
YmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Piogb2JqZWN0ID0gSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0
U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOwogICAgIGlmIChKU09iamVjdCogcHJvdG90eXBl
ID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQogICAgICAgICBvYmplY3QtPnNldFByb3RvdHlw
ZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNP
YmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbAogCiAgICAgSWRlbnRpZmllciBu
YW1lSUQgPSBuYW1lID8gbmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSA6IElk
ZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOwogICAgIAotICAgIHJldHVybiB0b1JlZihuZXcg
KGV4ZWMpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lSUQpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxs
QXNGdW5jdGlvbiwgbmFtZUlEKSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0
cnVjdG9yKEpTQ29udGV4dFJlZiBjdHgsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplY3RDYWxs
QXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxBc0NvbnN0cnVjdG9yKQpAQCAtMTA3LDcgKzEwNyw3
IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAoIWpz
UHJvdG90eXBlKQogICAgICAgICBqc1Byb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAKLSAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBKU0NhbGxiYWNrQ29uc3RydWN0b3IoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrQ29u
c3RydWN0b3JTdHJ1Y3R1cmUoKSwganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3IpOworICAgIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBKU0NhbGxiYWNrQ29uc3RydWN0b3I6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBj
YWxsQXNDb25zdHJ1Y3Rvcik7CiAgICAgY29uc3RydWN0b3ItPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGpzUHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcmV0dXJuIHRvUmVmKGNvbnN0
cnVjdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM1LDcgKzE3MzUsNyBAQCB2
b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhCiAgICAgQVNTRVJUKGNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFpbigp
KTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIo
KSkuanNWYWx1ZSgpKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGNhbGxG
cmFtZSkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBKU0FjdGl2YXRpb246OmNyZWF0ZSgmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKSwgY2FsbEZy
YW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkp
OwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkgPSBKU1Zh
bHVlKGFjdGl2YXRpb24pOwogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAgICAgRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOwogICAgICAgICBnbG9iYWxP
YmplY3QtPnJlbW92ZURpcmVjdCgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbi0+aWRlbnQoKSk7IC8v
IE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4K
IAotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIG1h
a2VGdW5jdGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlQ2hhaW4pOworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5jdGlvbihleGVjLCBmdW5j
dGlvbiksIHNjb3BlQ2hhaW4pOwogICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIoZnVu
Y3Rpb24tPmlkZW50KCksIGZhbHNlKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0
KGluZGV4KS5zZXQoKm1fZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzAsNyArMTYzMCw3IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlU3ludGF4RXJyb3IoY2FsbEZyYW1lLCAiSW52YWxpZCBmbGFn
cyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIik7CiAgICAgICAgICAgICBnb3RvIHZt
X3Rocm93OwogICAgICAgICB9Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
SlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVn
RXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IEpTVmFsdWUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxP
YmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApKTsKIAogICAgICAgICB2UEMgKz0gT1BD
T0RFX0xFTkdUSChvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpA
QCAtMzM2NSw3ICszMzY1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWFyZ3VtZW50cykgewot
ICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3Vt
ZW50cyhjYWxsRnJhbWUpOworICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1
bWVudHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUpOwogICAgICAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IEpTVmFsdWUoYXJndW1lbnRzKTsK
ICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSA9IEpTVmFsdWUoYXJndW1lbnRzKTsKICAgICAgICAg
fQpAQCAtNDQ5Nyw3ICs0NDk3LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKIAogICAgICAgICBp
bnQgYWN0aXZhdGlvblJlZyA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlmICghY2FsbEZy
YW1lLT5yKGFjdGl2YXRpb25SZWcpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAgSlNBY3RpdmF0
aW9uKiBhY3RpdmF0aW9uID0gbmV3IChnbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKSk7CisgICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2
YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCkt
PnB1c2goYWN0aXZhdGlvbikpOwogICAgICAgICB9CkBAIC00NjA3LDcgKzQ2MDcsNyBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKIAog
ICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihkc3QpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3VtZW50cyhjYWxsRnJh
bWUpOworICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0
ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpID0gSlNWYWx1ZShhcmd1
bWVudHMpOwogICAgICAgICB9CkBAIC01MDY5LDEzICs1MDY5LDEzIEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzKEMKICAgICAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdp
c3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAg
ICAgICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGZ1bmN0aW9uQ2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzOwotICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUobmV3IChjYWxsRnJh
bWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSkpOworICAgICAgICBKU1ZhbHVlIGFyZ3Vt
ZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoJihjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSksIGZ1bmN0aW9uQ2FsbEZyYW1lKSk7CiAgICAgICAgIGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKGFy
Z3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICAgICAgZnVuY3Rpb25DYWxsRnJhbWUt
PnIocmVhbEFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50czsKICAgICB9CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZnVuY3Rp
b25DYWxsRnJhbWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgmKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CiAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0
ZXJzKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBhcmd1bWVu
dHM7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA2Miw3ICsyMDYyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNP
YmplY3QqLCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKIAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoc3RhY2tGcmFtZS5nbG9i
YWxEYXRhKSBKU0FjdGl2YXRpb24oc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2
YXRpb246OmNyZWF0ZSgmKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpLCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnB1c2goYWN0aXZhdGlvbikpOwogICAgIHJldHVybiBhY3RpdmF0aW9uOwog
fQpAQCAtMjExMCw3ICsyMTEwLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEFyZ3Vt
ZW50cyhzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBB
cmd1bWVudHM6OmNyZWF0ZShzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZy
YW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9
CiAKQEAgLTIxMTgsNyArMjExOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBBcmd1
bWVudHMoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsKKyAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9CiAKQEAg
LTMxMjgsNyArMzEyOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3
X3IKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG5l
dyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qoc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJl
Z0V4cE9iamVjdDo6Y3JlYXRlKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiB9CiAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9iaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwxNCArNTksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmd1bWVudHMg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIE5v
UGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBBcmd1bWVudHMqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8QXJndW1lbnRzPigmKGdsb2JhbERhdGEtPmhlYXApKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBOb1BhcmFtZXRl
cnNUeXBlIG5vUGFyYW1zKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8QXJndW1lbnRzPigmKGdsb2JhbERhdGEtPmhlYXApKSkgQXJndW1lbnRzKGNhbGxG
cmFtZSwgbm9QYXJhbXMpOworICAgICAgICB9CisKICAgICAgICAgLy8gVXNlIGFuIGVudW0gYmVj
YXVzZSBvdGhlcndpc2UgZ2NjIGluc2lzdHMgb24gZG9pbmcgYSBtZW1vcnkKICAgICAgICAgLy8g
cmVhZC4KICAgICAgICAgZW51bSB7IE1heEFyZ3VtZW50cyA9IDB4MTAwMDAgfTsKLQotICAgICAg
ICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQorICAgIAorICAgIHBy
b3RlY3RlZDoKICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSopOwogICAgICAgICBBcmd1bWVu
dHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0ZXJzVHlwZSk7CisKKyAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkFyZ3VtZW50cygpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEx
ICs3OSwxMSBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpCiAgICAg
ICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICBpZiAo
biAhPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBz
bWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
biwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJy
YXkgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIGluIGl0Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgYXJncyk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBBcnJheVByb3Rv
dHlwZTsKIAogICAgIGNsYXNzIEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgQXJyYXlDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEFycmF5UHJvdG90
eXBlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEFycmF5Q29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBBcnJheVByb3RvdHlwZSogYXJyUHJvdG90eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8QXJyYXlDb25z
dHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgYXJyUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGRlbGV0ZURvdWJsZSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogcmVzT2JqID0gbmV3IChleGVj
KSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3JlYXRlQ29tcGFjdCk7CisgICAgSlNB
cnJheSogcmVzT2JqID0gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3Jl
YXRlQ29tcGFjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFycmF5UHJv
dG90eXBlIDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGV4cGxpY2l0IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxBcnJheVByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiAvLyBFQ01BIDE1LjYu
MgogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVh
bk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJv
b2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5i
b29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkpOwog
ICAgIHJldHVybiBvYmo7CiB9CkBAIC03MSw3ICs3MSw3IEBAIENhbGxUeXBlIEJvb2xlYW5Db25z
dHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEKIAogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1t
ZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgaW1tZWRpYXRlQm9vbGVhblZhbHVlKQogewotICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKICAgICByZXR1cm4g
b2JqOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGU7CiAK
ICAgICBjbGFzcyBCb29sZWFuQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Qm9vbGVh
bkNvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJvb2xQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShD
b25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdCA6IHB1YmxpYyBK
U1dyYXBwZXJPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4
cGxpY2l0IEJvb2xlYW5PYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5PYmplY3Q+KCZnbG9iYWxEYXRhLmhl
YXApKSBCb29sZWFuT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
Qm9vbGVhblByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJvdGVjdGVkOgogICAgICAgICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBC
b29sZWFuUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5Qcm90b3R5cGU+KGV4ZWMtPmhlYXAo
KSkpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyAoZXhl
YykgRGF0ZUluc3RhbmNlKGV4ZWMsIGdsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+
ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9CiAgICAgCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBEYXRlUHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZUNv
bnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0
ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPERhdGVDb25zdHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgRGF0ZUNv
bnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBkYXRlUHJvdG90eXBlKTsK
KyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2
aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDIwIEBAIG5hbWVzcGFjZSBXVEYgewog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFw
cGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBEYXRlSW5z
dGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgZG91YmxlKTsKICAgICAgICAgZXhwbGljaXQg
RGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotCisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGRvdWJsZSBkYXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPihleGVjLT5oZWFwKCkp
KSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlLCBkYXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPERhdGVJbnN0YW5jZT4oZXhlYy0+aGVhcCgpKSkgRGF0ZUluc3RhbmNlKGV4ZWMsIHN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGRvdWJsZSBpbnRlcm5hbE51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsVmFsdWUoKS51bmNoZWNrZWRHZXROdW1iZXIoKTsg
fQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5o
CShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZVByb3RvdHlw
ZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8RGF0ZVByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgRGF0ZVByb3RvdHlwZShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiA5MDkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDEyICsxNjYsMTggQEAgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhl
Y1N0YXRlKiBleAogfQogCiBjbGFzcyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24gOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgU3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiAg
ICAgICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllcikKICAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKICAgICB7CiAgICAgfQorCitw
dWJsaWM6CisgICAgc3RhdGljIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPihleGVjLT5oZWFw
KCkpKSBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIG1lc3NhZ2UpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgewpAQCAtMjA1LDcgKzIxMSw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaWN0
TW9kZVR5cGUKIAogSlNWYWx1ZSBjcmVhdGVUeXBlRXJyb3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgU3Ry
aWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+aW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksOSArMjksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXJyb3JQcm90b3R5cGU7
CiAKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
ewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEVycm9yQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBFcnJvclByb3RvdHlwZSop
OwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1Y3RvciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEVycm9yUHJvdG90eXBlKiBlcnJQcm90b3R5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckNvbnN0cnVjdG9yPihleGVj
LT5oZWFwKCkpKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBlcnJQcm90b3R5cGUpOworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEm
KTsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBFcnJvckluc3Rh
bmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0CiAKIEVycm9ySW5zdGFuY2UqIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEVycm9ySW5zdGFuY2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKKyAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oJmdsb2JhbERhdGEtPmhlYXAp
KSBFcnJvckluc3RhbmNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbWVzc2FnZSk7CiB9CiAKIEVy
cm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiB7CiAgICAgaWYgKG1lc3NhZ2UuaXNV
bmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEVycm9y
SW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+
KGV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oZXhlYy0+
aGVhcCgpKSkgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1l
c3NhZ2UudG9TdHJpbmcoZXhlYykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZSA6IHB1
YmxpYyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAg
ICBFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8RXJyb3JQcm90b3R5cGU+KGV4ZWMtPmhlYXAoKSkpIEVycm9yUHJvdG90eXBlKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5
cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQy
LDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
ciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAg
ICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPigmKGdsb2JhbERhdGEtPmhlYXApKSkgSW50ZXJydXB0
ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIENvbXBs
VHlwZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0ZWQ7IH0KIAogICAg
IHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiAiSmF2
YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOyB9CkBAIC01NSwxNiArNjEsMjIg
QEAgcHVibGljOgogCiBKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAogY2xhc3Mg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHVi
bGljOgorcHJvdGVjdGVkOgogICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAg
IHsKICAgICB9CiAKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oJihnbG9iYWxEYXRh
LT5oZWFwKSkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisK
ICAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gVGVy
bWluYXRlZDsgfQogCiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0IHsgcmV0dXJuICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiI7IH0KQEAgLTcy
LDcgKzg0LDcgQEAgcHVibGljOgogCiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgIHJl
dHVybiBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAog
SlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5
MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQgPSAtMTsKICAgICAKLSAgICBw
dWJsaWM6CiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQogICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogICAgICAgICAgICAgLCBtX251bVBhcmFtZXRl
cnNGb3JDYWxsKG51bVBhcmFtZXRlcnMpCkBAIC02NCw2ICs2MywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGZpbmFsaXplci5sZWFrSGFuZGxlKCk7CiAjZW5kaWYKICAgICAgICAg
fQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFeGVjdXRhYmxlQmFzZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGlu
dCBudW1QYXJhbWV0ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8RXhlY3V0YWJsZUJhc2U+KCZnbG9iYWxEYXRhLmhlYXApKSBFeGVjdXRhYmxlQmFz
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIG51bVBhcmFtZXRlcnMpOworICAgICAgICB9CiAKICAg
ICAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NiwxMyAr
MTcxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJs
ZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
KCZnbG9iYWxEYXRhKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVu
Y3Rpb24sIEpJVENvZGUoKSwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
Jmdsb2JhbERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY29uc3Ry
dWN0VGh1bmspLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KCZnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVj
dXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29uc3Ry
dWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1
dGFibGU+KCZnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJ
VENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBmdW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgY29uc3RydWN0b3IpOwogICAgICAgICB9CiAjZWxzZQog
ICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVj
dG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0
aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KCZnbG9iYWxE
YXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1
Y3Rvcik7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yOTAsNyArMjk1LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2V2YWxDb2RlQmxvY2s7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkgeyByZXR1
cm4gbmV3IChleGVjKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250
ZXh0KTsgfQorICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFdmFsRXhl
Y3V0YWJsZT4oZXhlYy0+aGVhcCgpKSkgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0lu
U3RyaWN0Q29udGV4dCk7IAorICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBK
SVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlKCkKQEAgLTMxOSw3ICszMjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQcm9ncmFtRXhlY3V0YWJsZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBz
b3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFByb2dyYW1FeGVj
dXRhYmxlPihleGVjLT5oZWFwKCkpKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwog
ICAgICAgICB9CiAKICAgICAgICAgflByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC0zNzIsMTcgKzM4
MCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBGdW5j
dGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMs
IEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUs
IGxhc3RMaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlv
bkV4ZWN1dGFibGU+KGV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1l
LCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRl
eHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEZ1
bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNl
c0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxE
YXRhLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0
cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oJmdsb2JhbERhdGEtPmhlYXApKSBG
dW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1
bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5l
KTsKICAgICAgICAgfQogCiAgICAgICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3Ig
Y29uc3RydWN0IGJ5dGVjb2RlLiBUaGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBK
U09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBuZXcgKGV4ZWMpIFNjb3BlQ2hhaW5Ob2RlKDAsIGdsb2JhbE9iamVjdCwg
Jmdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4p
OworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0
ZShleGVjLCAwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGZ1bmN0aW9uLCBzY29wZUNoYWluKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9u
IENvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOCArMjgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90
b3R5cGU7CiAKICAgICBjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEZ1bmN0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBGdW5j
dGlvblByb3RvdHlwZSopOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQ29u
c3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3Rv
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uQ29uc3RydWN0b3I+KGV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGZ1bmNQcm90b3R5cGUpOworICAgICAgICB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblBy
b3RvdHlwZShFeGUKIAogdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0
aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5j
dGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwotICAgICphcHBseUZ1bmN0aW9uID0g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1
cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBs
eSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwg
RG9udEVudW0pOworICAgICphcHBseUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBwbHlGdW5jdGlvbiwgRG9udEVudW0pOwotICAgICpj
YWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9u
UHJvdG9GdW5jQ2FsbCk7CisgICAgKmNhbGxGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rpb24sIERvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZSA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBG
dW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxs
RnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUHJvdG90
eXBlPihleGVjLT5oZWFwKCkpKSBGdW5jdGlvblByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkRnVuY3Rp
b25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBmdW5j
dGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFw
cGx5RnVuY3Rpb24pOworICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90bykKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHBy
b3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RD
b3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0
ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGZvciBhIHByb3BlcnR5LgogICAgIGNsYXNzIEdldHRl
clNldHRlciA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwotICAg
IHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEdldHRlclNldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAgICAg
ICAgfQorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEdldHRlclNldHRlciogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEdldHRlclNldHRlcj4oZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0dGVyKGV4ZWMpOwor
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdy
YXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQ
SVZhbHVlV3JhcHBlci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FQ
SVZhbHVlV3JhcHBlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVl
V3JhcHBlcj4oZXhlYy0+aGVhcCgpKSkgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOwor
ICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC01Niw3ICs2MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgaW5saW5lIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNBUElWYWx1ZVdy
YXBwZXI6OmNyZWF0ZShleGVjLCB2YWx1ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgSlNWYWx1ZSBK
U0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgICAgICByZXR1cm4gYXJndW1lbnRz
OwogICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlKG5ldyAoY2FsbEZyYW1lKSBBcmd1bWVudHMoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSBh
cmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKCYoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkpLCBjYWxsRnJhbWUpKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRz
UmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJn
dW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDggKzQxLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEpTQWN0
aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1Zh
cmlhYmxlT2JqZWN0IEJhc2U7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAg
SlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSopOworICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU0FjdGl2YXRpb24+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU0FjdGl2YXRpb24oY2FsbEZy
YW1lLCBmdW5jRXhlYyk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRp
b24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDE0ICs2MCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBK
U0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
V2Fsa2VyOwogCi0gICAgcHVibGljOgotICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tU
eXBlKTsKLQorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgQXJnTGlzdCYgaW5p
dGlhbFZhbHVlcyk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRy
U3RlYWxpbmdIYWNrVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAg
ICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0FycmF5PigmZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSlNBcnJheSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5Q3JlYXRpb25Nb2RlIGNyZWF0ZU1vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PigmZ2xv
YmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5n
dGgsIGNyZWF0ZU1vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSlNB
cnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PigmZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxWYWx1ZXMpOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CkBAIC0xMjIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYp
OwogICAgICAgICB2b2lkIGNvcHlUb1JlZ2lzdGVycyhFeGVjU3RhdGUqLCBSZWdpc3RlciosIHVp
bnQzMl90KTsKLQorICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjZWxsLT5+SlNDZWxsKCk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwKiBoZWFwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGhlYXAtPmFsbG9jYXRlKHNpemVvZihUKSk7CisgICAgfQorICAgICAgICAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNDZWxsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMCArNDgsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVj
dFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAg
ICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgaW50
IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUV4ZWN1dGFibGUqKTsKICAgICAgICAg
SlNGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBTY29wZUNoYWluTm9k
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPihleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgsIGlkZW50LCBuYXRpdmVGdW5jKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBOYXRpdmVFeGVjdXRhYmxlKiBu
YXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8SlNGdW5jdGlvbj4oZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgbGVuZ3RoLCBpZGVudCwgbmF0aXZlRXhlYyk7CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY0V4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oZXhl
Yy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBmdW5jRXhlYywgc2NvcGVDaGFpbik7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAg
ICBjb25zdCBVU3RyaW5nJiBuYW1lKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0
KEpTT2JqZWN0KiB0aGlzCiAgICAgc3RydWN0dXJlKCktPmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9u
VHJhY2tpbmcoKTsKIAogICAgIG1fZ2xvYmFsRGF0YSA9IEhlYXA6OmhlYXAodGhpcyktPmdsb2Jh
bERhdGEoKTsKLSAgICBtX2dsb2JhbFNjb3BlQ2hhaW4uc2V0KCptX2dsb2JhbERhdGEsIHRoaXMs
IG5ldyAobV9nbG9iYWxEYXRhLmdldCgpKSBTY29wZUNoYWluTm9kZSgwLCB0aGlzLCBtX2dsb2Jh
bERhdGEuZ2V0KCksIHRoaXMsIHRoaXNWYWx1ZSkpOworICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZSgwLCB0aGlzLCBt
X2dsb2JhbERhdGEuZ2V0KCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgwLCAwLCBtX2dsb2JhbFNjb3BlQ2hhaW4uZ2V0KCksIENh
bGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKIAotICAgIG1fZnVuY3Rpb25Qcm90b3R5
cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBGdW5jdGlvblByb3Rv
dHlwZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJl
IHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgorICAgIG1fZnVuY3Rpb25Qcm90
b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJl
IHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgogICAgIG1fZnVuY3Rpb25TdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwog
ICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0
aW9uID0gMDsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0
aWVzKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksICZjYWxsRnVuY3Rpb24s
ICZhcHBseUZ1bmN0aW9uKTsKICAgICBtX2NhbGxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBjYWxsRnVuY3Rpb24pOwogICAgIG1fYXBwbHlGdW5jdGlvbi5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhcHBseUZ1bmN0aW9uKTsKLSAgICBtX29iamVjdFByb3RvdHlw
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlw
ZShleGVjLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzTnVsbCgpKSkpOworICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9i
amVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxs
KCkpKSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlw
ZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpOwogCiAgICAgbV9lbXB0eU9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS0+aW5oZXJpdG9ySUQoZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CkBAIC0yMDYsNTQgKzIwNiw1NCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAgICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBt
X2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
Q2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1f
YXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBB
cnJheVByb3RvdHlwZSh0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9hcnJheVBy
b3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2FycmF5U3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX3Jl
Z0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBS
ZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fc3RyaW5nUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIHRo
aXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBt
X2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVj
KSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBCb29s
ZWFuUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CiAgICAgbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
Ym9vbGVhblByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9udW1iZXJQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOdW1iZXJQcm90b3R5cGUoZXhlYywg
dGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX251bWJlclByb3RvdHlwZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAg
IG1fZGF0ZVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMp
IERhdGVQcm90b3R5cGUoZXhlYywgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9k
YXRlUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVQcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2RhdGVTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZUluc3RhbmNlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpKTsKIAog
ICAgIFJlZ0V4cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRh
KCksICIiLCBOb0ZsYWdzKTsKICAgICAKLSAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFJlZ0V4cFByb3RvdHlwZShleGVjLCB0aGlz
LCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSwgZW1wdHlSZWdleCkpOworICAgIG1fcmVnRXhwUHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CiAgICAgbV9y
ZWdFeHBTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX3JlZ0V4cFByb3RvdHlwZS5n
ZXQoKSkpOwogCiAgICAgbV9tZXRob2RDYWxsRHVtbXkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgRXJyb3JQcm90b3R5cGUq
IGVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBFcnJvclByb3RvdHlwZShleGVjLCB0aGlzLCBF
cnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5cGUg
PSBFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
OwogICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90
b3R5cGUpKTsKIAogICAgIC8vIENvbnN0cnVjdG9ycwogCi0gICAgSlNDZWxsKiBvYmplY3RDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgdGhpcywgT2JqZWN0
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxs
KiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4
ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKTsKLSAgICBKU0NlbGwqIGFycmF5Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgdGhpcywgQm9vbGVhbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwq
IG51bWJlckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCB0
aGlzLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKTsK
LSAgICBKU0NlbGwqIGRhdGVDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRGF0ZUNvbnN0cnVjdG9y
KGV4ZWMsIHRoaXMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQo
KSk7CisgICAgSlNDZWxsKiBvYmplY3RDb25zdHJ1Y3RvciA9IE9iamVjdENvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25D
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGFycmF5Q29uc3RydWN0
b3IgPSBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogc3RyaW5nQ29u
c3RydWN0b3IgPSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFN0cmluZ0Nv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCog
Ym9vbGVhbkNvbnN0cnVjdG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhp
cywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsK
KyAgICBKU0NlbGwqIG51bWJlckNvbnN0cnVjdG9yID0gTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBl
LmdldCgpKTsKKyAgICBKU0NlbGwqIGRhdGVDb25zdHJ1Y3RvciA9IERhdGVDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlw
ZS5nZXQoKSk7CiAKLSAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgdGhpcywgUmVnRXhw
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fcmVn
RXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwQ29uc3Ry
dWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVn
RXhwUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRo
aXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBlcnJvclByb3RvdHlwZSkpOworICAgIG1fZXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJv
dG90eXBlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJl
ID0gTmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIGVycm9yUHJvdG90eXBlKTsKICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yU3RydWN0dXJl
ID0gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgbV9ldmFsRXJyb3JDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9y
UHJvdG90eXBlU3RydWN0dXJlLCAiRXZhbEVycm9yIikpOwotICAgIG1fcmFuZ2VFcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJy
b3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJy
b3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSYW5nZUVycm9yIikpOwotICAgIG1fcmVmZXJlbmNlRXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5h
dGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmVmZXJlbmNlRXJyb3IiKSk7Ci0gICAgbV9z
eW50YXhFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAo
ZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJTeW50YXhFcnJvciIpKTsKLSAg
ICBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJUeXBlRXJyb3IiKSk7Ci0g
ICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJVUklFcnJvciIpKTsKKyAg
ICBtX2V2YWxFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7CisgICAg
bV9yYW5nZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0
dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7CisgICAg
bV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIp
KTsKKyAgICBtX3N5bnRheEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9y
IikpOworICAgIG1fdHlwZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIp
KTsKKyAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9y
U3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOwog
CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+
cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9u
dEVudW0pOwpAQCAtMjgxLDE1ICsyODEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQo
SlNWYWx1ZSBwcm90bwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJy
b3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJVUklF
cnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKIAotICAgIG1f
ZXZhbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgSlNG
dW5jdGlvbihleGVjLCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwpKTsKKyAgICBtX2V2YWxGdW5jdGlv
bi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
dGhpcywgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmV2YWwsIGdsb2JhbEZ1bmNFdmFsKSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbihleGVjLCBtX2V2YWxGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwogCiAgICAgR2xv
YmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgbmV3IChleGVjKSBNYXRoT2JqZWN0KGV4
ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCisgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiksIE1hdGhPYmpl
Y3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERvbnRE
ZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTmFO
IiksIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkluZmluaXR5IiksIGpzTnVtYmVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZp
ZXIoZXhlYywgInVuZGVmaW5lZCIpLCBqc1VuZGVmaW5lZCgpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4
ZWMsICJKU09OIiksIG5ldyAoZXhlYykgSlNPTk9iamVjdCh0aGlzLCBKU09OT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
LCBEb250RW51bSB8IERvbnREZWxldGUpCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVu
dGlmaWVyKGV4ZWMsICJKU09OIiksIEpTT05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUpCiAgICAgfTsKICAgICBhZGRTdGF0
aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykp
OwogCkBAIC0zOTUsMTEgKzM5NSw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2l6ZVJlZ2lz
dGVycyhzaXoKICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVh
c2UoKSwgbmV3U2l6ZSk7CiB9CiAKLXZvaWQqIEpTR2xvYmFsT2JqZWN0OjpvcGVyYXRvciBuZXco
c2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLXsKLSAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKTsKLX0KLQogdm9pZCBKU0dsb2JhbE9iamVjdDo6
YWRkU3RhdGljR2xvYmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkK
IHsKICAgICByZXNpemVSZWdpc3RlcnMoc3ltYm9sVGFibGUoKS5zaXplKCkgKyBjb3VudCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fZXZhbEVuYWJsZWQ7CiAKICAgICBwdWJsaWM6Ci0gICAgICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwotCiAgICAgICAgIGV4
cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSwgMCkKICAgICAgICAgICAgICwgbV9yZWdpc3RlckFy
cmF5U2l6ZSgwKQpAQCAtMjg3LDggKzI4NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHJlc2V0KEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgICAgICB2b2lkIHNldFJlZ2lzdGVy
cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7Ci0KLSAgICAg
ICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7IC8vIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCB3
aXRoIEpTR2xvYmFsRGF0YQogICAgIH07CiAKICAgICBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxP
YmplY3QoSlNWYWx1ZSk7CkBAIC0zNzgsNyArMzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAogICAgIGlu
bGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTM4
OCw3ICszODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlKCksIGluaXRpYWxMZW5ndGgsIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0K
IAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKQEAgLTQwMCw3ICszOTYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKICAgICAg
ICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJdGVtVmFsdWUpOwotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZSgpLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOwogICAg
IH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2luZ2xlSXRlbVZhbHVlKQpAQCAtNDEwLDcgKzQwNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKKyAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29u
c3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZp
c2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIC8vIGluIGNlcnRhaW4gU3F1aXJyZWxGaXNoIGJ5dGVjb2RlcyAtLSBlZmZlY3RpdmVseSBp
dCBqdXN0IHNpbGVudGx5IGNvbnN1bWVzCiAgICAgLy8gYW55IG9wZXJhdGlvbnMgcGVyZm9ybWVk
IG9uIHRoZSByZXN1bHQgb2YgYSBmYWlsZWQgdG9PYmplY3QgY2FsbC4KICAgICBjbGFzcyBKU05v
dEFuT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFs
RGF0YSgpLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNOb3RBbk9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTTm90QW5PYmplY3Q+KGV4ZWMtPmhlYXAoKSkpIEpTTm90QW5PYmplY3Qo
ZXhlYyk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAko
cmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAgICAgY2xhc3MgSlNPTk9iamVjdCA6IHB1YmxpYyBK
U09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEpTT05PYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIEpTT05PYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNPTk9iamVjdD4o
ZXhlYy0+aGVhcCgpKSkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RD
b3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQg
SlNPYmplY3Q6OmRlZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0
dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVy
OjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3QpOwog
CiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEg
bmV3IHByb3BlcnR5LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZp
bmVTZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRl
cihleGVjKTsKKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6
Y3JlYXRlKGV4ZWMpOwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBTZXR0ZXIsIHRydWUsIHNs
b3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2Ug
YWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgYm9vbCBw
dXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5l
cmljRGVzY3JpcHRvcigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAmJiBvbGREZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgICAgIEdldHRl
clNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAg
ICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgYXR0cmli
dXRlcyB8PSBHZXR0ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVj
LT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5s
aW5lU3RvcgogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Zp
bmFsT2JqZWN0PihleGVjLT5oZWFwKCkpKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDggKzYxLDggQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5h
bWVJdAogICAgICAgICAhby0+c3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSAmJiAhby0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYKICAgICAg
ICAgIW8tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMo
KSkKICAgICAgICAgbnVtQ2FjaGVhYmxlU2xvdHMgPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlT
dG9yYWdlU2l6ZSgpOwotCi0gICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5h
bWVJdGVyYXRvciA9IG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9w
ZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2FjaGVhYmxlU2xvdHMpOworICAgIAorICAgIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPihleGVjLT5oZWFwKCkpKSBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKGV4ZWMsIHByb3BlcnR5TmFtZXMuZGF0YSgpLCBudW1DYWNoZWFibGVTbG90cyk7CiAK
ICAgICBpZiAoby0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQogICAgICAgICByZXR1cm4g
anNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDkwOTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqLCBKU09iamVjdCopOworICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBw
cm9wZXJ0eU5hbWVBcnJheURhdGEsIHNpemVfdCBudW1DYWNoZWFibGVTbG90KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcj4oZXhlYy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0
eU5hbWVBcnJheURhdGEsIG51bUNhY2hlYWJsZVNsb3QpOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSwxMCArMTk5LDEwIEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6c3Vic3RyaW5nRnJvbVJv
cGUoRXgKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0KICAgICBpZiAoc3Vic3RyaW5n
RmliZXJDb3VudCA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOworICAgICAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOwogICAgIGlmIChzdWJz
dHJpbmdGaWJlckNvdW50ID09IDIpCi0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpT
U3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFd
KTsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzdWJz
dHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSwgc3Vic3RyaW5nRmliZXJzWzJdKTsK
KyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmli
ZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0pOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdLCBzdWJz
dHJpbmdGaWJlcnNbMl0pOwogfQogCiBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVy
KEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBjb25zdCBVU3RyaW5nJiByZXBsYWNl
bWVudCkKQEAgLTI1NCw3ICsyNTQsNyBAQCBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFj
dGVyKEV4ZWNTCiAgICAgfQogCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIEpTU3Ry
aW5nKGdsb2JhbERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUo
SlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBidWlsZGVyLnJlbGVhc2UoKSkpOwogfQogCiBK
U1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQpAQCAtMjk4LDcgKzI5OCw3IEBAIFVTdHJpbmcgSlNTdHJpbmc6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogZXgKIAogaW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyog
c3RyaW5nKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7
CisgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oZXhlYy0+aGVhcCgp
KSkgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSwgc3RyaW5nKTsKIH0KIAogSlNPYmplY3QqIEpTU3RyaW5nOjp0b09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9u
IDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIFZlY3RvcjxXb3JrSXRlbSwgMTY+IG1fd29ya1F1ZXVlOwogICAgICAgICB9OwogCisg
ICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07CisKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKCpn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAg
ICAsIG1fbGVuZ3RoKHZhbHVlLmxlbmd0aCgpKQpAQCAtMTkxLDcgKzE5NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHZhbHVlLmltcGwoKS0+Y29zdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gSGFz
T3RoZXJPd25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07CiAgICAgICAgIEpTU3RyaW5nKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJU
eXBlKQogICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkp
CkBAIC0yOTUsNiArMjk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPD0gc19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpOwogICAgICAgICB9CiAKKyAgICBwdWJs
aWM6CiAgICAgICAgIH5KU1N0cmluZygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2
cHRyKCkgPT0gSlNHbG9iYWxEYXRhOjpqc1N0cmluZ1ZQdHIpOwpAQCAtMzMzLDYgKzMzNiw0OSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCisKKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGdsb2JhbERhdGEtPmhl
YXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0
cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlIGhhc090aGVyT3duZXJUeXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xv
YmFsRGF0YS0+aGVhcCkpKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3RoZXJPd25l
clR5cGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFzT3Ro
ZXJPd25lclR5cGUgaGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpT
U3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlLCBoYXNPdGhlck93bmVyVHlwZSk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBQYXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCByb3BlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQs
IEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGdsb2Jh
bERhdGEtPmhlYXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHUyKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIGNvbnN0IFVTdHJpbmcmIHUxLCBKU1N0
cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZp
YmVyQ291bnQsIHUxLCBzMik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBKU1ZhbHVlIHYz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KGV4ZWMtPmhlYXAoKSkpIEpTU3RyaW5nKGV4ZWMsIHYxLCB2MiwgdjMpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+
aGVhcCkpKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGds
b2JhbERhdGEtPmhlYXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1Myk7CisgICAg
ICAgIH0KKworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNTdHJpbmcoVlB0clN0ZWFsaW5nSGFj
a1R5cGUpIAogICAgICAgICAgICAgOiBKU0NlbGwoVlB0clN0ZWFsaW5nSGFjaykKQEAgLTQ0Miw3
ICs0ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xv
YmFsRGF0YSwgVVN0cmluZygmYywgMSkpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9i
YWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIFVTdHJpbmcoJmMsIDEpKSk7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTQ1
Miw3ICs0OTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFj
dGVycygpW29mZnNldF07CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmlu
ZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGds
b2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhT
dHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgMSkpKSk7CisgICAgICAgIHJldHVy
biBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBVU3Ry
aW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCAxKSkpKTsKICAgICB9CiAK
ICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IGNoYXIqIHMpCkBAIC00NjAsMTMgKzUwNiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQVNTRVJUKHMpOwogICAgICAgICBBU1NFUlQoc1swXSk7CiAgICAgICAg
IEFTU0VSVChzWzFdKTsKLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBuZXcg
KGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHMpKTsKKyAgICAgICAgcmV0dXJuIGZp
eHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMpKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBBU1NFUlQo
cy5sZW5ndGgoKSA+IDEpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5l
dyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4g
Zml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcykpOwog
ICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSkKQEAgLTQ4OCw3ICs1MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRy
KGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOwor
ICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCkBAIC01MTYsNyArNTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBp
ZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0
YSwgYyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJpbmcoU3RyaW5nSW1wbDo6
Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpLCBKU1N0cmluZzo6SGFzT3RoZXJPd25l
cikpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNl
dCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVVN0cmluZyYgcykKQEAgLTUyOSw3ICs1NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywgSlNTdHJpbmc6
Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBK
U1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMsIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7
CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnRvT2JqZWN0U2xv
d0Nhc2UoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90QW5P
YmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVj
dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTkwLDcgKzkwLDcgQEAgSlNPYmpl
Y3QqIEpTVmFsdWU6OnN5bnRoZXNpemVPYmplY3QoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZp
bmVkT3JOdWxsKCkpOwogICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihleGVjLCAqdGhpcykpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhl
Yyk7CisgICAgcmV0dXJuIEpTTm90QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmpl
Y3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdApA
QCAtMTAzLDcgKzEwMyw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBl
KEUKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3
IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0Ojpj
cmVhdGUoZXhlYyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgw
LDEwIEBAIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiAKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdl
dEFub255bW91c1ZhbHVlKDApLmFzQ2VsbCgpKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBp
ZiAoZW50cnktPmdlbmVyYXRvcigpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBuZXcgKGV4ZWMp
IEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3Ry
dWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5l
cmF0b3IoKSkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5
LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRI
b3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3IoKSkpOwogICAg
ICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rp
b24oKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1
bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwogCiAgICAg
ICAgIHRoaXNPYmotPnB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCBmdW5jdGlvbiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIGxvY2F0aW9u
ID0gdGhpc09iai0+Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3Qu
aAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE0IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIE1hdGhPYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBNYXRoT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBNYXRoT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE1hdGhPYmplY3Q+KGV4ZWMtPmhl
YXAoKSkpIE1hdGhPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdAogewogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAKLSAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChleGVjKSBO
YXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVjdHVy
ZSwgbmFtZUFuZE1lc3NhZ2UsIHRoaXMpOworICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90
b3R5cGUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhpcyk7CiAKICAgICBwdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051
bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjEx
LjcuNQogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDkgKzMwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5hdGl2ZUVycm9y
UHJvdG90eXBlOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmKTsKIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgVVN0cmlu
ZyYgbmFtZUFuZE1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm90b3R5cGVT
dHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90
b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcjsKIAogICAgIGNsYXNzIE5hdGl2ZUVycm9yUHJvdG90eXBlIDogcHVibGljIEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAg
ICAgTmF0aXZlRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5cGU+KGV4ZWMtPmhlYXAoKSkpIE5hdGl2ZUVycm9y
UHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwg
Y29uc3RydWN0b3IpOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3
IEBAIHN0YXRpYyBKU1ZhbHVlIG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUKIC8vIEVDTUEgMTUu
Ny4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVt
YmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIE51bWJlck9iamVjdCogb2Jq
ZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0
U3RydWN0dXJlKCkpOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0Ojpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGRvdWJs
ZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYykgOiAwOwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRh
KCksIGpzTnVtYmVyKG4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTnVtYmVyUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTnVt
YmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CisgICAgcHJvdGVjdGVk
OgorICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBOdW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgCiAgICAg
cHVibGljOgotICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIE51bWJlclByb3RvdHlwZSopOworICAgICAgICBzdGF0aWMgTnVt
YmVyQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOdW1iZXJQcm90b3R5cGUqIG51bVBy
b3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PE51bWJlckNvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVj
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbnVtUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIEpTVmFsdWUgTnVtYmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiAKIE51bWJlck9iamVjdCog
Y29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBudW1iZXIpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcg
KGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVt
YmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVy
T2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9i
amVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBudW1iZXIpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
TnVtYmVyT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAg
IHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgTnVtYmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTnVtYmVyT2JqZWN0
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE51bWJlck9i
amVjdD4oJmdsb2JhbERhdGEuaGVhcCkpIE51bWJlck9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkocmV2aXNpb24gOTA5MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
TnVtYmVyUHJvdG90eXBlIDogcHVibGljIE51bWJlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAg
IHByb3RlY3RlZDoKICAgICAgICAgTnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1i
ZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyUHJvdG90eXBlPihleGVjLT5oZWFwKCkpKSBO
dW1iZXJQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAg
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gOTA5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmpl
Y3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBPYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRl
cm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBPYmpl
Y3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE9i
amVjdFByb3RvdHlwZSopOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE9iamVjdENvbnN0
cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBlKiBvYmpQcm90b3R5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmplY3RD
b25zdHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIG9ialByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm90b3R5cGUuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIE9i
amVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PE9iamVjdFByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAg
ICBpZiAoZmliZXJDb3VudCA8PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0g
ICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBm
aWJlckNvdW50LCBzMSwgczIpOworICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9w
ZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShy
b3BlQnVpbGRlci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAg
ICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFs
RGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFz
ZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQpAQCAtNzQsMTQgKzc0
LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEg
PSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlmIChmaWJlckNvdW50IDw9IEpTU3Ry
aW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGds
b2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHUxLCBzMik7CisgICAg
ICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1
MSwgczIpOwogCiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJl
ckNvdW50KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnko
KSkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAg
ICAgICByb3BlQnVpbGRlci5hcHBlbmQodTEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQo
czIpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRh
LCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwg
Y29uc3QgVVN0cmluZyYgdTIpCkBAIC05OSwxNCArOTksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAK
ICAgICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFs
RGF0YSwgZmliZXJDb3VudCwgczEsIHUyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHMxLCB1Mik7CiAKICAgICAgICAgSlNTdHJp
bmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5M
SUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkKICAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChz
MSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh1Mik7Ci0gICAgICAgIHJldHVybiBuZXcg
KGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7
CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVy
LnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQpA
QCAtMTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZShnbG9iYWxEYXRhLCB1MSwgdTIpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHUxLCBj
b25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBAIC0xNDIsNyArMTQyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIHUxLCB1MiwgdTMpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9i
YWxEYXRhLCB1MSwgdTIsIHUzKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291
bnQpCkBAIC0xNjAsNyArMTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGZp
YmVyQ291bnQgPT0gMykKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3Ry
aW5nKGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1ZSgpLCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3Ry
aW5nc1syXS5qc1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
ZXhlYywgc3RyaW5nc1swXS5qc1ZhbHVlKCksIHN0cmluZ3NbMV0uanNWYWx1ZSgpLCBzdHJpbmdz
WzJdLmpzVmFsdWUoKSk7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWls
ZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRP
Zk1lbW9yeSgpKSkKQEAgLTE4NSw3ICsxODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aWYgKG92ZXJmbG93KQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihl
eGVjKTsKIAotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxE
YXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNy
ZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhp
c1ZhbHVlKQpAQCAtMjMyLDcgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRl
ci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIC8vIEVDTUEgMTEuOS4zCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUmVn
RXhwTWF0Y2hlc0FycmF5OjpmaWxsQXJyYXlJbnN0YW4KIAogSlNPYmplY3QqIFJlZ0V4cENvbnN0
cnVjdG9yOjphcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG5ldyAoZXhlYykgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGQuZ2V0KCkpOworICAgIHJl
dHVybiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBkLmdldCgpKTsKIH0KIAogSlNW
YWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpIGNvbnN0CkBAIC0zMDQsNyArMzA0LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4
cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAvLyBJZiBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgdGhp
cyBqdXN0IHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IChzZWUgMTUuMTAuMy4xKS4KICAgICAg
ICAgaWYgKGNhbGxBc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9
IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFzT2JqZWN0KGFyZzApKS0+cmVnRXhwKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgICAgICAgICAgcmV0
dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
YXNPYmplY3QoYXJnMCk7CiAgICAgfQpAQCAtMzI1LDcgKzMyNSw3IEBAIEpTT2JqZWN0KiBjb25z
dHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6
Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJl
Z0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVT
eW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFs
T2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICByZXR1cm4gUmVnRXhwT2Jq
ZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9iYWxPYmpl
Y3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBjbGFzcyBSZWdFeHBDb25zdHJ1
Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFJlZ0V4cFByb3RvdHlwZSopOwogICAgIHB1YmxpYzoKLSAgICAgICAgUmVn
RXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHBQcm90b3R5cGUqKTsKKyAgICAgICAgc3RhdGljIFJlZ0V4cENvbnN0cnVjdG9yKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVnRXhwUHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBDb25zdHJ1Y3Rv
cj4oZXhlYy0+aGVhcCgpKSkgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDkwOTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDggKzI1LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsKLSAgICBwdWJsaWM6CisgICAg
cHJvdGVjdGVkOgogICAgICAgICBSZWdFeHBNYXRjaGVzQXJyYXkoRXhlY1N0YXRlKiwgUmVnRXhw
Q29uc3RydWN0b3JQcml2YXRlKik7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdF
eHBNYXRjaGVzQXJyYXkqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFJlZ0V4cENvbnN0cnVjdG9y
UHJpdmF0ZSogY3RvclByaXZhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxSZWdFeHBNYXRjaGVzQXJyYXk+KGV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE1h
dGNoZXNBcnJheShleGVjLCBjdG9yUHJpdmF0ZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVh
bCB+UmVnRXhwTWF0Y2hlc0FycmF5KCk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDkwOTMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEwICsyNywyMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xh
c3MgUmVnRXhwT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CisgICAg
cHJvdGVjdGVkOgorICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBSZWdFeHAqKTsKKwogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9iamVj
dCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0PihleGVjLT5oZWFwKCkp
KSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBSZWdFeHBPYmplY3QqIGNyZWF0ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cE9iamVjdD4oJihnbG9iYWxEYXRhLT5oZWFwKSkp
IFJlZ0V4cE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFz
ZTsKIAotICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9p
ZCBzZXRSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgZC0+cmVn
RXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHJldmlzaW9uIDkwOTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJl
Z0V4cFByb3RvdHlwZSA6IHB1YmxpYyBSZWdFeHBPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUmVnRXhwUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBQcm90
b3R5cGU+KGV4ZWMtPmhlYXAoKSkpIFJlZ0V4cFByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5oCShyZXZp
c2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBTbG90VmlzaXRvcjsKICAgICAKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZSA6IHB1Ymxp
YyBKU0NlbGwgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFNjb3BlQ2hh
aW5Ob2RlKFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBn
bG9iYWxUaGlzKQogICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PnNjb3BlQ2hhaW5Ob2RlU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBnbG9iYWxEYXRh
KGdsb2JhbERhdGEpCkBAIC00Nyw2ICs0NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTY29wZUNoYWlu
Tm9kZT4oZXhlYy0+aGVhcCgpKSkgU2NvcGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxE
YXRhLCBnbG9iYWxPYmplY3QsIGdsb2JhbFRoaXMpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBTY29wZUNoYWluTm9kZSogY3JlYXRlKFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2NvcGVDaGFpbk5vZGU+KCZnbG9iYWxEYXRhLT5oZWFwKSkg
U2NvcGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGds
b2JhbFRoaXMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGE7CiAgICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbmV4dDsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBvYmplY3Q7CkBAIC03Niw3ICs4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFpbk5vZGU6
OnB1c2goSlNPYmplY3QqIG8pCiAgICAgewogICAgICAgICBBU1NFUlQobyk7Ci0gICAgICAgIHJl
dHVybiBuZXcgKGdsb2JhbERhdGEpIFNjb3BlQ2hhaW5Ob2RlKHRoaXMsIG8sIGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdC5nZXQoKSwgZ2xvYmFsVGhpcy5nZXQoKSk7CisgICAgICAgIHJldHVybiBT
Y29wZUNoYWluTm9kZTo6Y3JlYXRlKHRoaXMsIG8sIGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdC5n
ZXQoKSwgZ2xvYmFsVGhpcy5nZXQoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIFNjb3BlQ2hhaW5O
b2RlKiBTY29wZUNoYWluTm9kZTo6cG9wKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgU21hbGxTdHJpbmdzOjpjb3VudCgpIGNvbnN0CiB2
b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewogICAgIEFTU0VSVCghbV9lbXB0eVN0cmluZyk7Ci0gICAgbV9lbXB0eVN0cmluZyA9
IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgIiIsIEpTU3RyaW5nOjpIYXNP
dGhlck93bmVyKTsKKyAgICBtX2VtcHR5U3RyaW5nID0gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxE
YXRhLCAiIiwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOwogfQogCiB2b2lkIFNtYWxsU3RyaW5n
czo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
dW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTbWFsbFN0
cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlcgogICAgIGlmICghbV9zdG9yYWdlKQogICAgICAg
ICBtX3N0b3JhZ2UgPSBhZG9wdFB0cihuZXcgU21hbGxTdHJpbmdzU3RvcmFnZSk7CiAgICAgQVNT
RVJUKCFtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSk7Ci0gICAgbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0gPSBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGds
b2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVy
KSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKTsKKyAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmlu
Z3NbY2hhcmFjdGVyXSA9IEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPihtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090aGVy
T3duZXIpOwogfQogCiBTdHJpbmdJbXBsKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0
cmluZ1JlcCh1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw4ICs4Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChleGVj
KSBTdHJpbmdPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUo
KSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0
cmluZ09iamVjdFN0cnVjdHVyZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJp
bmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RU
eXBlIFN0cmluZ0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlOwog
CiAgICAgY2xhc3MgU3RyaW5nQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqKTsK
KyAgICAgICAgCiAgICAgcHVibGljOgotICAgICAgICBTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFN0cmluZ1Byb3RvdHlwZSopOworICAg
ICAgICBzdGF0aWMgU3RyaW5nQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5n
UHJvdG90eXBlKiBzdHJQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdDb25zdHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgU3RyaW5n
Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHN0clByb3RvdHlwZSk7
CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJl
dmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywyMSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBTdHJpbmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAg
ICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKik7CiAgICAgICAgIFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBjb25zdCBVU3RyaW5nJik7Ci0KKyAgICAgICAgICAgICAgICAKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8U3RyaW5nT2JqZWN0PihleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYywg
c3RydWN0dXJlKTsgIAorICAgICAgICB9CisgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5n
JiBzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxT
dHJpbmdPYmplY3Q+KGV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUs
IHN0cik7ICAKKyAgICAgICAgfQogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUo
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOworICAgICAgICAKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgc3RhdGljIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKGV4ZWMsCisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ+KGV4ZWMtPmhlYXAoKSkpIFN0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGV4ZWMsCiAgICAgICAgICAgICAgICAgY3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5zdHJpbmdQcm90b3R5cGUoKSksIHN0cmluZyk7CiAgICAgICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJKHJldmlz
aW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIFN0cmluZ1Byb3RvdHlwZSA6
IHB1YmxpYyBTdHJpbmdPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIFN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgU3RyaW5nUHJvdG90eXBlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0YS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIHByb3RvdHlw
ZSwgdHlwZUluZm8sIGFub255bW91c1Nsb3RDb3VudCwgY2xhc3NJbmZvKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KCZnbG9iYWxEYXRhLmhlYXApKSBT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3VzU2xvdENv
dW50LCBjbGFzc0luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0
YXRpc3RpY3MoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVyZVN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJl
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVj
dHVyZT4oJmdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKQEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxE
YXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFs
RGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPigmZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0
dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHR5cGVkZWYgZW51bSB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKICAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBoZWFkKSB7IHJldHVybiBuZXcgKCZnbG9iYWxEYXRh
KSBTdHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3Ry
dWN0dXJlLmdldCgpLCBoZWFkKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkgeyByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hhaW4+KCZnbG9iYWxEYXRhLmhlYXApKSBTdHJ1
Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3RydWN0dXJl
LmdldCgpLCBoZWFkKTsgfQogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaGVhZCgp
IHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MDk2NykKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEx
LTA3LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2CisgICAgICAg
IFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3RhdGlj
IGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJlZmFjdG9y
aW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YgCisgICAgICAgIG9wZXJhdG9yIG5ldyBv
dmVybG9hZGluZyBpbiBvcmRlciB0byBhbGxvY2F0ZSBHQyBvYmplY3RzIGFuZCB0byByZXBsYWNl
IAorICAgICAgICB0aGlzIG1ldGhvZCB3aXRoIHN0YXRpYyBjcmVhdGUgbWV0aG9kcyBmb3IgZWFj
aCBpbmRpdmlkdWFsIHR5cGUgb2YgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICAgSlMgb2JqZWN0LiAg
VGhpcyBwYXJ0aWN1bGFyIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCByZXBsYWNpbmcgdXNlcyBvZiAK
KyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNoZXMg
d2lsbCByZW1vdmUgaXQgZnJvbSB0aGUgCisgICAgICAgIHBhcnRzIHRoYXQgaW50ZXJmYWNlIHdp
dGggdGhlIERPTS4gIER1ZSB0byB0aGUgRE9NJ3MgY29udGludWVkIGRlcGVuZGVuY2UKKyAgICAg
ICAgb24gaXQsIG9wZXJhdG9yIG5ldyBoYXMgbm90IGFjdHVhbGx5IGJlZW4gcmVtb3ZlZCBmcm9t
IEpTQ2VsbC4KKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudCAob2xpdmVyQGFwcGxl
LmNvbSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNEYXRlT3JOdWxs
KToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0
aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRp
Y0ZvcndhcmRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3Rh
dGljR29GdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0
aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5j
dGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQXNzaWduRnVu
Y3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFs
KToKKwogMjAxMS0wNy0xMyAgTWlobmVhIE92aWRlbmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAog
ICAgICAgICBbQ1NTUmVnaW9uc10gUGFyc2UgLXdlYmtpdC1jb250ZW50LW9yZGVyIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIEpTVmFsdWUganNEYXRlT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgZG8KIHsKICAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIERhdGVJbnN0YW5j
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFs
dWUpOworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwogfQogCiBkb3VibGUgdmFs
dWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQpAQCAtMzA3LDcgKzMwNyw3
IEBAIEZyYW1lKiB0b0R5bmFtaWNGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgb2Jq
ZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVj
dFByb3RvRnVuY1RvU3RyaW5nKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1Rv
U3RyaW5nKTsKIH0KIAogU3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIEpTRE9N
V2luZG93Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpCiB0ZW1wbGF0ZTxOYXRpdmVGdW5jdGlvbiBu
YXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4KIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1
bmN0aW9uU3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7
CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIG5hdGl2ZUZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIEpT
VmFsdWUgY2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxNyArNDAsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSlNW
YWx1ZSBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3Bl
cnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKKyAgICByZXR1cm4gSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
IG5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVy
dHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOworICAgIHJldHVybiBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5
TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKTsKIH0KIAogc3RhdGljIEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVy
dHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKKyAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pOwogfQogCiBib29sIEpTSGlzdG9yeTo6Z2V0
T3duUHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA5MDkzMykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7Cisg
ICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsKIH0K
IAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2Fk
KTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7
CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFz
c2lnbik7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3Np
Z24pOwogfQogCiBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4Niw3ICsxMDg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBkOwogICAg
ICAgICAgICAgaWYgKCFyZWFkKGQpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIERhdGVJbnN0YW5jZShtX2V4ZWMsIG1f
Z2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQpOworICAgICAgICAgICAgcmV0dXJuIERh
dGVJbnN0YW5jZTo6Y3JlYXRlKG1fZXhlYywgbV9nbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUo
KSwgZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWxlVGFnOiB7CiAgICAgICAgICAgICBS
ZWZQdHI8RmlsZT4gZmlsZTsKQEAgLTExNjcsNyArMTE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBSZWdFeHBGbGFncyByZUZsYWdzID0gcmVnRXhwRmxhZ3MoZmxhZ3MtPnVzdHJpbmcoKSk7
CiAgICAgICAgICAgICBBU1NFUlQocmVGbGFncyAhPSBJbnZhbGlkRmxhZ3MpOwogICAgICAgICAg
ICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmbV9leGVjLT5nbG9iYWxEYXRhKCks
IHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICht
X2V4ZWMpIFJlZ0V4cE9iamVjdChtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9nbG9i
YWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKKyAgICAgICAgICAgIHJldHVy
biBSZWdFeHBPYmplY3Q6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7IAogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100755</attachid>
            <date>2011-07-13 19:14:06 -0700</date>
            <delta_ts>2011-07-14 13:56:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110713191405.patch</filename>
            <type>text/plain</type>
            <size>141312</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE4IEBA
CisyMDExLTA3LTEzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YgCisgICAgICAgIG9wZXJhdG9y
IG5ldyBvdmVybG9hZGluZyBpbiBvcmRlciB0byBhbGxvY2F0ZSBHQyBvYmplY3RzIGFuZCB0byBy
ZXBsYWNlIAorICAgICAgICB0aGlzIG1ldGhvZCB3aXRoIHN0YXRpYyBjcmVhdGUgbWV0aG9kcyBm
b3IgZWFjaCBpbmRpdmlkdWFsIHR5cGUgb2YgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICAgSlMgb2Jq
ZWN0LiAgVGhpcyBwYXJ0aWN1bGFyIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCByZXBsYWNpbmcgdXNl
cyBvZiAKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBh
dGNoZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUgCisgICAgICAgIHBhcnRzIHRoYXQgaW50ZXJm
YWNlIHdpdGggdGhlIERPTS4gIER1ZSB0byB0aGUgRE9NJ3MgY29udGludWVkIGRlcGVuZGVuY2UK
KyAgICAgICAgb24gaXQsIG9wZXJhdG9yIG5ldyBoYXMgbm90IGFjdHVhbGx5IGJlZW4gcmVtb3Zl
ZCBmcm9tIEpTQ2VsbC4KKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudCAob2xpdmVy
QGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAo
SlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0Nh
bGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAg
ICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAgICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlw
ZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2Jq
ZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2JqZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1h
a2VGdW5jdGlvbldpdGhDYWxsYmFjayk6CisgICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rv
cik6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBp
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3Vt
ZW50cyk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAg
ICAgIChmdW5jdGlvblJ1bik6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1l
L0FyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNT
cGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpT
Qzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpj
b25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9E
YXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlND
OjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNl
OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAg
KEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24pOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6
RXhlY3V0YWJsZUJhc2UpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rp
b25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAg
IChKU0M6OkdldHRlclNldHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFs
dWVXcmFwcGVyLmg6CisgICAgICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpqc0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRl
cik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNB
Y3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmluaXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1w
dHlBcnJheSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50
aW1lL0pTTm90QW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6SlNOb3RB
bk9iamVjdCk6CisgICAgICAgIChKU0M6OkpTTm90QW5PYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9KU09OT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT05PYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpkZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lU2V0dGVy
KToKKyAgICAgICAgKEpTQzo6cHV0RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjpzdWJzdHJpbmdGcm9tUm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpyZXBs
YWNlQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTQzo6Um9wZUJ1aWxkZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OmpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcpOgorICAgICAgICAoSlNDOjpqc05vbnRy
aXZpYWxTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgIChKU0M6Ompz
U3Vic3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNPd25lZFN0cmluZyk6CisgICAgICAgICogcnVu
dGltZS9KU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9PYmplY3RTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN5bnRoZXNpemVPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0xv
b2t1cC5jcHA6CisgICAgICAgIChKU0M6OnNldFVwU3RhdGljRnVuY3Rpb25TbG90KToKKyAgICAg
ICAgKiBydW50aW1lL01hdGhPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6TWF0aE9iamVjdDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L05hdGl2ZUVycm9yUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yUHJvdG90
eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3ROdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2Jq
ZWN0Lmg6CisgICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpOdW1iZXJQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL09i
amVjdFByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpPYmplY3RQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3RyaW5n
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKToKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0UmVnRXhwKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmg6Cisg
ICAgICAgIChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJh
eTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAo
SlNDOjpSZWdFeHBPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90
b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvU2NvcGVDaGFpbi5oOgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6
U2NvcGVDaGFpbk5vZGUpOgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6U2NvcGVDaGFpbk5vZGU6OnB1c2gpOgorICAgICAgICAqIHJ1bnRpbWUv
U21hbGxTdHJpbmdzLmNwcDoKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0
eVN0cmluZyk6CisgICAgICAgIChKU0M6OlNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVj
dG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OlN0cmluZ09iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmg6CisgICAgICAgIChKU0M6OlN0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUNoYWluLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUNoYWluOjpjcmVhdGUpOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0
SlNHbG9iYWxPYmplY3QzcHV0RVBOU185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0
aW5pdEVQTlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9f
Wk4zSlNDMTRKU0dsb2JhbE9iamVjdEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1Q
TlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRU
aHJlYWRFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBs
aW5nVGhyZWFkNXN0YXJ0RWoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA5MDkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDMsOCArMTQzLDE0IEBAIGxvbmcgU3RvcFdhdGNoOjpnZXRFbGFwc2VkTVMoKQogfQogCiBjbGFz
cyBHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgewotcHVibGljOgorcHJvdGVj
dGVkOgogICAgIEdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBW
ZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cyk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgR2xvYmFs
T2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8R2xvYmFsT2JqZWN0PigmKGdsb2JhbERhdGEuaGVhcCkp
KSBHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBhcmd1bWVudHMpOworICAgIH0K
ICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gImdsb2JhbCI7
IH0KIH07CiBDT01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEdsb2JhbE9iamVjdD46OnZhbHVlLCBX
VEZfSXNJbnRlZ2VyX0dsb2JhbE9iamVjdF9mYWxzZSk7CkBAIC0xNTMsMjIgKzE1OSwyMiBAQCBB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEdsb2JhbE9iamVjdCk7CiBHbG9iYWxPYmplY3Q6Okds
b2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cykKICAgICA6IEpTR2xvYmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJkZWJ1ZyIp
LCBmdW5jdGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBu
ZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9u
U3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicHJpbnQiKSwgZnVuY3Rp
b25QcmludCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9i
YWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVy
ZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVuY3Rpb25RdWl0KSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkg
SlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElk
ZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwg
dGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJk
ZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInByaW50IiksIGZ1bmN0aW9uUHJp
bnQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2Mi
KSwgZnVuY3Rpb25HQykpOwogI2lmbmRlZiBOREVCVUcKLSAgICBwdXREaXJlY3RGdW5jdGlvbihn
bG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwg
dGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIpLCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5
KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVh
dGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9uUmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkpKTsKICNlbmRpZgotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlz
LCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNp
b24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1
bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicnVuIiksIGZ1
bmN0aW9uUnVuKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQp
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygp
KSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
SWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5jdGlvbkNoZWNrU3lu
dGF4KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4
ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGlu
ZSkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQp
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0
ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAiY2hlY2tTeW50YXgiKSwgZnVuY3Rpb25DaGVja1N5bnRheCkpOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJyZWFkbGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CiAKICNpZiBFTkFCTEUoU0FN
UExJTkdfRkxBR1MpCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAic2V0U2FtcGxpbmdGbGFncyIpLCBm
dW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNh
bXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
c2V0U2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVj
KCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygp
LCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKSk7CiAj
ZW5kaWYKIAogICAgIEpTT2JqZWN0KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFs
RXhlYygpKTsKQEAgLTIyNyw3ICsyMzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGZ1bmN0aW9uUnVuCiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKTsKIAotICAg
IEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3ICgmZXhlYy0+Z2xvYmFsRGF0YSgpKSBH
bG9iYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFVTdHJpbmc+KCkpOwor
ICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFVTdHJpbmc+KCkpOwogCiAgICAgU3RvcFdhdGNo
IHN0b3BXYXRjaDsKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsKQEAgLTU1Miw3ICs1NTgsNyBAQCBp
bnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YsIEpTR2xvCiAgICAgT3B0aW9ucyBvcHRp
b25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdsb2JhbERhdGEp
OwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEpIEds
b2JhbE9iamVjdCgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmds
b2JhbERhdGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOworICAgIEdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUoKmdsb2JhbERhdGEsIEdsb2Jh
bE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSksIG9wdGlvbnMu
YXJndW1lbnRzKTsKICAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2NyaXB0cyhnbG9iYWxPYmpl
Y3QsIG9wdGlvbnMuc2NyaXB0cywgb3B0aW9ucy5kdW1wKTsKICAgICBpZiAob3B0aW9ucy5pbnRl
cmFjdGl2ZSAmJiBzdWNjZXNzKQogICAgICAgICBydW5JbnRlcmFjdGl2ZShnbG9iYWxPYmplY3Qp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDE0IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDYWxsYmFja0NvbnN0cnVjdG9yIDogcHVibGlj
IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlND
YWxsYmFja0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNDbGFzc1Jl
ZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBj
bGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKSAKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrQ29uc3RydWN0
b3I+KGV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCB+
SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0
IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6
Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0
Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rp
b24+KGV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGNhbGxiYWNrLCBuYW1lKTsKKyAgICB9CisKICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKICAgICAKICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gtbWFzaGVzIGNvbnN0cnVj
dG9yIGFuZCBmdW5jdGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2aXNpb24gOTA5MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE2LDkgKzExNiwyMSBAQCBzdHJ1Y3QgSlNDYWxsYmFja09iamVjdERhdGEgOiBX
ZWFrSGFuZGxlCiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNsYXNzIEpTQ2FsbGJhY2tP
YmplY3QgOiBwdWJsaWMgQmFzZSB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFj
a09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTQ2xhc3NS
ZWYsIHZvaWQqIGRhdGEpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNHbG9iYWxEYXRhJiwgSlND
bGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgLy8gcHNldWRvLXBsYWNlbWVudCB2ZXJzaW9uIG9m
IG9wZXJhdG9yIG5ldworICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHB0cikg
eyByZXR1cm4gcHRyOyB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYgY2xhc3NSZWYsIHZvaWQqIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZXhl
Yy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCog
Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8SlNDYWxsYmFja09iamVjdD4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpTQ2FsbGJhY2tPYmpl
Y3QoKmdsb2JhbERhdGEsIGNsYXNzUmVmLCBzdHJ1Y3R1cmUpOworICAgIH0KIAogICAgIHZvaWQg
c2V0UHJpdmF0ZSh2b2lkKiBkYXRhKTsKICAgICB2b2lkKiBnZXRQcml2YXRlKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3
IEBAIEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxCYXNlPjo6c3RhdGljRnUKICAgICAgICAgICAg
IGlmIChTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IHN0YXRpY0Z1bmN0aW9ucy0+Z2V0KHBy
b3BlcnR5TmFtZS5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEpTT2JqZWN0Q2FsbEFz
RnVuY3Rpb25DYWxsYmFjayBjYWxsQXNGdW5jdGlvbiA9IGVudHJ5LT5jYWxsQXNGdW5jdGlvbikg
ewogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8g
PSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlz
T2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogbyA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdldEFub255bW91c1ZhbHVlKDAp
KSwgY2FsbEFzRnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHRo
aXNPYmotPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgbywgZW50
cnktPmF0dHJpYnV0ZXMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVm
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIEpTT2JqZWN0KiBPcGFxdWVK
U0NsYXNzOjpwcm90b3R5cGUoRXhlY1MKIAogICAgIGlmICghanNDbGFzc0RhdGEuY2FjaGVkUHJv
dG90eXBlKSB7CiAgICAgICAgIC8vIFJlY3Vyc2l2ZSwgYnV0IHNob3VsZCBiZSBnb29kIGVub3Vn
aCBmb3Igb3VyIHB1cnBvc2VzCi0gICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmpl
Y3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJv
dG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhl
IG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24g
ZGVzdHJ1Y3Rpb24KKyAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
Pjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFz
cywgJmpzQ2xhc3NEYXRhKSwgMCk7IC8vIHNldCBqc0NsYXNzRGF0YSBhcyB0aGUgb2JqZWN0J3Mg
cHJpdmF0ZSBkYXRhLCBzbyBpdCBjYW4gY2xlYXIgb3VyIHJlZmVyZW5jZSBvbiBkZXN0cnVjdGlv
bgogICAgICAgICBpZiAocGFyZW50Q2xhc3MpIHsKICAgICAgICAgICAgIGlmIChKU09iamVjdCog
cHJvdG90eXBlID0gcGFyZW50Q2xhc3MtPnByb3RvdHlwZShleGVjKSkKICAgICAgICAgICAgICAg
ICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUtPnNldFByb3RvdHlwZShleGVjLT5nbG9iYWxE
YXRhKCksIHByb3RvdHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29u
dGV4dFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBKU0ds
b2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRlCiAgICAgICAgIHJldHVybiBKU0ds
b2JhbENvbnRleHRSZXRhaW4odG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkp
KTsKICAgICB9CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChnbG9i
YWxEYXRhLmdldCgpKSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0PigqZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+Ojpj
cmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IEpTQ2FsbGJhY2tPYmplY3Q8SlNHbG9iYWxPYmplY3Q+OjpjcmVh
dGUoZ2xvYmFsRGF0YS5nZXQoKSwgZ2xvYmFsT2JqZWN0Q2xhc3MsIEpTQ2FsbGJhY2tPYmplY3Q8
SlNHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSBnbG9iYWxPYmplY3RDbGFzcy0+cHJvdG90eXBlKGV4ZWMpOwog
ICAgIGlmICghcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09i
amVjdFJlZi5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU09iamVjdFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlKEpTQ29udGV4dFJlZiBjdAogICAgIGlmICghanNDbGFzcykKICAg
ICAgICAgcmV0dXJuIHRvUmVmKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpKTsKIAotICAgIEpT
Q2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Piogb2JqZWN0ID0gbmV3IChl
eGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNh
bGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOworICAgIEpTQ2FsbGJhY2tP
YmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Piogb2JqZWN0ID0gSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0
U3RydWN0dXJlKCksIGpzQ2xhc3MsIGRhdGEpOwogICAgIGlmIChKU09iamVjdCogcHJvdG90eXBl
ID0ganNDbGFzcy0+cHJvdG90eXBlKGV4ZWMpKQogICAgICAgICBvYmplY3QtPnNldFByb3RvdHlw
ZShleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZSk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgSlNP
YmplY3RSZWYgSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbAogCiAgICAgSWRlbnRpZmllciBu
YW1lSUQgPSBuYW1lID8gbmFtZS0+aWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpKSA6IElk
ZW50aWZpZXIoZXhlYywgImFub255bW91cyIpOwogICAgIAotICAgIHJldHVybiB0b1JlZihuZXcg
KGV4ZWMpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lSUQpKTsKKyAgICByZXR1cm4gdG9SZWYoSlNDYWxsYmFj
a0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxs
QXNGdW5jdGlvbiwgbmFtZUlEKSk7CiB9CiAKIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0
cnVjdG9yKEpTQ29udGV4dFJlZiBjdHgsIEpTQ2xhc3NSZWYganNDbGFzcywgSlNPYmplY3RDYWxs
QXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxBc0NvbnN0cnVjdG9yKQpAQCAtMTA3LDcgKzEwNyw3
IEBAIEpTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUNvbnN0cnVjdG9yKEpTQ28KICAgICBpZiAoIWpz
UHJvdG90eXBlKQogICAgICAgICBqc1Byb3RvdHlwZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCk7CiAKLSAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBKU0NhbGxiYWNrQ29uc3RydWN0b3IoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrQ29u
c3RydWN0b3JTdHJ1Y3R1cmUoKSwganNDbGFzcywgY2FsbEFzQ29uc3RydWN0b3IpOworICAgIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBKU0NhbGxiYWNrQ29uc3RydWN0b3I6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBj
YWxsQXNDb25zdHJ1Y3Rvcik7CiAgICAgY29uc3RydWN0b3ItPnB1dERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGpzUHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgcmV0dXJuIHRvUmVmKGNvbnN0
cnVjdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM1LDcgKzE3MzUsNyBAQCB2
b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhCiAgICAgQVNTRVJUKGNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlKTsKICAgICBBU1NFUlQobmVlZHNGdWxsU2NvcGVDaGFpbigp
KTsKICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIo
KSkuanNWYWx1ZSgpKTsKLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGNhbGxG
cmFtZSkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBKU0FjdGl2YXRpb246OmNyZWF0ZSgmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKSwgY2FsbEZy
YW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkp
OwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhY3RpdmF0aW9uUmVnaXN0ZXIoKSkgPSBKU1Zh
bHVlKGFjdGl2YXRpb24pOwogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICAgICAgRnVuY3Rp
b25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOwogICAgICAgICBnbG9iYWxP
YmplY3QtPnJlbW92ZURpcmVjdCgqbV9nbG9iYWxEYXRhLCBmdW5jdGlvbi0+aWRlbnQoKSk7IC8v
IE5ld2x5IGRlY2xhcmVkIGZ1bmN0aW9ucyBvdmVyd3JpdGUgZXhpc3RpbmcgcHJvcGVydGllcy4K
IAotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIG1h
a2VGdW5jdGlvbihleGVjLCBmdW5jdGlvbiksIHNjb3BlQ2hhaW4pOworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIG1ha2VGdW5jdGlvbihleGVjLCBmdW5j
dGlvbiksIHNjb3BlQ2hhaW4pOwogICAgICAgICBpbnQgaW5kZXggPSBhZGRHbG9iYWxWYXIoZnVu
Y3Rpb24tPmlkZW50KCksIGZhbHNlKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0
KGluZGV4KS5zZXQoKm1fZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzAsNyArMTYzMCw3IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlU3ludGF4RXJyb3IoY2FsbEZyYW1lLCAiSW52YWxpZCBmbGFn
cyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIik7CiAgICAgICAgICAgICBnb3RvIHZt
X3Rocm93OwogICAgICAgICB9Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
SlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIFJlZ0V4cE9iamVjdChjYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVn
RXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
ZHN0KSA9IEpTVmFsdWUoUmVnRXhwT2JqZWN0OjpjcmVhdGUoZ2xvYmFsRGF0YSwgY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxP
YmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApKTsKIAogICAgICAgICB2UEMgKz0gT1BD
T0RFX0xFTkdUSChvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpA
QCAtMzM2NSw3ICszMzY1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgICAgIE5F
WFRfSU5TVFJVQ1RJT04oKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWFyZ3VtZW50cykgewot
ICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3Vt
ZW50cyhjYWxsRnJhbWUpOworICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1
bWVudHM6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUpOwogICAgICAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9IEpTVmFsdWUoYXJndW1lbnRzKTsK
ICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSA9IEpTVmFsdWUoYXJndW1lbnRzKTsKICAgICAgICAg
fQpAQCAtNDQ5Nyw3ICs0NDk3LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKIAogICAgICAgICBp
bnQgYWN0aXZhdGlvblJlZyA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIGlmICghY2FsbEZy
YW1lLT5yKGFjdGl2YXRpb25SZWcpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAgSlNBY3RpdmF0
aW9uKiBhY3RpdmF0aW9uID0gbmV3IChnbG9iYWxEYXRhKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpKSk7CisgICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2
YXRpb246OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAg
ICAgICAgICBjYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCkt
PnB1c2goYWN0aXZhdGlvbikpOwogICAgICAgICB9CkBAIC00NjA3LDcgKzQ2MDcsNyBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKIAog
ICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihkc3QpLmpzVmFsdWUoKSkgewotICAgICAgICAgICAg
QXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGdsb2JhbERhdGEpIEFyZ3VtZW50cyhjYWxsRnJh
bWUpOworICAgICAgICAgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0
ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGRzdCkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGRzdCkpID0gSlNWYWx1ZShhcmd1
bWVudHMpOwogICAgICAgICB9CkBAIC01MDY5LDEzICs1MDY5LDEzIEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OnJldHJpZXZlQXJndW1lbnRzKEMKICAgICAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdp
c3RlciA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAg
ICAgICAgIGlmIChKU1ZhbHVlIGFyZ3VtZW50cyA9IGZ1bmN0aW9uQ2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKS5qc1ZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm4gYXJn
dW1lbnRzOwotICAgICAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUobmV3IChjYWxsRnJh
bWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSkpOworICAgICAgICBKU1ZhbHVlIGFyZ3Vt
ZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoJihjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSksIGZ1bmN0aW9uQ2FsbEZyYW1lKSk7CiAgICAgICAgIGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKGFy
Z3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICAgICAgZnVuY3Rpb25DYWxsRnJhbWUt
PnIocmVhbEFyZ3VtZW50c1JlZ2lzdGVyKSA9IGFyZ3VtZW50czsKICAgICAgICAgcmV0dXJuIGFy
Z3VtZW50czsKICAgICB9CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZnVuY3Rp
b25DYWxsRnJhbWUpIEFyZ3VtZW50cyhmdW5jdGlvbkNhbGxGcmFtZSk7CisgICAgQXJndW1lbnRz
KiBhcmd1bWVudHMgPSBBcmd1bWVudHM6OmNyZWF0ZSgmKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCkpLCBmdW5jdGlvbkNhbGxGcmFtZSk7CiAgICAgYXJndW1lbnRzLT5jb3B5UmVnaXN0
ZXJzKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogICAgIHJldHVybiBhcmd1bWVu
dHM7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA2Miw3ICsyMDYyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNP
YmplY3QqLCBvcF9wdXNoXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKIAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoc3RhY2tGcmFtZS5nbG9i
YWxEYXRhKSBKU0FjdGl2YXRpb24oc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCkpKTsKKyAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBKU0FjdGl2
YXRpb246OmNyZWF0ZSgmKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpLCBzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgIHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5z
Y29wZUNoYWluKCktPnB1c2goYWN0aXZhdGlvbikpOwogICAgIHJldHVybiBhY3RpdmF0aW9uOwog
fQpAQCAtMjExMCw3ICsyMTEwLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEFyZ3Vt
ZW50cyhzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBB
cmd1bWVudHM6OmNyZWF0ZShzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZy
YW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9
CiAKQEAgLTIxMTgsNyArMjExOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBBcmd1
bWVudHMoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsKKyAg
ICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9CiAKQEAg
LTMxMjgsNyArMzEyOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3
X3IKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG5l
dyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qoc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJl
Z0V4cE9iamVjdDo6Y3JlYXRlKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiB9CiAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9iaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwxNCArNTksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBBcmd1bWVudHMg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIE5v
UGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBBcmd1bWVudHMqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8QXJndW1lbnRzPigmKGdsb2JhbERhdGEtPmhlYXApKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBOb1BhcmFtZXRl
cnNUeXBlIG5vUGFyYW1zKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8QXJndW1lbnRzPigmKGdsb2JhbERhdGEtPmhlYXApKSkgQXJndW1lbnRzKGNhbGxG
cmFtZSwgbm9QYXJhbXMpOworICAgICAgICB9CisKICAgICAgICAgLy8gVXNlIGFuIGVudW0gYmVj
YXVzZSBvdGhlcndpc2UgZ2NjIGluc2lzdHMgb24gZG9pbmcgYSBtZW1vcnkKICAgICAgICAgLy8g
cmVhZC4KICAgICAgICAgZW51bSB7IE1heEFyZ3VtZW50cyA9IDB4MTAwMDAgfTsKLQotICAgICAg
ICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQorICAgIAorICAgIHBy
b3RlY3RlZDoKICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSopOwogICAgICAgICBBcmd1bWVu
dHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0ZXJzVHlwZSk7CisKKyAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkFyZ3VtZW50cygpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEx
ICs3OSwxMSBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpCiAgICAg
ICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICBpZiAo
biAhPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBz
bWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
biwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJy
YXkgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIGluIGl0Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgYXJncyk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBBcnJheVByb3Rv
dHlwZTsKIAogICAgIGNsYXNzIEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgQXJyYXlDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEFycmF5UHJvdG90
eXBlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEFycmF5Q29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBBcnJheVByb3RvdHlwZSogYXJyUHJvdG90eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8QXJyYXlDb25z
dHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgYXJyUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGRlbGV0ZURvdWJsZSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogcmVzT2JqID0gbmV3IChleGVj
KSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3JlYXRlQ29tcGFjdCk7CisgICAgSlNB
cnJheSogcmVzT2JqID0gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3Jl
YXRlQ29tcGFjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFycmF5UHJv
dG90eXBlIDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIGV4cGxpY2l0IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxBcnJheVByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiAvLyBFQ01BIDE1LjYu
MgogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVh
bk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJv
b2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5i
b29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkpOwog
ICAgIHJldHVybiBvYmo7CiB9CkBAIC03MSw3ICs3MSw3IEBAIENhbGxUeXBlIEJvb2xlYW5Db25z
dHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEKIAogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1t
ZWRpYXRlQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgaW1tZWRpYXRlQm9vbGVhblZhbHVlKQogewotICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2Jh
bE9iamVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBv
YmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKICAgICByZXR1cm4g
b2JqOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGU7CiAK
ICAgICBjbGFzcyBCb29sZWFuQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Qm9vbGVh
bkNvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJvb2xQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShD
b25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdCA6IHB1YmxpYyBK
U1dyYXBwZXJPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4
cGxpY2l0IEJvb2xlYW5PYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5PYmplY3Q+KCZnbG9iYWxEYXRhLmhl
YXApKSBCb29sZWFuT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAK
ICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
Qm9vbGVhblByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJvdGVjdGVkOgogICAgICAgICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBC
b29sZWFuUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5Qcm90b3R5cGU+KGV4ZWMtPmhlYXAo
KSkpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
IAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUo
RXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyAoZXhl
YykgRGF0ZUluc3RhbmNlKGV4ZWMsIGdsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1
ZSk7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+
ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9CiAgICAgCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBEYXRlUHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZUNv
bnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0
ZVByb3RvdHlwZSogZGF0ZVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPERhdGVDb25zdHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkgRGF0ZUNv
bnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBkYXRlUHJvdG90eXBlKTsK
KyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2
aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDIwIEBAIG5hbWVzcGFjZSBXVEYgewog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFw
cGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBEYXRlSW5z
dGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgZG91YmxlKTsKICAgICAgICAgZXhwbGljaXQg
RGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotCisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGRvdWJsZSBkYXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPihleGVjLT5oZWFwKCkp
KSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlLCBkYXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPERhdGVJbnN0YW5jZT4oZXhlYy0+aGVhcCgpKSkgRGF0ZUluc3RhbmNlKGV4ZWMsIHN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGRvdWJsZSBpbnRlcm5hbE51bWJl
cigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsVmFsdWUoKS51bmNoZWNrZWRHZXROdW1iZXIoKTsg
fQogCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5o
CShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZVByb3RvdHlw
ZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIERhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8RGF0ZVByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgRGF0ZVByb3RvdHlwZShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiA5MDkz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY2LDEyICsxNjYsMTggQEAgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhl
Y1N0YXRlKiBleAogfQogCiBjbGFzcyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24gOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgU3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiAg
ICAgICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllcikKICAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKICAgICB7CiAgICAgfQorCitw
dWJsaWM6CisgICAgc3RhdGljIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPihleGVjLT5oZWFw
KCkpKSBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIG1lc3NhZ2UpOworICAgIH0KICAgICAKICAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgewpAQCAtMjA1LDcgKzIxMSw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaWN0
TW9kZVR5cGUKIAogSlNWYWx1ZSBjcmVhdGVUeXBlRXJyb3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgU3Ry
aWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+aW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksOSArMjksMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXJyb3JQcm90b3R5cGU7
CiAKICAgICBjbGFzcyBFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
ewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEVycm9yQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBFcnJvclByb3RvdHlwZSop
OwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1Y3RvciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEVycm9yUHJvdG90eXBlKiBlcnJQcm90b3R5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckNvbnN0cnVjdG9yPihleGVj
LT5oZWFwKCkpKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBlcnJQcm90b3R5cGUpOworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEm
KTsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBFcnJvckluc3Rh
bmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0CiAKIEVycm9ySW5zdGFuY2UqIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEVycm9ySW5zdGFuY2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKKyAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oJmdsb2JhbERhdGEtPmhlYXAp
KSBFcnJvckluc3RhbmNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbWVzc2FnZSk7CiB9CiAKIEVy
cm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiB7CiAgICAgaWYgKG1lc3NhZ2UuaXNV
bmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEVycm9y
SW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5n
KGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+
KGV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oZXhlYy0+
aGVhcCgpKSkgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1l
c3NhZ2UudG9TdHJpbmcoZXhlYykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNp
b24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZSA6IHB1
YmxpYyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAg
ICBFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8RXJyb3JQcm90b3R5cGU+KGV4ZWMtPmhlYXAoKSkpIEVycm9yUHJvdG90eXBlKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5
cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQy
LDE4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJv
ciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAg
ICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yPigmKGdsb2JhbERhdGEtPmhlYXApKSkgSW50ZXJydXB0
ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIENvbXBs
VHlwZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0ZWQ7IH0KIAogICAg
IHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiAiSmF2
YVNjcmlwdCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOyB9CkBAIC01NSwxNiArNjEsMjIg
QEAgcHVibGljOgogCiBKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRp
b24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAogY2xhc3Mg
VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHVi
bGljOgorcHJvdGVjdGVkOgogICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+dGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAg
IHsKICAgICB9CiAKK3B1YmxpYzoKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oJihnbG9iYWxEYXRh
LT5oZWFwKSkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisK
ICAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gVGVy
bWluYXRlZDsgfQogCiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0IHsgcmV0dXJuICJKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiI7IH0KQEAgLTcy
LDcgKzg0LDcgQEAgcHVibGljOgogCiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgIHJl
dHVybiBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAog
SlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5
MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQgPSAtMTsKICAgICAKLSAgICBw
dWJsaWM6CiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQogICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogICAgICAgICAgICAgLCBtX251bVBhcmFtZXRl
cnNGb3JDYWxsKG51bVBhcmFtZXRlcnMpCkBAIC02NCw2ICs2MywxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGZpbmFsaXplci5sZWFrSGFuZGxlKCk7CiAjZW5kaWYKICAgICAgICAg
fQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFeGVjdXRhYmxlQmFzZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGlu
dCBudW1QYXJhbWV0ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8RXhlY3V0YWJsZUJhc2U+KCZnbG9iYWxEYXRhLmhlYXApKSBFeGVjdXRhYmxlQmFz
ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIG51bVBhcmFtZXRlcnMpOworICAgICAgICB9CiAKICAg
ICAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAgICAgICAgIHsKQEAgLTE2NiwxMyAr
MTcxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJs
ZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
KCZnbG9iYWxEYXRhKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVu
Y3Rpb24sIEpJVENvZGUoKSwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
Jmdsb2JhbERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY29uc3Ry
dWN0VGh1bmspLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KCZnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVj
dXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29uc3Ry
dWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1
dGFibGU+KCZnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJ
VENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBmdW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1
bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgY29uc3RydWN0b3IpOwogICAgICAgICB9CiAjZWxzZQog
ICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVj
dG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0
aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KCZnbG9iYWxE
YXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1
Y3Rvcik7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yOTAsNyArMjk1LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2V2YWxDb2RlQmxvY2s7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkgeyByZXR1
cm4gbmV3IChleGVjKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250
ZXh0KTsgfQorICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkg
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFdmFsRXhl
Y3V0YWJsZT4oZXhlYy0+aGVhcCgpKSkgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0lu
U3RyaWN0Q29udGV4dCk7IAorICAgICAgICB9CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBK
SVRDb2RlJiBnZW5lcmF0ZWRKSVRDb2RlKCkKQEAgLTMxOSw3ICszMjcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQcm9ncmFtRXhlY3V0YWJsZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBz
b3VyY2UpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFByb2dyYW1FeGVj
dXRhYmxlPihleGVjLT5oZWFwKCkpKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwog
ICAgICAgICB9CiAKICAgICAgICAgflByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC0zNzIsMTcgKzM4
MCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBGdW5j
dGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMs
IEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUs
IGxhc3RMaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlv
bkV4ZWN1dGFibGU+KGV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1l
LCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRl
eHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEZ1
bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNl
c0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxE
YXRhLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0
cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oJmdsb2JhbERhdGEtPmhlYXApKSBG
dW5jdGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1
bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5l
KTsKICAgICAgICAgfQogCiAgICAgICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVj
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAg
ICAgICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3Ig
Y29uc3RydWN0IGJ5dGVjb2RlLiBUaGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBK
U09iamVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4gPSBuZXcgKGV4ZWMpIFNjb3BlQ2hhaW5Ob2RlKDAsIGdsb2JhbE9iamVjdCwg
Jmdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4p
OworICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0
ZShleGVjLCAwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMt
Pmdsb2JhbFRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGZ1bmN0aW9uLCBzY29wZUNoYWluKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9u
IENvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOCArMjgsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90
b3R5cGU7CiAKICAgICBjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEZ1bmN0aW9u
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBGdW5j
dGlvblByb3RvdHlwZSopOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQ29u
c3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3Rv
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uQ29uc3RydWN0b3I+KGV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGZ1bmNQcm90b3R5cGUpOworICAgICAgICB9CiAK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0
RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIEZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblBy
b3RvdHlwZShFeGUKIAogdm9pZCBGdW5jdGlvblByb3RvdHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0
aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5j
dGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwotICAgICphcHBseUZ1bmN0aW9uID0g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1
cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBs
eSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwg
RG9udEVudW0pOworICAgICphcHBseUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBwbHlGdW5jdGlvbiwgRG9udEVudW0pOwotICAgICpj
YWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9u
UHJvdG9GdW5jQ2FsbCk7CisgICAgKmNhbGxGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKTsKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVuY3Rpb24sIERvbnRFbnVtKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZSA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBG
dW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxs
RnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUHJvdG90
eXBlPihleGVjLT5oZWFwKCkpKSBGdW5jdGlvblByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkRnVuY3Rp
b25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiBmdW5j
dGlvblN0cnVjdHVyZSwgSlNGdW5jdGlvbioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFw
cGx5RnVuY3Rpb24pOworICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90bykKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHBy
b3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RD
b3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0
ZXJTZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZXR0ZXJTZXR0ZXIuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGZvciBhIHByb3BlcnR5LgogICAgIGNsYXNzIEdldHRl
clNldHRlciA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwotICAg
IHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEdldHRlclNldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAgICAg
ICAgfQorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEdldHRlclNldHRlciogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEdldHRlclNldHRlcj4oZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0dGVyKGV4ZWMpOwor
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdy
YXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQ
SVZhbHVlV3JhcHBlci5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQy
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FQ
SVZhbHVlV3JhcHBlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVl
V3JhcHBlcj4oZXhlYy0+aGVhcCgpKSkgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOwor
ICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC01Niw3ICs2MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgaW5saW5lIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNBUElWYWx1ZVdy
YXBwZXI6OmNyZWF0ZShleGVjLCB2YWx1ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgSlNWYWx1ZSBK
U0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgICAgICByZXR1cm4gYXJndW1lbnRz
OwogICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1Zh
bHVlKG5ldyAoY2FsbEZyYW1lKSBBcmd1bWVudHMoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSBh
cmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKCYoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCkpLCBjYWxsRnJhbWUpKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRz
UmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJn
dW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDggKzQxLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIEpTQWN0
aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1Zh
cmlhYmxlT2JqZWN0IEJhc2U7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAg
SlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSopOworICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY0V4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU0FjdGl2YXRpb24+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU0FjdGl2YXRpb24oY2FsbEZy
YW1lLCBmdW5jRXhlYyk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRp
b24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDE0ICs2MCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBK
U0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3Mg
V2Fsa2VyOwogCi0gICAgcHVibGljOgotICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tU
eXBlKTsKLQorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgQXJnTGlzdCYgaW5p
dGlhbFZhbHVlcyk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRy
U3RlYWxpbmdIYWNrVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAg
ICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0FycmF5PigmZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSlNBcnJheSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVu
c2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5Q3JlYXRpb25Nb2RlIGNyZWF0ZU1vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PigmZ2xv
YmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5n
dGgsIGNyZWF0ZU1vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSlNB
cnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PigmZ2xvYmFsRGF0YS5oZWFwKSkgSlNB
cnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxWYWx1ZXMpOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CkBAIC0xMjIsNyArMTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYp
OwogICAgICAgICB2b2lkIGNvcHlUb1JlZ2lzdGVycyhFeGVjU3RhdGUqLCBSZWdpc3RlciosIHVp
bnQzMl90KTsKLQorICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjZWxsLT5+SlNDZWxsKCk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwKiBoZWFwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGhlYXAtPmFsbG9jYXRlKHNpemVvZihUKSk7CisgICAgfQorICAgICAgICAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNDZWxsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMCArNDgsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVj
dFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAg
ICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgaW50
IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUV4ZWN1dGFibGUqKTsKICAgICAgICAg
SlNGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBTY29wZUNoYWluTm9k
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPihleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgsIGlkZW50LCBuYXRpdmVGdW5jKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBOYXRpdmVFeGVjdXRhYmxlKiBu
YXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8SlNGdW5jdGlvbj4oZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgbGVuZ3RoLCBpZGVudCwgbmF0aXZlRXhlYyk7CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY0V4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oZXhl
Yy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBmdW5jRXhlYywgc2NvcGVDaGFpbik7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAg
ICBjb25zdCBVU3RyaW5nJiBuYW1lKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0
KEpTT2JqZWN0KiB0aGlzCiAgICAgc3RydWN0dXJlKCktPmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9u
VHJhY2tpbmcoKTsKIAogICAgIG1fZ2xvYmFsRGF0YSA9IEhlYXA6OmhlYXAodGhpcyktPmdsb2Jh
bERhdGEoKTsKLSAgICBtX2dsb2JhbFNjb3BlQ2hhaW4uc2V0KCptX2dsb2JhbERhdGEsIHRoaXMs
IG5ldyAobV9nbG9iYWxEYXRhLmdldCgpKSBTY29wZUNoYWluTm9kZSgwLCB0aGlzLCBtX2dsb2Jh
bERhdGEuZ2V0KCksIHRoaXMsIHRoaXNWYWx1ZSkpOworICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5z
ZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZSgwLCB0aGlzLCBt
X2dsb2JhbERhdGEuZ2V0KCksIHRoaXMsIHRoaXNWYWx1ZSkpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgwLCAwLCBtX2dsb2JhbFNjb3BlQ2hhaW4uZ2V0KCksIENh
bGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKIAotICAgIG1fZnVuY3Rpb25Qcm90b3R5
cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBGdW5jdGlvblByb3Rv
dHlwZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJl
IHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgorICAgIG1fZnVuY3Rpb25Qcm90
b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJl
IHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgogICAgIG1fZnVuY3Rpb25TdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwog
ICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0
aW9uID0gMDsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0
aWVzKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksICZjYWxsRnVuY3Rpb24s
ICZhcHBseUZ1bmN0aW9uKTsKICAgICBtX2NhbGxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBjYWxsRnVuY3Rpb24pOwogICAgIG1fYXBwbHlGdW5jdGlvbi5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhcHBseUZ1bmN0aW9uKTsKLSAgICBtX29iamVjdFByb3RvdHlw
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlw
ZShleGVjLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzTnVsbCgpKSkpOworICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9i
amVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxs
KCkpKSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlw
ZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpOwogCiAgICAgbV9lbXB0eU9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS0+aW5oZXJpdG9ySUQoZXhlYy0+Z2xvYmFsRGF0
YSgpKSk7CkBAIC0yMDYsNTQgKzIwNiw1NCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAgICAgbV9jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBt
X2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpT
Q2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1f
YXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBB
cnJheVByb3RvdHlwZSh0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9hcnJheVBy
b3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2FycmF5U3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX3Jl
Z0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBS
ZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fc3RyaW5nUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIHRo
aXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBt
X2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVj
KSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBCb29s
ZWFuUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CiAgICAgbV9ib29sZWFuT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
Ym9vbGVhblByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9udW1iZXJQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOdW1iZXJQcm90b3R5cGUoZXhlYywg
dGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX251bWJlclByb3RvdHlwZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAg
IG1fZGF0ZVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMp
IERhdGVQcm90b3R5cGUoZXhlYywgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9k
YXRlUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVQcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2RhdGVTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZUluc3RhbmNlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpKTsKIAog
ICAgIFJlZ0V4cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRh
KCksICIiLCBOb0ZsYWdzKTsKICAgICAKLSAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFJlZ0V4cFByb3RvdHlwZShleGVjLCB0aGlz
LCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSwgZW1wdHlSZWdleCkpOworICAgIG1fcmVnRXhwUHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CiAgICAgbV9y
ZWdFeHBTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX3JlZ0V4cFByb3RvdHlwZS5n
ZXQoKSkpOwogCiAgICAgbV9tZXRob2RDYWxsRHVtbXkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgRXJyb3JQcm90b3R5cGUq
IGVycm9yUHJvdG90eXBlID0gbmV3IChleGVjKSBFcnJvclByb3RvdHlwZShleGVjLCB0aGlzLCBF
cnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5cGUg
PSBFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
OwogICAgIG1fZXJyb3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90
b3R5cGUpKTsKIAogICAgIC8vIENvbnN0cnVjdG9ycwogCi0gICAgSlNDZWxsKiBvYmplY3RDb25z
dHJ1Y3RvciA9IG5ldyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgdGhpcywgT2JqZWN0
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxs
KiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4
ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKTsKLSAgICBKU0NlbGwqIGFycmF5Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IgPSBuZXcgKGV4
ZWMpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0cnVj
dG9yID0gbmV3IChleGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgdGhpcywgQm9vbGVhbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwq
IG51bWJlckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCB0
aGlzLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKTsK
LSAgICBKU0NlbGwqIGRhdGVDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRGF0ZUNvbnN0cnVjdG9y
KGV4ZWMsIHRoaXMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQo
KSk7CisgICAgSlNDZWxsKiBvYmplY3RDb25zdHJ1Y3RvciA9IE9iamVjdENvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYywgdGhpcywgT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25D
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGFycmF5Q29uc3RydWN0
b3IgPSBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogc3RyaW5nQ29u
c3RydWN0b3IgPSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFN0cmluZ0Nv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCog
Ym9vbGVhbkNvbnN0cnVjdG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhp
cywgQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsK
KyAgICBKU0NlbGwqIG51bWJlckNvbnN0cnVjdG9yID0gTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBl
LmdldCgpKTsKKyAgICBKU0NlbGwqIGRhdGVDb25zdHJ1Y3RvciA9IERhdGVDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlw
ZS5nZXQoKSk7CiAKLSAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgdGhpcywgUmVnRXhw
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fcmVn
RXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwQ29uc3Ry
dWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVn
RXhwUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRo
aXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBlcnJvclByb3RvdHlwZSkpOworICAgIG1fZXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJv
dG90eXBlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJl
ID0gTmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIGVycm9yUHJvdG90eXBlKTsKICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yU3RydWN0dXJl
ID0gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgbV9ldmFsRXJyb3JDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9y
UHJvdG90eXBlU3RydWN0dXJlLCAiRXZhbEVycm9yIikpOwotICAgIG1fcmFuZ2VFcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJy
b3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJy
b3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSYW5nZUVycm9yIikpOwotICAgIG1fcmVmZXJlbmNlRXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5h
dGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmVmZXJlbmNlRXJyb3IiKSk7Ci0gICAgbV9z
eW50YXhFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAo
ZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJTeW50YXhFcnJvciIpKTsKLSAg
ICBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJUeXBlRXJyb3IiKSk7Ci0g
ICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJVUklFcnJvciIpKTsKKyAg
ICBtX2V2YWxFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVj
dHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7CisgICAg
bV9yYW5nZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0
dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7CisgICAg
bV9yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0
cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIp
KTsKKyAgICBtX3N5bnRheEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9y
IikpOworICAgIG1fdHlwZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIp
KTsKKyAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9y
U3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOwog
CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+
cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9u
dEVudW0pOwpAQCAtMjgxLDE1ICsyODEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQo
SlNWYWx1ZSBwcm90bwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJy
b3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJVUklF
cnJvciIpLCBtX1VSSUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKIAotICAgIG1f
ZXZhbEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgSlNG
dW5jdGlvbihleGVjLCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwpKTsKKyAgICBtX2V2YWxGdW5jdGlv
bi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywg
dGhpcywgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmV2YWwsIGdsb2JhbEZ1bmNFdmFsKSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbihleGVjLCBtX2V2YWxGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwogCiAgICAgR2xv
YmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgbmV3IChleGVjKSBNYXRoT2JqZWN0KGV4
ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCisgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiksIE1hdGhPYmpl
Y3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERvbnRE
ZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTmFO
IiksIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkluZmluaXR5IiksIGpzTnVtYmVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZp
ZXIoZXhlYywgInVuZGVmaW5lZCIpLCBqc1VuZGVmaW5lZCgpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4
ZWMsICJKU09OIiksIG5ldyAoZXhlYykgSlNPTk9iamVjdCh0aGlzLCBKU09OT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
LCBEb250RW51bSB8IERvbnREZWxldGUpCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVu
dGlmaWVyKGV4ZWMsICJKU09OIiksIEpTT05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUpCiAgICAgfTsKICAgICBhZGRTdGF0
aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykp
OwogCkBAIC0zOTUsMTEgKzM5NSw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2l6ZVJlZ2lz
dGVycyhzaXoKICAgICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVh
c2UoKSwgbmV3U2l6ZSk7CiB9CiAKLXZvaWQqIEpTR2xvYmFsT2JqZWN0OjpvcGVyYXRvciBuZXco
c2l6ZV90IHNpemUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLXsKLSAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aGVhcC5hbGxvY2F0ZShzaXplKTsKLX0KLQogdm9pZCBKU0dsb2JhbE9iamVjdDo6
YWRkU3RhdGljR2xvYmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkK
IHsKICAgICByZXNpemVSZWdpc3RlcnMoc3ltYm9sVGFibGUoKS5zaXplKCkgKyBjb3VudCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fZXZhbEVuYWJsZWQ7CiAKICAgICBwdWJsaWM6Ci0gICAgICAg
IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwotCiAgICAgICAgIGV4
cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSwgMCkKICAgICAgICAgICAgICwgbV9yZWdpc3RlckFy
cmF5U2l6ZSgwKQpAQCAtMjg3LDggKzI4NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIHJlc2V0KEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgICAgICB2b2lkIHNldFJlZ2lzdGVy
cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7Ci0KLSAgICAg
ICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCk7IC8vIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCB3
aXRoIEpTR2xvYmFsRGF0YQogICAgIH07CiAKICAgICBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxP
YmplY3QoSlNWYWx1ZSk7CkBAIC0zNzgsNyArMzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAogICAgIGlu
bGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTM4
OCw3ICszODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlKCksIGluaXRpYWxMZW5ndGgsIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0K
IAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW5pdGlhbExlbmd0aCkKQEAgLTQwMCw3ICszOTYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICB7CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKICAgICAg
ICAgdmFsdWVzLmFwcGVuZChzaW5nbGVJdGVtVmFsdWUpOwotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZSgpLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOwogICAg
IH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgc2luZ2xlSXRlbVZhbHVlKQpAQCAtNDEwLDcgKzQwNiw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKKyAgICAgICAgcmV0
dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29u
c3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZp
c2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIC8vIGluIGNlcnRhaW4gU3F1aXJyZWxGaXNoIGJ5dGVjb2RlcyAtLSBlZmZlY3RpdmVseSBp
dCBqdXN0IHNpbGVudGx5IGNvbnN1bWVzCiAgICAgLy8gYW55IG9wZXJhdGlvbnMgcGVyZm9ybWVk
IG9uIHRoZSByZXN1bHQgb2YgYSBmYWlsZWQgdG9PYmplY3QgY2FsbC4KICAgICBjbGFzcyBKU05v
dEFuT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFs
RGF0YSgpLm5vdEFuT2JqZWN0U3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNOb3RBbk9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTTm90QW5PYmplY3Q+KGV4ZWMtPmhlYXAoKSkpIEpTTm90QW5PYmplY3Qo
ZXhlYyk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAko
cmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAgICAgY2xhc3MgSlNPTk9iamVjdCA6IHB1YmxpYyBK
U09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIEpTT05PYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIEpTT05PYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNPTk9iamVjdD4o
ZXhlYy0+aGVhcCgpKSkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RD
b3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQg
SlNPYmplY3Q6OmRlZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAgIEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0
dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVy
OjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJvcGVy
dHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3QpOwog
CiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEg
bmV3IHByb3BlcnR5LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZp
bmVTZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRl
cihleGVjKTsKKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6
Y3JlYXRlKGV4ZWMpOwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMtPmdsb2JhbERhdGEoKSwg
cHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBTZXR0ZXIsIHRydWUsIHNs
b3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2Ug
YWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgYm9vbCBw
dXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5l
cmljRGVzY3JpcHRvcigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAmJiBvbGREZXNjcmlwdG9y
LmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgICAgIEdldHRl
clNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAg
ICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgYXR0cmli
dXRlcyB8PSBHZXR0ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVj
LT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTQsNyArMzU0LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5s
aW5lU3RvcgogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Zp
bmFsT2JqZWN0PihleGVjLT5oZWFwKCkpKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDggKzYxLDggQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5h
bWVJdAogICAgICAgICAhby0+c3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSAmJiAhby0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYKICAgICAg
ICAgIW8tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMo
KSkKICAgICAgICAgbnVtQ2FjaGVhYmxlU2xvdHMgPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlT
dG9yYWdlU2l6ZSgpOwotCi0gICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5h
bWVJdGVyYXRvciA9IG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9w
ZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2FjaGVhYmxlU2xvdHMpOworICAgIAorICAgIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPihleGVjLT5oZWFwKCkpKSBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKGV4ZWMsIHByb3BlcnR5TmFtZXMuZGF0YSgpLCBudW1DYWNoZWFibGVTbG90cyk7CiAK
ICAgICBpZiAoby0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQogICAgICAgICByZXR1cm4g
anNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHJldmlzaW9uIDkwOTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqLCBKU09iamVjdCopOworICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBw
cm9wZXJ0eU5hbWVBcnJheURhdGEsIHNpemVfdCBudW1DYWNoZWFibGVTbG90KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcj4oZXhlYy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0
eU5hbWVBcnJheURhdGEsIG51bUNhY2hlYWJsZVNsb3QpOworICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSwxMCArMTk5LDEwIEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6c3Vic3RyaW5nRnJvbVJv
cGUoRXgKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0KICAgICBpZiAoc3Vic3RyaW5n
RmliZXJDb3VudCA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOworICAgICAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOwogICAgIGlmIChzdWJz
dHJpbmdGaWJlckNvdW50ID09IDIpCi0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpT
U3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFd
KTsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzdWJz
dHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSwgc3Vic3RyaW5nRmliZXJzWzJdKTsK
KyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmli
ZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0pOworICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdLCBzdWJz
dHJpbmdGaWJlcnNbMl0pOwogfQogCiBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVy
KEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBjb25zdCBVU3RyaW5nJiByZXBsYWNl
bWVudCkKQEAgLTI1NCw3ICsyNTQsNyBAQCBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFj
dGVyKEV4ZWNTCiAgICAgfQogCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIEpTU3Ry
aW5nKGdsb2JhbERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUo
SlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBidWlsZGVyLnJlbGVhc2UoKSkpOwogfQogCiBK
U1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKQpAQCAtMjk4LDcgKzI5OCw3IEBAIFVTdHJpbmcgSlNTdHJpbmc6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogZXgKIAogaW5saW5lIFN0cmluZ09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyog
c3RyaW5nKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7
CisgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oZXhlYy0+aGVhcCgp
KSkgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdP
YmplY3RTdHJ1Y3R1cmUoKSwgc3RyaW5nKTsKIH0KIAogSlNPYmplY3QqIEpTU3RyaW5nOjp0b09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9u
IDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgICAgIFZlY3RvcjxXb3JrSXRlbSwgMTY+IG1fd29ya1F1ZXVlOwogICAgICAgICB9OwogCisg
ICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07CisKKyAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKCpn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAg
ICAsIG1fbGVuZ3RoKHZhbHVlLmxlbmd0aCgpKQpAQCAtMTkxLDcgKzE5NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHZhbHVlLmltcGwoKS0+Y29zdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gSGFz
T3RoZXJPd25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07CiAgICAgICAgIEpTU3RyaW5nKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJU
eXBlKQogICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkp
CkBAIC0yOTUsNiArMjk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQo
aW5kZXggPD0gc19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpOwogICAgICAgICB9CiAKKyAgICBwdWJs
aWM6CiAgICAgICAgIH5KU1N0cmluZygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2
cHRyKCkgPT0gSlNHbG9iYWxEYXRhOjpqc1N0cmluZ1ZQdHIpOwpAQCAtMzMzLDYgKzMzNiw0OSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCisKKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGdsb2JhbERhdGEtPmhl
YXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0
cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlIGhhc090aGVyT3duZXJUeXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xv
YmFsRGF0YS0+aGVhcCkpKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3RoZXJPd25l
clR5cGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFzT3Ro
ZXJPd25lclR5cGUgaGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpT
U3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlLCBoYXNPdGhlck93bmVyVHlwZSk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBQYXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCByb3BlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJp
bmcqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQs
IEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+aGVhcCkpKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWdu
ZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGdsb2Jh
bERhdGEtPmhlYXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHUyKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIGNvbnN0IFVTdHJpbmcmIHUxLCBKU1N0
cmluZyogczIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oJihnbG9iYWxEYXRhLT5oZWFwKSkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZp
YmVyQ291bnQsIHUxLCBzMik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBKU1ZhbHVlIHYz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KGV4ZWMtPmhlYXAoKSkpIEpTU3RyaW5nKGV4ZWMsIHYxLCB2MiwgdjMpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCYoZ2xvYmFsRGF0YS0+
aGVhcCkpKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigmKGds
b2JhbERhdGEtPmhlYXApKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1Myk7CisgICAg
ICAgIH0KKworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNTdHJpbmcoVlB0clN0ZWFsaW5nSGFj
a1R5cGUpIAogICAgICAgICAgICAgOiBKU0NlbGwoVlB0clN0ZWFsaW5nSGFjaykKQEAgLTQ0Miw3
ICs0ODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFs
bFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xv
YmFsRGF0YSwgVVN0cmluZygmYywgMSkpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9i
YWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIFVTdHJpbmcoJmMsIDEpKSk7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTQ1
Miw3ICs0OTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFj
dGVycygpW29mZnNldF07CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmlu
ZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGds
b2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhT
dHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgMSkpKSk7CisgICAgICAgIHJldHVy
biBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBVU3Ry
aW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCAxKSkpKTsKICAgICB9CiAK
ICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IGNoYXIqIHMpCkBAIC00NjAsMTMgKzUwNiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQVNTRVJUKHMpOwogICAgICAgICBBU1NFUlQoc1swXSk7CiAgICAgICAg
IEFTU0VSVChzWzFdKTsKLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBuZXcg
KGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHMpKTsKKyAgICAgICAgcmV0dXJuIGZp
eHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMpKTsKICAg
ICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBBU1NFUlQo
cy5sZW5ndGgoKSA+IDEpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5l
dyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4g
Zml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcykpOwog
ICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSkKQEAgLTQ4OCw3ICs1MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRy
KGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOwor
ICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNTdWJzdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogcywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCkBAIC01MTYsNyArNTYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBp
ZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0
YSwgYyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJpbmcoU3RyaW5nSW1wbDo6
Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIGxlbmd0aCkpLCBKU1N0cmluZzo6SGFzT3RoZXJPd25l
cikpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNl
dCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29u
c3QgVVN0cmluZyYgcykKQEAgLTUyOSw3ICs1NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywgSlNTdHJpbmc6
Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBK
U1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHMsIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7
CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnRvT2JqZWN0U2xv
d0Nhc2UoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90QW5P
YmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVj
dFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTkwLDcgKzkwLDcgQEAgSlNPYmpl
Y3QqIEpTVmFsdWU6OnN5bnRoZXNpemVPYmplY3QoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZp
bmVkT3JOdWxsKCkpOwogICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihleGVjLCAqdGhpcykpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhl
Yyk7CisgICAgcmV0dXJuIEpTTm90QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmpl
Y3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdApA
QCAtMTAzLDcgKzEwMyw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBl
KEUKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3
IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0Ojpj
cmVhdGUoZXhlYyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgw
LDEwIEBAIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiAKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdl
dEFub255bW91c1ZhbHVlKDApLmFzQ2VsbCgpKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBp
ZiAoZW50cnktPmdlbmVyYXRvcigpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBuZXcgKGV4ZWMp
IEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3Ry
dWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5l
cmF0b3IoKSkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5
LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRI
b3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3IoKSkpOwogICAg
ICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rp
b24oKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1
bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwogCiAgICAg
ICAgIHRoaXNPYmotPnB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCBmdW5jdGlvbiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIGxvY2F0aW9u
ID0gdGhpc09iai0+Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3Qu
aAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE0IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIE1hdGhPYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBNYXRoT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBNYXRoT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE1hdGhPYmplY3Q+KGV4ZWMtPmhl
YXAoKSkpIE1hdGhPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkw
OTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdAogewogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZv
KSk7CiAKLSAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChleGVjKSBO
YXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVjdHVy
ZSwgbmFtZUFuZE1lc3NhZ2UsIHRoaXMpOworICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90
b3R5cGUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhpcyk7CiAKICAgICBwdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051
bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjEx
LjcuNQogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDkgKzMwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5hdGl2ZUVycm9y
UHJvdG90eXBlOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmKTsKIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgVVN0cmlu
ZyYgbmFtZUFuZE1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBwcm90b3R5cGVT
dHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90
b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclBy
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOCArMjcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcjsKIAogICAgIGNsYXNzIE5hdGl2ZUVycm9yUHJvdG90eXBlIDogcHVibGljIEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAg
ICAgTmF0aXZlRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IqIGNvbnN0cnVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5cGU+KGV4ZWMtPmhlYXAoKSkpIE5hdGl2ZUVycm9y
UHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwg
Y29uc3RydWN0b3IpOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3
IEBAIHN0YXRpYyBKU1ZhbHVlIG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUKIC8vIEVDTUEgMTUu
Ny4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVt
YmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewotICAgIE51bWJlck9iamVjdCogb2Jq
ZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0
U3RydWN0dXJlKCkpOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0Ojpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGRvdWJs
ZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYykgOiAwOwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRh
KCksIGpzTnVtYmVyKG4pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTnVtYmVyUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTnVt
YmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgor
ICAgIHByb3RlY3RlZDoKICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOdW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTnVtYmVyQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBOdW1iZXJQcm90b3R5cGUqIG51bVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE51bWJlckNvbnN0cnVjdG9yPihleGVjLT5o
ZWFwKCkpKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
bnVtUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTVmFsdWUgTnVtYmVyT2JqZWN0Ojpn
ZXRKU051bWJlcigpCiAKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBudW1iZXIpCiB7Ci0g
ICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAg
IE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmpl
Y3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBudW1iZXIpOwogICAgIHJl
dHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJPYmplY3QuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyT2JqZWN0IDogcHVibGljIEpTV3Jh
cHBlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGlj
aXQgTnVtYmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgTnVtYmVyT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE51bWJlck9iamVjdD4oJmdsb2JhbERhdGEuaGVhcCkpIE51
bWJlck9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90
b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyUHJvdG90eXBlIDogcHVibGljIE51
bWJlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgTnVtYmVy
UHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVt
YmVyUHJvdG90eXBlPihleGVjLT5oZWFwKCkpKSBOdW1iZXJQcm90b3R5cGUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBP
YmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6
CisgICAgcHJvdGVjdGVkOgogICAgICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE9iamVjdFByb3RvdHlwZSopOworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIE9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
T2JqZWN0UHJvdG90eXBlKiBvYmpQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmplY3RDb25zdHJ1Y3Rvcj4oZXhlYy0+aGVhcCgpKSkg
T2JqZWN0Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG9ialByb3Rv
dHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1Ymxp
YzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iamVjdFByb3RvdHlwZT4oZXhlYy0+aGVh
cCgpKSkgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBKU1N0cmlu
Zzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9i
YWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOworICAgICAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEs
IHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoZmliZXJD
b3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVpbGRlci5pc091dE9mTWVtb3J5KCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAg
ICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMy
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwg
cm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUo
Z2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1
MSwgSlNTdHJpbmcqIHMyKQpAQCAtNzQsMTQgKzc0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAg
ICAgICAgIGlmIChmaWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERh
dGEsIGZpYmVyQ291bnQsIHUxLCBzMik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOwogCiAgICAgICAgIEpTU3RyaW5n
OjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodTEp
OwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczIpOwotICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5y
ZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgY29uc3QgVVN0cmluZyYgdTIpCkBAIC05OSwx
NCArOTksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPD0g
SlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG5l
dyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHUyKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIGZpYmVyQ291
bnQsIHMxLCB1Mik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVy
KGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1l
bW9yeSgpKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFw
cGVuZCh1Mik7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0
cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQpAQCAtMTIxLDcgKzEyMSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsK
IAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1
MSwgdTIpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCB1MSwg
dTIpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0
cmluZyYgdTMpCkBAIC0xNDIsNyArMTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHUxLCB1MiwgdTMpOworICAgICAg
ICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCB1MSwgdTIsIHUzKTsKICAgICB9
CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBS
ZWdpc3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQpCkBAIC0xNjAsNyArMTYwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPT0gMykKLSAgICAgICAgICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1
ZSgpLCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3RyaW5nc1syXS5qc1ZhbHVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYywgc3RyaW5nc1swXS5qc1ZhbHVlKCks
IHN0cmluZ3NbMV0uanNWYWx1ZSgpLCBzdHJpbmdzWzJdLmpzVmFsdWUoKSk7CiAKICAgICAgICAg
SlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBp
ZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkKQEAgLTE4NSw3ICsxODUs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKG92ZXJmbG93KQogICAgICAgICAgICAg
cmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgICAgICByZXR1cm4gbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRl
ci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQpAQCAtMjMyLDcgKzIzMiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6
OmNyZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAg
IC8vIEVDTUEgMTEuOS4zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaWxsQXJyYXlJ
bnN0YW4KIAogSlNPYmplY3QqIFJlZ0V4cENvbnN0cnVjdG9yOjphcnJheU9mTWF0Y2hlcyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwTWF0Y2hl
c0FycmF5KGV4ZWMsIGQuZ2V0KCkpOworICAgIHJldHVybiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNy
ZWF0ZShleGVjLCBkLmdldCgpKTsKIH0KIAogSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0
QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpIGNvbnN0CkBAIC0zMDQsNyArMzA0
LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAv
LyBJZiBjYWxsZWQgYXMgYSBmdW5jdGlvbiwgdGhpcyBqdXN0IHJldHVybnMgdGhlIGZpcnN0IGFy
Z3VtZW50IChzZWUgMTUuMTAuMy4xKS4KICAgICAgICAgaWYgKGNhbGxBc0NvbnN0cnVjdG9yKSB7
CiAgICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+
KGFzT2JqZWN0KGFyZzApKS0+cmVnRXhwKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVj
KSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVy
ZSgpLCByZWdFeHApOworICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhw
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYXNPYmplY3QoYXJnMCk7CiAgICAgfQpAQCAt
MzI1LDcgKzMyNSw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUK
ICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCks
IHBhdHRlcm4sIGZsYWdzKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVy
cm9yTWVzc2FnZSgpKSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwg
cmVnRXhwKTsKKyAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdF
eHApOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RX
aXRoUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5
MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IH07CiAKICAgICBjbGFzcyBSZWdFeHBDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWdFeHBDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cFByb3Rv
dHlwZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVnRXhwQ29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cENvbnN0
cnVjdG9yPihleGVjLT5oZWFwKCkpKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSwgcmVnRXhwUHJvdG90eXBlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAko
cmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTQgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0FycmF5IDogcHVibGljIEpTQXJyYXkg
ewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJh
eShFeGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oZXhl
Yy0+aGVhcCgpKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGN0b3JQcml2YXRlKTsKKyAgICAg
ICAgfQogICAgICAgICB2aXJ0dWFsIH5SZWdFeHBNYXRjaGVzQXJyYXkoKTsKIAogICAgIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDIyIEBACiBuYW1lc3BhY2Ug
SlNDIHsKICAgICAKICAgICBjbGFzcyBSZWdFeHBPYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFJlZ0V4cE9iamVjdChKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOworCiAgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBP
YmplY3Q+KGV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9i
amVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0Pigm
KGdsb2JhbERhdGEtPmhlYXApKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCByZWdFeHApOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB0eXBlZGVmIEpTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdCBCYXNlOwogCi0gICAgICAgIFJlZ0V4cE9iamVjdChKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgICAgICB2aXJ0dWFsIH5SZWdFeHBPYmpl
Y3QoKTsKIAogICAgICAgICB2b2lkIHNldFJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFJlZ0V4cCogcikgeyBkLT5yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHIpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAko
cmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTUgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlIDogcHVibGljIFJlZ0V4cE9iamVjdCB7
Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVnRXhwUHJvdG90eXBlKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFJlZ0V4cFByb3RvdHlwZT4oZXhlYy0+aGVhcCgpKSkgUmVnRXhwUHJvdG90eXBl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZUNoYWluLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgIAogICAgIGNsYXNzIFNj
b3BlQ2hhaW5Ob2RlIDogcHVibGljIEpTQ2VsbCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCiAgICAgICAgICAgICA6IEpTQ2VsbCgqZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+c2NvcGVDaGFpbk5vZGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAg
ICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKQEAgLTQ3LDYgKzQ3LDE2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIH0K
IAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogbmV4dCwgSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogZ2xvYmFsVGhpcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFNjb3BlQ2hhaW5Ob2RlPihleGVjLT5oZWFwKCkpKSBTY29wZUNoYWluTm9kZShu
ZXh0LCBvYmplY3QsIGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcyk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGUoU2NvcGVDaGFpbk5v
ZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTY29wZUNoYWluTm9kZT4o
Jmdsb2JhbERhdGEtPmhlYXApKSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmplY3QsIGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKICAgICAgICAgV3JpdGVCYXJyaWVyPFNjb3Bl
Q2hhaW5Ob2RlPiBuZXh0OwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG9iamVjdDsK
QEAgLTc2LDcgKzg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIFNjb3BlQ2hhaW5O
b2RlKiBTY29wZUNoYWluTm9kZTo6cHVzaChKU09iamVjdCogbykKICAgICB7CiAgICAgICAgIEFT
U0VSVChvKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgU2NvcGVDaGFpbk5vZGUo
dGhpcywgbywgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9iYWxUaGlzLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUodGhpcywgbywgZ2xvYmFs
RGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9iYWxUaGlzLmdldCgpKTsKICAgICB9CiAKICAg
ICBpbmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwb3AoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShyZXZpc2lv
biA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBTbWFsbFN0cmlu
Z3M6OmNvdW50KCkgY29uc3QKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0eVN0cmluZyhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2VtcHR5U3RyaW5nKTsK
LSAgICBtX2VtcHR5U3RyaW5nID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRh
LCAiIiwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOworICAgIG1fZW1wdHlTdHJpbmcgPSBKU1N0
cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CiB9
CiAKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcikKQEAgLTExNCw3ICsx
MTQsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyCiAgICAgaWYg
KCFtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZSA9IGFkb3B0UHRyKG5ldyBTbWFsbFN0cmlu
Z3NTdG9yYWdlKTsKICAgICBBU1NFUlQoIW1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0
ZXJdKTsKLSAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IG5ldyAoZ2xv
YmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihtX3N0
b3JhZ2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOworICAgIG1f
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNTdHJpbmc6OmNyZWF0ZShnbG9i
YWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNoYXJhY3Rlcikp
LCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CiB9CiAKIFN0cmluZ0ltcGwqIFNtYWxsU3RyaW5n
czo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKTsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBn
bG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPnN0
cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4
ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTA5MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBTdHJpbmdQcm90b3R5cGU7CiAKICAgICBjbGFzcyBTdHJpbmdDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAg
ICBTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIFN0cmluZ1Byb3RvdHlwZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBTdHJpbmdDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCAsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdQcm90b3R5
cGUqIHN0clByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFN0cmluZ0NvbnN0cnVjdG9yPihleGVjLT5oZWFwKCkpKSBTdHJpbmdDb25zdHJ1
Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc3RyUHJvdG90eXBlKTsKKyAgICAg
ICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDIxIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewotICAgIHB1Ymxp
YzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqKTsKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGNv
bnN0IFVTdHJpbmcmKTsKLQorICAgICAgICAgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxTdHJpbmdPYmplY3Q+KGV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1
cmUpOyAgCisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIHN0cikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09i
amVjdD4oZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgc3RyKTsg
IAorICAgICAgICB9CiAgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgICAgIAogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5oCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQo
ZXhlYywKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3RU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZD4oZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0VGhh
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywKICAgICAgICAgICAgICAgICBjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnN0
cmluZ1Byb3RvdHlwZSgpKSwgc3RyaW5nKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNpb24gOTA5
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlIDogcHVibGlj
IFN0cmluZ09iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgU3Ry
aW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHJpbmdQcm90b3R5cGUqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
U3RyaW5nUHJvdG90eXBlPihleGVjLT5oZWFwKCkpKSBTdHJpbmdQcm90b3R5cGUoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVj
dHVyZSk7CiAgICAgICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgKCZnbG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCB0eXBl
SW5mbywgYW5vbnltb3VzU2xvdENvdW50LCBjbGFzc0luZm8pOworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oJmdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVy
ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIHR5cGVJbmZvLCBhbm9ueW1vdXNTbG90Q291bnQsIGNs
YXNzSW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGlj
cygpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAg
ICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJl
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xvYmFs
RGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPigm
Z2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwpAQCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KCZnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdHlwZWRl
ZiBlbnVtIHsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVD
aGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNoYWluLmgJKHJldmlzaW9uIDkwOTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIFN0cnVj
dHVyZUNoYWluKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUu
Z2V0KCksIGhlYWQpOyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBoZWFkKSB7IHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxTdHJ1Y3R1cmVDaGFpbj4oJmdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZUNo
YWluKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlQ2hhaW5TdHJ1Y3R1cmUuZ2V0KCks
IGhlYWQpOyB9CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBoZWFkKCkgeyByZXR1
cm4gbV92ZWN0b3IuZ2V0KCk7IH0KICAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwOTY3KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDctMTMg
IE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0NjYKKyAgICAgICAgUmVmYWN0
b3IgSlNDIHRvIHJlcGxhY2UgSlNDZWxsOjpvcGVyYXRvciBuZXcgd2l0aCBzdGF0aWMgY3JlYXRl
IG1ldGhvZAorCisgICAgICAgIEZpcnN0IHN0ZXAgaW4gYSBsb25nZXIgcmVmYWN0b3JpbmcgcHJv
Y2VzcyB0byByZW1vdmUgdGhlIHVzZSBvZiAKKyAgICAgICAgb3BlcmF0b3IgbmV3IG92ZXJsb2Fk
aW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJlcGxhY2UgCisgICAg
ICAgIHRoaXMgbWV0aG9kIHdpdGggc3RhdGljIGNyZWF0ZSBtZXRob2RzIGZvciBlYWNoIGluZGl2
aWR1YWwgdHlwZSBvZiBoZWFwLWFsbG9jYXRlZAorICAgICAgICBKUyBvYmplY3QuICBUaGlzIHBh
cnRpY3VsYXIgcGF0Y2ggb25seSBkZWFscyB3aXRoIHJlcGxhY2luZyB1c2VzIG9mIAorICAgICAg
ICBvcGVyYXRvciBuZXcgd2l0aGluIEpTQyBwcm9wZXIuICBGdXR1cmUgcGF0Y2hlcyB3aWxsIHJl
bW92ZSBpdCBmcm9tIHRoZSAKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUg
RE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAgICAgICBvbiBp
dCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZyb20gSlNDZWxs
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBwbGUuY29tKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc0RhdGVPck51bGwpOgorICAg
ICAgICAoV2ViQ29yZTo6b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0JhY2tG
dW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRm9yd2Fy
ZEZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNHb0Z1
bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdl
dHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorCiAy
MDExLTA3LTEzICBNaWhuZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAg
IFtDU1NSZWdpb25zXSBQYXJzZSAtd2Via2l0LWNvbnRlbnQtb3JkZXIgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24g
OTA5MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgSlNWYWx1ZSBqc0RhdGVPck51bGwoRXhl
Y1N0YXRlKiBleGVjLCBkbwogewogICAgIGlmICghaXNmaW5pdGUodmFsdWUpKQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9CiAKIGRvdWJsZSB2YWx1ZVRvRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC0zMDcsNyArMzA3LDcgQEAgRnJh
bWUqIHRvRHluYW1pY0ZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKIAogSlNWYWx1ZSBvYmplY3RUb1N0
cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24o
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0
aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcp
OwogfQogCiBTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlz
aW9uIDkwOTMzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgSlNET01XaW5kb3c6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2kKIHRlbXBsYXRlPE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1
bmN0aW9uLCBpbnQgbGVuZ3RoPgogSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIG5hdGl2ZUZ1bmN0aW9uKTsKKyAgICBy
ZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBsZW5n
dGgsIHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBj
aGlsZEZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiA5MDkzMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDE3ICs0MCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBKU1ZhbHVlIG5v
bkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1l
LCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spOworICAgIHJldHVybiBKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNI
aXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2Fj
aGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVj
KSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CisgICAgcmV0dXJuIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBq
c0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBu
b25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVj
KSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNIaXN0
b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CiB9CiAKIGJvb2wgSlNIaXN0b3J5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDkwOTMzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDE3ICszMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJv
cGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsKKyAgICByZXR1
cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9w
ZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOwogfQogCiBzdGF0
aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljUmVsb2FkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAs
IHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2FkKTsKIH0KIAog
c3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Fzc2lnbkZ1bmN0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewot
ICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJl
KCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsK
KyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgp
LCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CiB9
CiAKIGJvb2wgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gOTA5MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2
LDcgKzEwODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZG91YmxlIGQ7CiAgICAgICAgICAg
ICBpZiAoIXJlYWQoZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykgRGF0ZUluc3RhbmNlKG1fZXhlYywgbV9nbG9iYWxP
YmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgZCk7CisgICAgICAgICAgICByZXR1cm4gRGF0ZUluc3Rh
bmNlOjpjcmVhdGUobV9leGVjLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCBkKTsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbGVUYWc6IHsKICAgICAgICAgICAgIFJlZlB0cjxG
aWxlPiBmaWxlOwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFJl
Z0V4cEZsYWdzIHJlRmxhZ3MgPSByZWdFeHBGbGFncyhmbGFncy0+dXN0cmluZygpKTsKICAgICAg
ICAgICAgIEFTU0VSVChyZUZsYWdzICE9IEludmFsaWRGbGFncyk7CiAgICAgICAgICAgICBSZWdF
eHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVy
bi0+dXN0cmluZygpLCByZUZsYWdzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykg
UmVnRXhwT2JqZWN0KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2dsb2JhbE9iamVj
dC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7IAorICAgICAgICAgICAgcmV0dXJuIFJlZ0V4
cE9iamVjdDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1f
Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsgCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBPYmplY3RSZWZlcmVuY2VUYWc6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100855</attachid>
            <date>2011-07-14 13:57:03 -0700</date>
            <delta_ts>2011-07-14 18:18:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110714135703.patch</filename>
            <type>text/plain</type>
            <size>141865</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE1IEBA
CisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAg
IChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChK
U0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAg
ICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VDaGFy
YWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RS
ZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6CisgICAgICAgICogcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVt
cHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc3BlY3VsYXRpdmUgSklUIGNvbnRhaW5zIGEg
RklYTUUgZm9yIHJld2luZGluZyBzcGVjdWxhdGl2ZSBjb2RlIGdlbmVyYXRpb24gdGhhdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBO
U185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgogX19aTjNKU0MxNFNh
bXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsOCArMTQzLDEzIEBAIGxvbmcg
U3RvcFdhdGNoOjpnZXRFbGFwc2VkTVMoKQogfQogCiBjbGFzcyBHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNHbG9iYWxPYmplY3QgewotcHVibGljOgogICAgIEdsb2JhbE9iamVjdChKU0dsb2JhbERh
dGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cyk7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8R2xvYmFsT2Jq
ZWN0PihnbG9iYWxEYXRhLmhlYXApKSBHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
LCBhcmd1bWVudHMpOworICAgIH0KICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkgY29u
c3QgeyByZXR1cm4gImdsb2JhbCI7IH0KIH07CiBDT01QSUxFX0FTU0VSVCghSXNJbnRlZ2VyPEds
b2JhbE9iamVjdD46OnZhbHVlLCBXVEZfSXNJbnRlZ2VyX0dsb2JhbE9iamVjdF9mYWxzZSk7CkBA
IC0xNTMsMjIgKzE1OCwyMiBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEdsb2JhbE9iamVj
dCk7CiBHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFyZ3VtZW50cykK
ICAgICA6IEpTR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKIHsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJkZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxF
eGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhl
YygpLCAicHJpbnQiKSwgZnVuY3Rpb25QcmludCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0
aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1
aXQiKSwgZnVuY3Rpb25RdWl0KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygp
LCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0
aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rp
b25HQykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJkZWJ1ZyIpLCBmdW5jdGlvbkRlYnVnKSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygp
LCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwg
InByaW50IiksIGZ1bmN0aW9uUHJpbnQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1
aXQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOwogI2lmbmRlZiBOREVCVUcKLSAg
ICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIpLCBmdW5jdGlvblJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5IiksIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKICNlbmRpZgotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7Ci0gICAgcHV0RGly
ZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihn
bG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAicnVuIiksIGZ1bmN0aW9uUnVuKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
bG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRh
eCIpLCBmdW5jdGlvbkNoZWNrU3ludGF4KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMs
IGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVhZGxp
bmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9u
VmVyc2lvbikpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
bG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiY2hlY2tTeW50YXgiKSwgZnVuY3Rp
b25DaGVja1N5bnRheCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWFkbGluZSIpLCBmdW5jdGlvblJlYWRsaW5l
KSk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
c2V0U2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvblNldFNhbXBsaW5nRmxhZ3MpKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25DbGVhclNhbXBsaW5n
RmxhZ3MpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246
OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50
aWZpZXIoZ2xvYmFsRXhlYygpLCAic2V0U2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvblNldFNhbXBs
aW5nRmxhZ3MpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rp
b246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElk
ZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uQ2xl
YXJTYW1wbGluZ0ZsYWdzKSk7CiAjZW5kaWYKIAogICAgIEpTT2JqZWN0KiBhcnJheSA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygpKTsKQEAgLTIyNyw3ICsyMzIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0
aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCBv
cGVuIGZpbGUuIikpKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3ICgm
ZXhlYy0+Z2xvYmFsRGF0YSgpKSBHbG9iYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwg
VmVjdG9yPFVTdHJpbmc+KCkpOworICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xv
YmFsT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBHbG9iYWxPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSwgVmVjdG9yPFVTdHJpbmc+
KCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKICAgICBzdG9wV2F0Y2guc3RhcnQoKTsK
QEAgLTU1Miw3ICs1NTcsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YsIEpT
R2xvCiAgICAgT3B0aW9ucyBvcHRpb25zOwogICAgIHBhcnNlQXJndW1lbnRzKGFyZ2MsIGFyZ3Ys
IG9wdGlvbnMsIGdsb2JhbERhdGEpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBuZXcgKGdsb2JhbERhdGEpIEdsb2JhbE9iamVjdCgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVu
dHMpOworICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVh
dGUoKmdsb2JhbERhdGEsIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRh
LCBqc051bGwoKSksIG9wdGlvbnMuYXJndW1lbnRzKTsKICAgICBib29sIHN1Y2Nlc3MgPSBydW5X
aXRoU2NyaXB0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMuc2NyaXB0cywgb3B0aW9ucy5kdW1wKTsK
ICAgICBpZiAob3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBzdWNjZXNzKQogICAgICAgICBydW5JbnRl
cmFjdGl2ZShnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDYWxsYmFj
a0NvbnN0cnVjdG9yIDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci1wdWJsaWM6
Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgSlNDbGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNr
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNh
bGxiYWNrIGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU0NhbGxiYWNrQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGNsYXNzUmVmLCBjYWxsYmFjayk7CisgICAg
fQorICAgIAogICAgIHZpcnR1YWwgfkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcigpOwogICAgIEpTQ2xh
c3NSZWYgY2xhc3NSZWYoKSBjb25zdCB7IHJldHVybiBtX2NsYXNzOyB9CiAgICAgSlNPYmplY3RD
YWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
YmFjazsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tG
dW5jdGlvbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDE1IEBACiBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDYWxsYmFja0Z1bmN0aW9uIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24gewotcHVibGljOgorcHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tGdW5jdGlv
bihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxs
YmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSk7CiAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlND
YWxsYmFja0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGNv
bnN0IElkZW50aWZpZXImIG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8SlNDYWxsYmFja0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja0Z1bmN0
aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgY2FsbGJhY2ssIG5hbWUpOworICAgIH0KKwogICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgIAogICAgIC8vIEludGVybmFsRnVuY3Rp
b24gbWlzaC1tYXNoZXMgY29uc3RydWN0b3IgYW5kIGZ1bmN0aW9uIGJlaGF2aW9yIC0tIHdlIHNo
b3VsZCAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxs
YmFja09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOSArMTE2LDIyIEBAIHN0cnVjdCBK
U0NhbGxiYWNrT2JqZWN0RGF0YSA6IFdlYWtIYW5kbGUKICAgICAKIHRlbXBsYXRlIDxjbGFzcyBC
YXNlPgogY2xhc3MgSlNDYWxsYmFja09iamVjdCA6IHB1YmxpYyBCYXNlIHsKLXB1YmxpYzoKK3By
b3RlY3RlZDoKICAgICBKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgSlNDbGFzc1JlZiwgdm9pZCogZGF0YSk7CiAgICAgSlNDYWxsYmFja09i
amVjdChKU0dsb2JhbERhdGEmLCBKU0NsYXNzUmVmLCBTdHJ1Y3R1cmUqKTsKKyAgICAvLyBUaGlz
IHZlcnNpb24gb2Ygb3BlcmF0b3IgbmV3IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGNhbid0IHRl
bGwgc3RhdGljYWxseSAKKyAgICAvLyB0aGF0IEJhc2Ugd2lsbCBpbmhlcml0IHRoZSBjb3JyZWN0
IHBsYWNlbWVudCB2ZXJzaW9uIG9mIG9wZXJhdG9yIG5ldyBmcm9tIEpTQ2VsbC4KKyAgICB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwdHIpIHsgcmV0dXJuIHB0cjsgfQorCitwdWJs
aWM6CisgICAgc3RhdGljIEpTQ2FsbGJhY2tPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0Ns
YXNzUmVmIGNsYXNzUmVmLCB2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNr
T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBjbGFzc1JlZiwgZGF0YSk7Cisg
ICAgfQorICAgIHN0YXRpYyBKU0NhbGxiYWNrT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0Pihn
bG9iYWxEYXRhLT5oZWFwKSkgSlNDYWxsYmFja09iamVjdCgqZ2xvYmFsRGF0YSwgY2xhc3NSZWYs
IHN0cnVjdHVyZSk7CisgICAgfQogCiAgICAgdm9pZCBzZXRQcml2YXRlKHZvaWQqIGRhdGEpOwog
ICAgIHZvaWQqIGdldFByaXZhdGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NjAsNyArNTYwLDcgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrT2Jq
ZWN0PEJhc2U+OjpzdGF0aWNGdQogICAgICAgICAgICAgaWYgKFN0YXRpY0Z1bmN0aW9uRW50cnkq
IGVudHJ5ID0gc3RhdGljRnVuY3Rpb25zLT5nZXQocHJvcGVydHlOYW1lLmltcGwoKSkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxBc0Z1
bmN0aW9uID0gZW50cnktPmNhbGxBc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogbyA9IG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1
bmN0aW9uKGV4ZWMsIGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdldEFub255bW91c1ZhbHVlKDAp
KSwgY2FsbEFzRnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIEpT
T2JqZWN0KiBvID0gSlNDYWxsYmFja0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgYXNHbG9iYWxPYmpl
Y3QodGhpc09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlvbiwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgdGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBvLCBlbnRyeS0+YXR0cmlidXRlcyk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTEsNyArMjUxLDcgQEAgSlNPYmplY3QqIE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZShFeGVjUwog
CiAgICAgaWYgKCFqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUpIHsKICAgICAgICAgLy8gUmVj
dXJzaXZlLCBidXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMKLSAgICAg
ICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIG5l
dyAoZXhlYykgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5jYWxsYmFja09iamVjdFN0cnVjdHVyZSgpLCBwcm90b3R5cGVDbGFzcywgJmpzQ2xhc3NEYXRh
KSwgMCk7IC8vIHNldCBqc0NsYXNzRGF0YSBhcyB0aGUgb2JqZWN0J3MgcHJpdmF0ZSBkYXRhLCBz
byBpdCBjYW4gY2xlYXIgb3VyIHJlZmVyZW5jZSBvbiBkZXN0cnVjdGlvbgorICAgICAgICBqc0Ns
YXNzRGF0YS5jYWNoZWRQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgSlNDYWxsYmFj
a09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNr
T2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8g
c2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBj
bGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCiAgICAgICAgIGlmIChwYXJlbnRDbGFz
cykgewogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBwYXJlbnRDbGFzcy0+
cHJvdG90eXBlKGV4ZWMpKQogICAgICAgICAgICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3Rv
dHlwZS0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENv
bnRleHRDcmVhdGUKICAgICAgICAgcmV0dXJuIEpTR2xvYmFsQ29udGV4dFJldGFpbih0b0dsb2Jh
bFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkpOwogICAgIH0KIAotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcgKGdsb2JhbERhdGEuZ2V0KCkpIEpTQ2FsbGJhY2tP
YmplY3Q8SlNHbG9iYWxPYmplY3Q+KCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlND
YWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0
YSwganNOdWxsKCkpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZShnbG9iYWxEYXRhLmdldCgpLCBnbG9i
YWxPYmplY3RDbGFzcywgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0
cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdsb2Jh
bE9iamVjdENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKCFwcm90b3R5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250
ZXh0UmVmIGN0CiAgICAgaWYgKCFqc0NsYXNzKQogICAgICAgICByZXR1cm4gdG9SZWYoY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdp
dGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNP
YmplY3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwg
anNDbGFzcywgZGF0YSk7CisgICAgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxP
YmplY3Q+KiBvYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0
YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhl
YykpCiAgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
dG90eXBlKTsKIApAQCAtOTUsNyArOTUsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5j
dGlvbldpdGhDYWxsCiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVu
dGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3Vz
Iik7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVmKG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1bmN0aW9u
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEFzRnVuY3Rpb24sIG5hbWVJ
RCkpOworICAgIHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lSUQpKTsKIH0K
IAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDb250ZXh0UmVmIGN0eCwg
SlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2Fs
bEFzQ29uc3RydWN0b3IpCkBAIC0xMDcsNyArMTA3LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RN
YWtlQ29uc3RydWN0b3IoSlNDbwogICAgIGlmICghanNQcm90b3R5cGUpCiAgICAgICAgIGpzUHJv
dG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsK
IAotICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0Ns
YXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7CisgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25z
dHJ1Y3RvciA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0Nv
bnN0cnVjdG9yU3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKICAgICBj
b25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0b3IpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3MzUsNyArMTczNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3Rp
dmF0aW9uKENhbGxGcmEKICAgICBBU1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpTQWN0
aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoY2FsbEZyYW1lKSBKU0FjdGl2YXRpb24oY2FsbEZy
YW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkp
OworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKCYo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2Fs
bEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKGFjdGl2
YXRpb24pKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFBybwogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1
bmN0aW9uU3RhY2tbaV07CiAgICAgICAgIGdsb2JhbE9iamVjdC0+cmVtb3ZlRGlyZWN0KCptX2ds
b2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVudCgpKTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25z
IG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVzLgogCi0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9u
KSwgc2NvcGVDaGFpbik7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CiAgICAg
ICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihmdW5jdGlvbi0+aWRlbnQoKSwgZmFsc2UpOwog
ICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqbV9nbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTeW50
YXhFcnJvcihjYWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25z
dHJ1Y3Rvci4iKTsKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKG5ldyAoZ2xvYmFsRGF0YSkg
UmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUt
PnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7
CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShSZWdFeHBPYmpl
Y3Q6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCkpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19yZWdleHAp
OwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMzY1LDcgKzMzNjUsNyBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAg
ICB9CiAgICAgICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAg
ICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEs
IGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRz
UmVnaXN0ZXIpID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcikp
ID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICB9CkBAIC00NDk1LDcgKzQ0OTUsNyBAQCBz
a2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGludCBhY3RpdmF0aW9uUmVnID0gdlBDWzFd
LnUub3BlcmFuZDsKICAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJlZykuanNW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGds
b2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAgICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEs
IGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGFjdGl2YXRpb25S
ZWcpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2Nv
cGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAg
ICAgIH0KQEAgLTQ2MDUsNyArNDYwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAg
IGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCiAgICAgICAgIGlmICghY2FsbEZyYW1lLT5y
KGRzdCkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXJndW1l
bnRzKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgIH0KQEAgLTUw
NjcsMTMgKzUwNjcsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMo
QwogICAgICAgICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1l
bnRzID0gZnVuY3Rpb25DYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpz
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgICAgIEpTVmFsdWUg
YXJndW1lbnRzID0gSlNWYWx1ZShuZXcgKGNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2Fs
bEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShBcmd1bWVudHM6
OmNyZWF0ZSgmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKSwgZnVuY3Rpb25DYWxsRnJhbWUpKTsK
ICAgICAgICAgZnVuY3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1l
bnRzOwogICAgICAgICBmdW5jdGlvbkNhbGxGcmFtZS0+cihyZWFsQXJndW1lbnRzUmVnaXN0ZXIp
ID0gYXJndW1lbnRzOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KIAotICAgIEFy
Z3VtZW50cyogYXJndW1lbnRzID0gbmV3IChmdW5jdGlvbkNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1
bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6
Y3JlYXRlKCYoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2JhbERhdGEoKSksIGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKICAgICBhcmd1bWVudHMtPmNvcHlSZWdpc3RlcnMoZnVuY3Rpb25DYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYyLDcgKzIw
NjIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKCYoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNj
b3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0
aW9uKSk7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CkBAIC0yMTEwLDcgKzIxMTAsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBu
ZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUuY2FsbEZyYW1l
KTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKHN0YWNrRnJh
bWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKIH0KIApAQCAtMjExOCw3ICsyMTE4LDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogewogICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
bmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEFyZ3VtZW50cyhzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgQXJndW1lbnRzOjpOb1BhcmFtZXRlcnMpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0g
QXJndW1lbnRzOjpjcmVhdGUoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxG
cmFtZSwgQXJndW1lbnRzOjpOb1BhcmFtZXRlcnMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKIH0KIApAQCAtMzEyOCw3ICszMTI4LDcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9uZXdfcgogICAgICAgICBWTV9USFJPV19FWENF
UFRJT04oKTsKICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEp
IFJlZ0V4cE9iamVjdChzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoc3RhY2tG
cmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wX2JpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
dW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
dW1lbnRzLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE0ICs1OSwyNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlwZSB7IE5vUGFyYW1l
dGVycyB9OworICAgICAgICAKKyAgICAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2JhbERhdGEt
PmhlYXApKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIE5vUGFyYW1ldGVyc1R5cGUgbm9QYXJhbXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2JhbERh
dGEtPmhlYXApKSBBcmd1bWVudHMoY2FsbEZyYW1lLCBub1BhcmFtcyk7CisgICAgICAgIH0KKwog
ICAgICAgICAvLyBVc2UgYW4gZW51bSBiZWNhdXNlIG90aGVyd2lzZSBnY2MgaW5zaXN0cyBvbiBk
b2luZyBhIG1lbW9yeQogICAgICAgICAvLyByZWFkLgogICAgICAgICBlbnVtIHsgTWF4QXJndW1l
bnRzID0gMHgxMDAwMCB9OwotCi0gICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlwZSB7IE5vUGFy
YW1ldGVycyB9OwotCisgICAgCisgICAgcHJpdmF0ZToKICAgICAgICAgQXJndW1lbnRzKENhbGxG
cmFtZSopOwogICAgICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0ZXJzVHlwZSk7
CisKKyAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkFyZ3VtZW50cygpOwogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3OSwxMSBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0
KiBjb25zdHJ1Y3RBcnJheVdpCiAgICAgICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KDApLnRvVUlu
dDMyKGV4ZWMpOwogICAgICAgICBpZiAobiAhPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKQog
ICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7
Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKKyAg
ICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgbiwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAog
ICAgIC8vIG90aGVyd2lzZSB0aGUgYXJyYXkgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgYXJndW1l
bnRzIGluIGl0Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CisgICAgcmV0dXJuIEpT
QXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmUoKSwgYXJncyk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25z
dHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZTsKIAogICAgIGNsYXNzIEFycmF5Q29uc3RydWN0
b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAgICAgICBBcnJh
eUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQXJy
YXlQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQXJy
YXlDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFycmF5UHJvdG90eXBlKiBhcnJQcm90
b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxB
cnJheUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgYXJyUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRlbGV0ZURvdWJsZSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogcmVzT2JqID0g
bmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3JlYXRlQ29tcGFjdCk7
CisgICAgSlNBcnJheSogcmVzT2JqID0gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVD
b3VudCwgQ3JlYXRlQ29tcGFjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGZvciAo
dW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDkgKzI3LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNz
IEFycmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKICAgICAgICAg
ZXhwbGljaXQgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEFycmF5UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFy
cmF5UHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlQcm90b3R5cGUoZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBCb29s
ZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiAvLyBFQ01BIDE1LjYuMgogSlNP
YmplY3QqIGNvbnN0cnVjdEJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IG5ldyAoZXhlYykgQm9vbGVhbk9iamVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSkt
Pmdsb2JhbE9iamVjdCgpLT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJvb2xlYW5P
YmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5ib29sZWFu
T2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9i
YWxEYXRhKCksIGpzQm9vbGVhbihhcmdzLmF0KDApLnRvQm9vbGVhbihleGVjKSkpOwogICAgIHJl
dHVybiBvYmo7CiB9CkBAIC03MSw3ICs3MSw3IEBAIENhbGxUeXBlIEJvb2xlYW5Db25zdHJ1Y3Rv
cjo6Z2V0Q2FsbERhdGEKIAogSlNPYmplY3QqIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRl
Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgaW1tZWRpYXRlQm9vbGVhblZhbHVlKQogewotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9
IG5ldyAoZXhlYykgQm9vbGVhbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBC
b29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmJv
b2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgaW1tZWRpYXRlQm9vbGVhblZhbHVlKTsKICAgICByZXR1cm4gb2JqOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGU7CiAKICAgICBj
bGFzcyBCb29sZWFuQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAg
cHVibGljOgogICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBCb29sZWFuUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIEJvb2xlYW5Db25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuQ29uc3RydWN0b3I+KCpleGVjLT5o
ZWFwKCkpKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IGJvb2xQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewotICAg
IHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEJvb2xlYW5PYmplY3Qo
SlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBCb29sZWFuT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEJvb2xlYW5PYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEJvb2xlYW5PYmplY3QoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwx
NCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCb29sZWFuUHJvdG90eXBlIDogcHVi
bGljIEJvb2xlYW5PYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgQm9vbGVhblByb3RvdHlw
ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgQm9vbGVhblByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuUHJv
dG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQm9vbGVhblByb3RvdHlwZShleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBKU09i
amVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgZ2xvYmFsT2JqZWN0LT5k
YXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUo
ZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKIH0KICAgICAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhEYXRlQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIERhdGVQcm90b3R5cGU7
CiAKICAgICBjbGFzcyBEYXRlQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
Ci0gICAgcHVibGljOgogICAgICAgICBEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBEYXRlUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IERhdGVQcm90b3R5cGUqIGRhdGVQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBE
YXRlQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGRhdGVQcm90b3R5
cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5o
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJ
bnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAsMjAgQEAgbmFtZXNwYWNlIFdU
RiB7CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIERhdGVJbnN0YW5jZSA6IHB1YmxpYyBK
U1dyYXBwZXJPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIERh
dGVJbnN0YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBkb3VibGUpOwogICAgICAgICBleHBs
aWNpdCBEYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Ci0KKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgZG91YmxlIGRhdGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+KCpleGVjLT5o
ZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlLCBkYXRlKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVj
LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBkb3VibGUgaW50ZXJu
YWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbFZhbHVlKCkudW5jaGVja2VkR2V0TnVt
YmVyKCk7IH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90
b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIERhdGVQ
cm90b3R5cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKLSAgICBwdWJsaWM6CiAgICAgICAgIERh
dGVQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0
ZVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NiwxMiArMTY2LDE3IEBAIEpTT2JqZWN0KiB0aHJvd1N5bnRheEVycm9yKEV4ZWNTdGF0ZSog
ZXgKIH0KIAogY2xhc3MgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24gewotcHVibGljOgogICAgIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICA6IEludGVybmFsRnVu
Y3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGV4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIpCiAgICAgICAgICwg
bV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgewogICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyBT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3Ry
aW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0
cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIFN0cmljdE1vZGVUeXBl
RXJyb3JGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbWVzc2FnZSk7Cisg
ICAgfQogICAgIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7CkBAIC0yMDUsNyArMjEw
LDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJpY3RNb2RlVHlwZQogCiBKU1ZhbHVl
IGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYg
bWVzc2FnZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpY3RNb2RlVHlwZUVycm9yRnVu
Y3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAg
cmV0dXJuIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5pbnRlcm5h
bEZ1bmN0aW9uU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZTsKIAogICAgIGNsYXNzIEVycm9y
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAg
ICAgICBFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgRXJyb3JQcm90b3R5cGUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEVy
cm9yQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFcnJvclByb3RvdHlwZSogZXJyUHJv
dG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
RXJyb3JDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEVycm9yQ29uc3RydWN0b3IoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGVyclByb3RvdHlwZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENh
bGxEYXRhKENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MTQgKzQzLDE0IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXQKIAog
RXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0g
ICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIG1lc3NhZ2UpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckluc3Rh
bmNlPihnbG9iYWxEYXRhLT5oZWFwKSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIG1lc3NhZ2UpOwogfQogCiBFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlKQog
ewogICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKLSAgICBy
ZXR1cm4gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVj
dHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5jZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBj
bGFzcyBFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6
CiAgICAgICAgIEVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFcnJvclByb3RvdHlwZSog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxFcnJvclByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEVycm9yUHJvdG90eXBl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1
ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTIgKzQyLDE3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSW50ZXJydXB0ZWRFeGVj
dXRpb25FcnJvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLXB1YmxpYzoKICAgICBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAg
OiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLT5oZWFwKSkgSW50ZXJydXB0ZWRFeGVj
dXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIENvbXBsVHlwZSBl
eGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0ZWQ7IH0KIAogICAgIHZpcnR1
YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdCB7IHJldHVybiAiSmF2YVNjcmlw
dCBleGVjdXRpb24gZXhjZWVkZWQgdGltZW91dC4iOyB9CkBAIC01NSwxNiArNjAsMjEgQEAgcHVi
bGljOgogCiBKU09iamVjdCogY3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIElu
dGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIEludGVycnVw
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAogY2xhc3MgVGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewotcHVibGljOgog
ICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAg
ICAgICAgIDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+dGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS0+aGVhcCkpIFRlcm1pbmF0ZWRF
eGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIENvbXBsVHlw
ZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gVGVybWluYXRlZDsgfQogCiAgICAgdmly
dHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0IHsgcmV0dXJuICJKYXZhU2Ny
aXB0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVkLiI7IH0KQEAgLTcyLDcgKzgyLDcgQEAgcHVibGljOgog
CiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgVGVybWluYXRl
ZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgIHJldHVybiBUZXJtaW5hdGVkRXhlY3V0
aW9uRXJyb3I6OmNyZWF0ZShnbG9iYWxEYXRhKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCAr
NTIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEID0gLTE7Ci0gICAgCi0gICAgcHVibGlj
OgorCisgICAgcHJvdGVjdGVkOgogICAgICAgICBFeGVjdXRhYmxlQmFzZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbnVtUGFyYW1ldGVycykKICAg
ICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKICAgICAgICAgICAgICwg
bV9udW1QYXJhbWV0ZXJzRm9yQ2FsbChudW1QYXJhbWV0ZXJzKQpAQCAtNjQsNiArNjQsMTIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBmaW5hbGl6ZXIubGVha0hhbmRsZSgpOwogI2Vu
ZGlmCiAgICAgICAgIH0KKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXhl
Y3V0YWJsZUJhc2UqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQgbnVtUGFyYW1ldGVycykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEV4ZWN1dGFibGVCYXNlPihnbG9iYWxEYXRhLmhlYXApKSBF
eGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIG51bVBhcmFtZXRlcnMpOworICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0CiAgICAgICAgIHsK
QEAgLTE2NiwxMyArMTcyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgTmF0
aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKQotICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJ
VENvZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29uc3RydWN0b3IpOwotICAgICAgICAgICAg
cmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklU
Q29kZTo6SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpIb3N0RnVu
Y3Rpb24oY29uc3RydWN0VGh1bmspLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkp
IE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29k
ZSgpLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9i
YWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgZnVuY3Rpb24sIEpJVENv
ZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGNvbnN0cnVjdG9yKTsKICAgICAgICAg
fQogI2Vsc2UKICAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2Jh
bERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9y
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxl
PihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9u
LCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KICNlbmRpZgogCkBAIC0yOTAsNyArMjk2LDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2V2YWxDb2RlQmxvY2s7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4
dCkgeyByZXR1cm4gbmV3IChleGVjKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5T
dHJpY3RDb250ZXh0KTsgfQorICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0
Q29udGV4dCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxFdmFsRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEV2YWxFeGVjdXRhYmxlKGV4ZWMsIHNv
dXJjZSwgaXNJblN0cmljdENvbnRleHQpOyAKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZSgpCkBAIC0zMTksNyArMzI4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUHJvZ3JhbUV4ZWN1
dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvZ3JhbUV4ZWN1dGFi
bGUoZXhlYywgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxQ
cm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMs
IHNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICB+UHJvZ3JhbUV4ZWN1dGFibGUoKTsKQEAg
LTM3MiwxNyArMzgxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAg
c3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNl
c0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1lLCBz
b3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQs
IGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJs
ZShleGVjLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJ
blN0cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBi
b29sIGlzSW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEZ1bmN0aW9uRXhlY3V0
YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1l
dGVycywgaXNJblN0cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0
YS0+aGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBzb3VyY2UsIGZv
cmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQsIGZpcnN0TGlu
ZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKICAgICAgICAgSlNGdW5jdGlvbiogbWFrZShFeGVj
U3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIHRoaXMsIHNjb3BlQ2hh
aW4pOworICAgICAgICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBz
Y29wZUNoYWluKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmV0dXJucyBlaXRo
ZXIgY2FsbCBvciBjb25zdHJ1Y3QgYnl0ZWNvZGUuIFRoaXMgY2FuIGJlIGFwcHJvcHJpYXRlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDgg
KzExMiw4IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEUKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgZXhjZXB0aW9uKTsKICAgICB9CiAKLSAgICBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IG5ldyAoZXhlYykgU2NvcGVDaGFpbk5vZGUoMCwgZ2xv
YmFsT2JqZWN0LCAmZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBleGVjLT5nbG9iYWxUaGlzVmFs
dWUoKSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBmdW5jdGlvbiwg
c2NvcGVDaGFpbik7CisgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBTY29wZUNoYWlu
Tm9kZTo6Y3JlYXRlKGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgJmdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4pOwogfQogCiAvLyBFQ01BIDE1LjMuMiBU
aGUgRnVuY3Rpb24gQ29uc3RydWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBG
dW5jdGlvblByb3RvdHlwZTsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ29uc3RydWN0b3IgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRnVuY3Rpb25Q
cm90b3R5cGUqKTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkNv
bnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90
b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxG
dW5jdGlvbkNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgRnVuY3Rpb25Db25zdHJ1Y3Rvcihl
eGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZnVuY1Byb3RvdHlwZSk7CisgICAgICAgIH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTAgQEAgRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEV4ZQogCiB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3Bl
cnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1
bmN0aW9uKiogYXBwbHlGdW5jdGlvbikKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1
bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgKmFwcGx5RnVuY3Rpb24g
PSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVj
dHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAwLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcp
LCBEb250RW51bSk7CisgICAgKmFwcGx5RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7Ci0gICAg
KmNhbGxGdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rp
b25Qcm90b0Z1bmNDYWxsKTsKKyAgICAqY2FsbEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jYWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOwogICAgIHB1dERpcmVjdEZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDE2IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25Qcm90b3R5
cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9p
ZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1
bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBG
dW5jdGlvblByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvblByb3RvdHlwZT4oKmV4ZWMtPmhl
YXAoKSkpIEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMo
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJl
LCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7
CisgICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG8sIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZv
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5o
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRl
clNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgLy8gZm9yIGEgcHJvcGVydHkuCiAgICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgcHVibGljOgorICAg
ICAgICAKICAgICAgICAgR2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
IDogSlNDZWxsKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLmdldHRlclNl
dHRlclN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBHZXR0ZXJTZXR0ZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxHZXR0ZXJTZXR0
ZXI+KCpleGVjLT5oZWFwKCkpKSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CisgICAgICAgIH0KKwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCiAgICAgICAg
IEpTT2JqZWN0KiBnZXR0ZXIoKSBjb25zdCB7IHJldHVybiBtX2dldHRlci5nZXQoKTsgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBl
ci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QVBJVmFsdWVXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBl
ciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4oKmV4
ZWMtPmhlYXAoKSkpIEpTQVBJVmFsdWVXcmFwcGVyKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgfQog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNTYsNyArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGlubGluZSBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQVBJVmFsdWVXcmFw
cGVyKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVh
dGUoZXhlYywgdmFsdWUpOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw3IEBAIEpTVmFsdWUgSlNBY3RpdmF0aW9u
Ojphcmd1bWVudHNHZXR0ZXIoRXgKICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsKICAgICBpbnQg
cmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKTsKIAotICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShuZXcgKGNh
bGxGcmFtZSkgQXJndW1lbnRzKGNhbGxGcmFtZSkpOworICAgIEpTVmFsdWUgYXJndW1lbnRzID0g
SlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZSgmKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKSwgY2Fs
bEZyYW1lKSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFyZ3VtZW50c1JlZ2lzdGVyKSA9
IGFyZ3VtZW50czsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIocmVhbEFyZ3VtZW50c1JlZ2lz
dGVyKSA9IGFyZ3VtZW50czsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0
MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAKICAgICBjbGFzcyBKU0FjdGl2YXRpb24gOiBw
dWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVj
dCBCYXNlOwotICAgIHB1YmxpYzoKICAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIEZ1
bmN0aW9uRXhlY3V0YWJsZSopOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpT
QWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KGdsb2JhbERhdGEt
PmhlYXApKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBmdW5jRXhlYyk7CisgICAgICAgIH0KKwog
ICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwzMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0FycmF5IDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgewogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2VyOwogCi0gICAgcHVibGljOgotICAgICAg
ICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsKLQorICAgIHByb3RlY3RlZDoKICAgICAg
ICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAg
SlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3Ro
LCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAgICAgIEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZhbHVlcyk7CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRyU3RlYWxpbmdIYWNrVHlwZSk7CiAgICAgICAgIHZp
cnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCwgQXJyYXlDcmVh
dGlvbk1vZGUgY3JlYXRlTW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoLCBjcmVhdGVNb2RlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNBcnJh
eT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRp
YWxWYWx1ZXMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3
NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY2VsbC0+fkpTQ2VsbCgpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVh
cCkKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFwLmFsbG9jYXRlKHNpemVvZihUKSk7CisgICAg
fQorICAgICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNDZWxsX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAgIHB1YmxpYzoK
ICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7CiAgICAg
ICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBp
bnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRXhlY3V0YWJsZSopOwogICAgICAg
ICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uRXhlY3V0YWJsZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24q
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9u
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgsIGlkZW50LCBuYXRpdmVGdW5j
KTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBOYXRpdmVFeGVjdXRhYmxl
KiBuYXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQsIG5hdGl2ZUV4ZWMpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+
KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1bmNFeGVjLCBzY29wZUNoYWluKTsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdmlydHVhbCB+SlNGdW5jdGlvbigpOwogCiAg
ICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA5
MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICBzdHJ1Y3R1cmUoKS0+ZGlzYWJsZVNwZWNpZmljRnVu
Y3Rpb25UcmFja2luZygpOwogCiAgICAgbV9nbG9iYWxEYXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+
Z2xvYmFsRGF0YSgpOwotICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbmV3IChtX2dsb2JhbERhdGEuZ2V0KCkpIFNjb3BlQ2hhaW5Ob2RlKDAsIHRoaXMsIG1f
Z2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CisgICAgbV9nbG9iYWxTY29wZUNo
YWluLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRo
aXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhpc1ZhbHVlKSk7CiAKICAgICBKU0dsb2Jh
bE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAsIG1fZ2xvYmFsU2NvcGVDaGFpbi5nZXQo
KSwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAwLCAwKTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KIHsKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwogCi0gICAgbV9mdW5jdGlvblBy
b3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEZ1bmN0aW9u
UHJvdG90eXBlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdp
bGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCisgICAgbV9mdW5jdGlv
blByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBGdW5jdGlvblByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBlIHdp
bGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCiAgICAgbV9mdW5jdGlv
blN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxs
RnVuY3Rpb24gPSAwOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJl
c2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5jdGlvblBy
b3BlcnRpZXMoZXhlYywgdGhpcywgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgJmNhbGxGdW5j
dGlvbiwgJmFwcGx5RnVuY3Rpb24pOwogICAgIG1fY2FsbEZ1bmN0aW9uLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIGNhbGxGdW5jdGlvbik7CiAgICAgbV9hcHBseUZ1bmN0aW9uLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFwcGx5RnVuY3Rpb24pOwotICAgIG1fb2JqZWN0UHJv
dG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgT2JqZWN0UHJv
dG90eXBlKGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7CisgICAgbV9vYmplY3RQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBq
c051bGwoKSkpKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJv
dG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSk7CiAKICAgICBtX2VtcHR5T2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9i
YWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLT5pbmhlcml0b3JJRChleGVjLT5nbG9i
YWxEYXRhKCkpKTsKQEAgLTIwNiw1NCArMjA2LDU0IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJl
c2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNrQ29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja0NvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwog
ICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogCi0g
ICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4
ZWMpIEFycmF5UHJvdG90eXBlKHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2Fy
cmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fYXJyYXlT
dHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogICAg
IG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBTdHJpbmdQcm90b3R5cGUoZXhl
YywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3N0cmluZ1Byb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZShleGVj
LCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ09iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpKTsKIAot
ICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcg
KGV4ZWMpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgdGhpcywgQm9vbGVhblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CisgICAgbV9ib29sZWFuUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKICAgICBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX251bWJlclByb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE51bWJlclByb3RvdHlwZShl
eGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fbnVtYmVyUHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9udW1iZXJPYmplY3RTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTnVtYmVyT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX251bWJlclByb3RvdHlwZS5nZXQoKSkpOwog
Ci0gICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAo
ZXhlYykgRGF0ZVByb3RvdHlwZShleGVjLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRGF0ZVByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwogICAgIG1fZGF0
ZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkp
OwogCiAgICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgIiIsIE5vRmxhZ3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMs
IHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CisgICAgbV9yZWdFeHBQ
cm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKICAg
ICBtX3JlZ0V4cFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fcmVnRXhwUHJvdG90
eXBlLmdldCgpKSk7CiAKICAgICBtX21ldGhvZENhbGxEdW1teS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKSk7CiAKLSAgICBFcnJvclByb3Rv
dHlwZSogZXJyb3JQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEVycm9yUHJvdG90eXBlKGV4ZWMsIHRo
aXMsIEVycm9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpOworICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3Rv
dHlwZSA9IEVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSk7CiAgICAgbV9lcnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBFcnJvckluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJv
clByb3RvdHlwZSkpOwogCiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU0NlbGwqIG9iamVj
dENvbnN0cnVjdG9yID0gbmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBP
YmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAgICBK
U0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uQ29uc3RydWN0
b3IoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykg
QXJyYXlDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9h
cnJheVByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5l
dyAoZXhlYykgU3RyaW5nQ29uc3RydWN0b3IoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBib29sZWFuQ29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBCb29s
ZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOwotICAgIEpT
Q2VsbCogbnVtYmVyQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4
ZWMsIHRoaXMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0
KCkpOwotICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3Ry
dWN0b3IoZXhlYywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBl
LmdldCgpKTsKKyAgICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0
b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBGdW5j
dGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYXJyYXlDb25z
dHJ1Y3RvciA9IEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJp
bmdDb25zdHJ1Y3RvciA9IFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3Ry
aW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7CisgICAgSlND
ZWxsKiBib29sZWFuQ29uc3RydWN0b3IgPSBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0
KCkpOworICAgIEpTQ2VsbCogbnVtYmVyQ29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90
b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJv
dG90eXBlLmdldCgpKTsKIAotICAgIG1fcmVnRXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBS
ZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CisgICAg
bV9yZWdFeHBDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhl
YywgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJvdG90eXBlKSk7CisgICAg
bV9lcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9yQ29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJy
b3JQcm90b3R5cGUpKTsKIAogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1
Y3R1cmUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXJyb3JQcm90b3R5cGUpOwogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1
Y3R1cmUgPSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKLSAgICBtX2V2YWxFcnJvckNv
bnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZl
RXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZl
RXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7Ci0gICAgbV9yYW5nZUVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7Ci0gICAgbV9yZWZlcmVu
Y2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhl
YykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVy
ZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIpKTsKLSAg
ICBtX3N5bnRheEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9y
U3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIikp
OwotICAgIG1fdHlwZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIp
KTsKLSAgICBtX1VSSUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikp
OworICAgIG1fZXZhbEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9y
U3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIpKTsK
KyAgICBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JT
dHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIpKTsK
KyAgICBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJlZmVyZW5jZUVy
cm9yIikpOworICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0
aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiU3ludGF4
RXJyb3IiKSk7CisgICAgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0
aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVHlwZUVy
cm9yIikpOworICAgIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZl
RXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVVJJRXJyb3Ii
KSk7CiAKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJh
bnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3Rvciwgb2JqZWN0Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5wdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9y
LCBEb250RW51bSk7CkBAIC0yODEsMTUgKzI4MSwxNSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpy
ZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJvciIpLCBtX3R5
cGVFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywg
IlVSSUVycm9yIiksIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogCi0g
ICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVj
KSBKU0Z1bmN0aW9uKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOworICAgIG1fZXZhbEZ1
bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CiAKICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmpl
Y3QoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwK
KyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgTWF0
aE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMs
ICJOYU4iKSwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5maW5pdHkiKSwganNO
dW1iZXIoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRl
bnRpZmllcihleGVjLCAidW5kZWZpbmVkIiksIGpzVW5kZWZpbmVkKCksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZp
ZXIoZXhlYywgIkpTT04iKSwgbmV3IChleGVjKSBKU09OT2JqZWN0KHRoaXMsIEpTT05PYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSkKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KElkZW50aWZpZXIoZXhlYywgIkpTT04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSkKICAgICB9OwogICAgIGFk
ZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9i
YWxzKSk7CiAKQEAgLTM5NSwxMSArMzk1LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzaXpl
UmVnaXN0ZXJzKHNpegogICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXku
cmVsZWFzZSgpLCBuZXdTaXplKTsKIH0KIAotdm9pZCogSlNHbG9iYWxPYmplY3Q6Om9wZXJhdG9y
IG5ldyhzaXplX3Qgc2l6ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotewotICAgIHJldHVy
biBnbG9iYWxEYXRhLT5oZWFwLmFsbG9jYXRlKHNpemUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNv
dW50KQogewogICAgIHJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOCArMTIyLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9ldmFsRW5hYmxlZDsKIAogICAgIHB1YmxpYzoKLSAg
ICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7Ci0KICAgICAg
ICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlLCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lz
dGVyQXJyYXlTaXplKDApCkBAIC0yODcsOCArMjg1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcmVzZXQoSlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgICAgIHZvaWQgc2V0UmVn
aXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8
V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KTsKLQot
ICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsgLy8gY2FuIG9ubHkgYmUgYWxsb2Nh
dGVkIHdpdGggSlNHbG9iYWxEYXRhCiAgICAgfTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBhc0ds
b2JhbE9iamVjdChKU1ZhbHVlKTsKQEAgLTM3OCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCiAg
ICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjKQpA
QCAtMzg4LDcgKzM4NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkq
IGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlTdHJ1Y3R1cmUoKSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOworICAgICAg
ICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJbml0aWFsaXplZCk7CiAg
ICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQpAQCAtNDAwLDcgKzM5Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHsKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOwog
ICAgICAgICB2YWx1ZXMuYXBwZW5kKHNpbmdsZUl0ZW1WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlKCksIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7
CiAgICAgfQogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzaW5nbGVJdGVtVmFsdWUpCkBAIC00MTAsNyArNDA2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2YWx1
ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOworICAgICAg
ICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5
KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RB
bk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgLy8gaW4gY2VydGFpbiBTcXVpcnJlbEZpc2ggYnl0ZWNvZGVzIC0tIGVmZmVjdGl2
ZWx5IGl0IGp1c3Qgc2lsZW50bHkgY29uc3VtZXMKICAgICAvLyBhbnkgb3BlcmF0aW9ucyBwZXJm
b3JtZWQgb24gdGhlIHJlc3VsdCBvZiBhIGZhaWxlZCB0b09iamVjdCBjYWxsLgogICAgIGNsYXNz
IEpTTm90QW5PYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci0gICAgcHVibGljOgog
ICAgICAgICBKU05vdEFuT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIDogSlNO
b25GaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5ub3RB
bk9iamVjdFN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTTm90QW5PYmplY3QqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU05vdEFuT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNOb3RBbk9iamVjdChleGVjKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCShyZXZpc2lvbiA5
MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
U3RyaW5naWZpZXI7CiAKICAgICBjbGFzcyBKU09OT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgogICAgICAgICBKU09OT2JqZWN0KEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU09O
T2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTT05PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU09OT2JqZWN0
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4
ZWNTdGF0ZSogZQogCiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFs
RGF0YSgpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CisgICAgR2V0dGVyU2V0
dGVyKiBnZXR0ZXJTZXR0ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICBwdXRE
aXJlY3RJbnRlcm5hbChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0
cmlidXRlcyB8IEdldHRlciwgdHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBj
aGFuZ2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpAQCAtMzQ3
LDcgKzM0Nyw3IEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUqIGUKICAg
ICB9CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRl
clNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRl
ciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGly
ZWN0SW50ZXJuYWwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRl
ciwgYXR0cmlidXRlcyB8IFNldHRlciwgdHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qg
d2lsbCBjaGFuZ2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpA
QCAtNjMzLDcgKzYzMyw3IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGUKIHsKICAgICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkgfHwgZGVzY3Jp
cHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5l
cmljRGVzY3JpcHRvcigpICYmIG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkg
ewotICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IG5ldyAoZXhlYykgR2V0dGVy
U2V0dGVyKGV4ZWMpOworICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRl
clNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogICAgICAgICAgICAgaWYgKG9sZERlc2NyaXB0b3IuZ2V0
dGVyKCkpIHsKICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IEdldHRlcjsKICAgICAgICAg
ICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3Qo
b2xkRGVzY3JpcHRvci5nZXR0ZXIoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBD
T01QSUxFX0FTU0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yCiAgICAgcHVibGljOgogICAg
ICAgICBzdGF0aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMp
IEpTRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KCpleGVjLT5oZWFwKCkp
KSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKICAgICAgICAg
fQogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAogICAgICAgICAhby0+c3RydWN0
dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiAhby0+c3RydWN0dXJlKCktPmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkgJiYKICAgICAgICAgIW8tPnN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgbnVtQ2FjaGVhYmxl
U2xvdHMgPSBvLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotCi0gICAgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IG5ldyAoZXhlYykg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2Fj
aGVhYmxlU2xvdHMpOworICAgIAorICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVy
dHlOYW1lSXRlcmF0b3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
PigqZXhlYy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5h
bWVzLmRhdGEoKSwgbnVtQ2FjaGVhYmxlU2xvdHMpOwogCiAgICAgaWYgKG8tPnN0cnVjdHVyZSgp
LT5pc0RpY3Rpb25hcnkoKSkKICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNiArNDQsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKKyAgICAgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhLCBz
aXplX3QgbnVtQ2FjaGVhYmxlU2xvdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+KCpleGVjLT5oZWFwKCkpKSBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yKGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgbnVtQ2Fj
aGVhYmxlU2xvdCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAgQEAg
SlNTdHJpbmcqIEpTU3RyaW5nOjpzdWJzdHJpbmdGcm9tUm9wZShFeAogICAgICAgICAgICAgcmV0
dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFs
RGF0YSwgYyk7CiAgICAgfQogICAgIGlmIChzdWJzdHJpbmdGaWJlckNvdW50ID09IDEpCi0gICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmlu
Z0ZpYmVyc1swXSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEs
IHN1YnN0cmluZ0ZpYmVyc1swXSk7CiAgICAgaWYgKHN1YnN0cmluZ0ZpYmVyQ291bnQgPT0gMikK
LSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgc3Vi
c3RyaW5nRmliZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0pOwotICAgIHJldHVybiBuZXcgKGds
b2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3Ry
aW5nRmliZXJzWzFdLCBzdWJzdHJpbmdGaWJlcnNbMl0pOworICAgICAgICByZXR1cm4gSlNTdHJp
bmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVy
c1sxXSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgc3Vic3RyaW5n
RmliZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0sIHN1YnN0cmluZ0ZpYmVyc1syXSk7CiB9CiAK
IEpTVmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjLCBVQ2hh
ciBjaGFyYWN0ZXIsIGNvbnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50KQpAQCAtMjU0LDcgKzI1NCw3
IEBAIEpTVmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1MKICAgICB9CiAKICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHJl
dHVybiBKU1ZhbHVlKG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgYnVpbGRl
ci5yZWxlYXNlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShKU1N0cmluZzo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7CiB9CiAKIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0
SW5kZXhTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCkBAIC0yOTgsNyArMjk4
LDcgQEAgVVN0cmluZyBKU1N0cmluZzo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleAogCiBpbmxpbmUg
U3RyaW5nT2JqZWN0KiBTdHJpbmdPYmplY3Q6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJu
IG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgc3RyaW5nKTsKKyAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgc3Ry
aW5nKTsKIH0KIAogSlNPYmplY3QqIEpTU3RyaW5nOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDYg
KzE4MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIFZlY3RvcjxXb3JrSXRl
bSwgMTY+IG1fd29ya1F1ZXVlOwogICAgICAgICB9OwogCisgICAgICAgIGVudW0gSGFzT3RoZXJP
d25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07CisKKyAgICBwcml2YXRlOgogICAgICAgICBBTFdB
WVNfSU5MSU5FIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX2xlbmd0aCh2YWx1ZS5sZW5n
dGgoKSkKQEAgLTE5MSw3ICsxOTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEhl
YXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCh2YWx1ZS5pbXBsKCktPmNvc3Qo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBlbnVtIEhhc090aGVyT3duZXJUeXBlIHsgSGFzT3Ro
ZXJPd25lciB9OwogICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkKICAgICAgICAgICAgIDogSlND
ZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAg
ICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLmxlbmd0aCgpKQpAQCAtMjk1LDYgKzI5Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IHNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoKTsKICAgICAgICAgfQogCisgICAgcHVibGljOgogICAgICAgICB+SlNTdHJpbmco
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodnB0cigpID09IEpTR2xvYmFsRGF0YTo6
anNTdHJpbmdWUHRyKTsKQEAgLTMzMyw2ICszMzYsNDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAorCisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS0+aGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhlck93bmVy
VHlwZSBoYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLT5oZWFwKSkgSlNTdHJpbmcoZ2xv
YmFsRGF0YSwgdmFsdWUsIGhhc090aGVyT3duZXJUeXBlKTsKKyAgICAgICAgfQorICAgICAgICBz
dGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gdmFsdWUsIEhhc090aGVyT3duZXJUeXBlIGhhc090aGVyT3duZXJUeXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KGdsb2JhbERhdGEtPmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3Ro
ZXJPd25lclR5cGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRl
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxSb3BlSW1wbD4gcm9wZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihn
bG9iYWxEYXRhLT5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZSk7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9i
YWxEYXRhLT5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHMyKTsK
KyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIEpTU3RyaW5nKiBzMSwgY29uc3QgVVN0
cmluZyYgdTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oZ2xvYmFsRGF0YS0+aGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVy
Q291bnQsIHMxLCB1Mik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVh
dGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBV
U3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEtPmhlYXApKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBKU1N0cmluZyogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2
MiwgSlNWYWx1ZSB2MykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTU3RyaW5nPigqZXhlYy0+aGVhcCgpKSkgSlNTdHJpbmcoZXhlYywgdjEsIHYyLCB2
Myk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4o
Z2xvYmFsRGF0YS0+aGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHUxLCB1Mik7CisgICAgICAg
IH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcm
IHUzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNT
dHJpbmc+KGdsb2JhbERhdGEtPmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIsIHUz
KTsKKyAgICAgICAgfQorCisKICAgICBwcml2YXRlOgogICAgICAgICBKU1N0cmluZyhWUHRyU3Rl
YWxpbmdIYWNrVHlwZSkgCiAgICAgICAgICAgICA6IEpTQ2VsbChWUHRyU3RlYWxpbmdIYWNrKQpA
QCAtNDQyLDcgKzQ4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgaWYgKGMg
PD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7Ci0g
ICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkpOworICAgICAgICByZXR1cm4gZml4dXBW
UHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgVVN0cmluZygmYywg
MSkpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU2luZ2xlQ2hhcmFjdGVyU3Vi
c3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgcywgdW5zaWduZWQgb2Zmc2V0
KQpAQCAtNDUyLDcgKzQ5OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBVQ2hhciBjID0g
cy5jaGFyYWN0ZXJzKClbb2Zmc2V0XTsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5z
aW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7Ci0gICAgICAgIHJldHVybiBmaXh1
cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBV
U3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCAxKSkpKTsKKyAgICAg
ICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERh
dGEsIFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOwog
ICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykKQEAgLTQ2MCwxMyArNTA2LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBBU1NFUlQocyk7CiAgICAgICAgIEFTU0VSVChzWzBdKTsK
ICAgICAgICAgQVNTRVJUKHNbMV0pOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERh
dGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
cykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykKICAgICB7CiAgICAgICAg
IEFTU0VSVChzLmxlbmd0aCgpID4gMSk7Ci0gICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFs
RGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzKSk7CisgICAgICAg
IHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRh
LCBzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQpAQCAtNDg4LDcgKzUzNCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQog
ICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hh
cmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
aXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRh
LCBzKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKQEAgLTUxNiw3ICs1NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNP
dGhlck93bmVyKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZShnbG9iYWxEYXRhLCBVU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwo
KSwgb2Zmc2V0LCBsZW5ndGgpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKICAgICB9CiAK
ICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBjb25zdCBVU3RyaW5nJiBzKQpAQCAtNTI5LDcgKzU3NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAg
ICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmaXh1cFZQ
dHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzLCBK
U1N0cmluZzo6SGFzT3RoZXJPd25lcikpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcywgSlNTdHJpbmc6Okhhc090aGVy
T3duZXIpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzRW1wdHlTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKSB7IHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCkp
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6dG9P
YmplY3RTbG93Q2FzZShFeGVjCiAKICAgICBBU1NFUlQoaXNVbmRlZmluZWRPck51bGwoKSk7CiAg
ICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7
Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjKTsKKyAgICByZXR1cm4g
SlNOb3RBbk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwogfQogCiBKU09iamVjdCogSlNWYWx1ZTo6dG9U
aGlzT2JqZWN0U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtOTAsNyArOTAsNyBA
QCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdChFeGVjCiAKICAgICBBU1NFUlQo
aXNVbmRlZmluZWRPck51bGwoKSk7CiAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RBbk9i
amVjdEVycm9yKGV4ZWMsICp0aGlzKSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9i
amVjdChleGVjKTsKKyAgICByZXR1cm4gSlNOb3RBbk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwogfQog
CiBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CkBAIC0xMDMsNyArMTAzLDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQ
cm90b3R5cGUoRQogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90QW5P
YmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MCwxMCArODAsMTAgQEAgdm9pZCBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChFeGVjU3RhdGUqIAog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNHbG9iYWxPYmplY3QodGhp
c09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkuYXNDZWxsKCkpOwogI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgIGlmIChlbnRyeS0+Z2VuZXJhdG9yKCkpCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG5l
dyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwg
ZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihlbnRyeS0+ZnVuY3Rpb24oKSwgZW50
cnktPmdlbmVyYXRvcigpKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZXhlYy0+Z2xvYmFsRGF0
YSgpLmdldEhvc3RGdW5jdGlvbihlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnktPmdlbmVyYXRvcigp
KSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgZnVuY3Rpb24gPSBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9u
U3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5
LT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBl
bnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7
CiAKICAgICAgICAgdGhpc09iai0+cHV0RGlyZWN0RnVuY3Rpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uLCBlbnRyeS0+YXR0cmlidXRlcygpKTsKICAgICAgICAg
bG9jYXRpb24gPSB0aGlzT2JqLT5nZXREaXJlY3RMb2NhdGlvbihleGVjLT5nbG9iYWxEYXRhKCks
IHByb3BlcnR5TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRo
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTMgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgTWF0aE9iamVjdCA6IHB1YmxpYyBKU09iamVjdFdpdGhH
bG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgTWF0aE9iamVjdChFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgTWF0aE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxNYXRoT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkg
TWF0aE9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
OjpOYXRpdmVFcnJvckNvbnN0CiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAot
ICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVy
cm9yUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBuYW1l
QW5kTWVzc2FnZSwgdGhpcyk7CisgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSA9
IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGVTdHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlLCB0aGlzKTsKIAogICAgIHB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CiAg
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OSArMzAsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5
cGU7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSogcHJvdG90
eXBlU3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJl
KiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWVBbmRNZXNzYWdlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3Nh
Z2UpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
cnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOwogCiAgICAgY2xhc3Mg
TmF0aXZlRXJyb3JQcm90b3R5cGUgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsK
LSAgICBwdWJsaWM6CiAgICAgICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYsIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IqKTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOYXRpdmVFcnJv
clByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWVBbmRNZXNz
YWdlLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUVycm9yUHJvdG90eXBlPigq
ZXhlYy0+aGVhcCgpKSkgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIH0KICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgc3RhdGljIEpTVmFsdWUgbnVtYmVyQ29uc3Ry
dWN0b3JNaW5WYWx1ZQogLy8gRUNNQSAxNS43LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0
KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CiAgICAgZG91YmxlIG4gPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
eGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKSA6IDA7CiAgICAgb2JqZWN0LT5zZXRJbnRl
cm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOdW1iZXJQ
cm90b3R5cGU7CiAKICAgICBjbGFzcyBOdW1iZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5h
bEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CiAgICAgICAgIE51bWJlckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgTnVtYmVyUHJvdG90eXBlKik7Cisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE51bWJlckNvbnN0cnVjdG9yKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgTnVtYmVyUHJvdG90eXBlKiBudW1Qcm90b3R5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOdW1iZXJDb25zdHJ1Y3Rv
cj4oKmV4ZWMtPmhlYXAoKSkpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBudW1Qcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNWYWx1ZSBOdW1i
ZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKIAogTnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51
bWJlcikKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IG5ldyAoZXhlYykgTnVtYmVyT2Jq
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1
cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShl
eGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkp
OwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIG51bWJl
cik7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlck9iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5
ICsyNiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBw
dWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAg
ICAgICBleHBsaWNpdCBOdW1iZXJPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJPYmplY3QqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0PihnbG9iYWxEYXRh
LmhlYXApKSBOdW1iZXJPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
VmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkg
KzI2LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZSA6
IHB1YmxpYyBOdW1iZXJPYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgTnVtYmVyUHJvdG90
eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyUHJv
dG90eXBlPigqZXhlYy0+aGVhcCgpKSkgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgT2JqZWN0
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAg
ICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIE9iamVjdFByb3RvdHlwZSopOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIE9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBl
KiBvYmpQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxPYmplY3RDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIE9iamVjdENvbnN0cnVj
dG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBvYmpQcm90b3R5cGUpOworICAgICAg
ICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDkgKzI2LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE9iamVjdFByb3Rv
dHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CiAgICAgICAgIE9i
amVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0UHJvdG90eXBlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PE9iamVjdFByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIE9iamVjdFByb3RvdHlwZShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAgICAg
ICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQot
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwg
ZmliZXJDb3VudCwgczEsIHMyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHMxLCBzMik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJv
cGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFko
cm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMSk7CiAg
ICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMik7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2Jh
bERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAg
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVh
c2UoKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKQEAgLTc0LDE0ICs3
NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
ID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBKU1N0
cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAg
ICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwg
dTEsIHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoZmli
ZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVpbGRlci5pc091dE9mTWVtb3J5
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAg
ICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHUxKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5k
KHMyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0
YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogczEs
IGNvbnN0IFVTdHJpbmcmIHUyKQpAQCAtOTksMTQgKzk5LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
CiAgICAgICAgIGlmIChmaWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIGZpYmVyQ291bnQsIHMxLCB1Mik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6
OmNyZWF0ZShnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgdTIpOwogCiAgICAgICAgIEpTU3Ry
aW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVO
TElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAgICByZXR1cm4g
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQo
czEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodTIpOwotICAgICAgICByZXR1cm4gbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShnbG9iYWxEYXRhLCByb3BlQnVpbGRl
ci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MikK
QEAgLTEyMSw3ICsxMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFs
RGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyKTsKKyAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgdTEsIHUyKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwg
Y29uc3QgVVN0cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQpAQCAtMTQyLDcgKzE0Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCB1MSwgdTIsIHUzKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgdTEsIHUyLCB1Myk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVkIGNv
dW50KQpAQCAtMTYwLDcgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgICAgIGlmIChm
aWJlckNvdW50ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhleGVjLCBzdHJpbmdzWzBdLmpzVmFsdWUoKSwgc3RyaW5nc1sxXS5qc1ZhbHVlKCksIHN0
cmluZ3NbMl0uanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1ZSgpLCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3RyaW5n
c1syXS5qc1ZhbHVlKCkpOwogCiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVp
bGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0
T2ZNZW1vcnkoKSkpCkBAIC0xODUsNyArMTg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGlmIChvdmVyZmxvdykKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFs
RGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKICAgICAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxk
ZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICAvLyBFQ01BIDExLjkuMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJl
Z0V4cE1hdGNoZXNBcnJheTo6ZmlsbEFycmF5SW5zdGFuCiAKIEpTT2JqZWN0KiBSZWdFeHBDb25z
dHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKKyAgICBy
ZXR1cm4gUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGUoZXhlYywgZC5nZXQoKSk7CiB9CiAKIEpT
VmFsdWUgUmVnRXhwQ29uc3RydWN0b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpKSBjb25zdApAQCAtMzA0LDcgKzMwNCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdF
eHAoRXhlY1N0YXRlKiBleGUKICAgICAgICAgLy8gSWYgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHRo
aXMganVzdCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCAoc2VlIDE1LjEwLjMuMSkuCiAgICAg
ICAgIGlmIChjYWxsQXNDb25zdHJ1Y3RvcikgewogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAg
PSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPihhc09iamVjdChhcmcwKSktPnJlZ0V4cCgpOwot
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICAgICAgICAgIHJl
dHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGFzT2JqZWN0KGFyZzApOwogICAgIH0KQEAgLTMyNSw3ICszMjUsNyBAQCBKU09iamVjdCogY29u
c3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6
OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFy
ZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
U3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdsb2Jh
bE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9i
amVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1
NiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgUmVnRXhwQ29uc3Ry
dWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAgICAgICBS
ZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IFJlZ0V4cFByb3RvdHlwZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVnRXhw
Q29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFBy
b3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PFJlZ0V4cENvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwQ29uc3RydWN0b3IoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7CisgICAgICAgIH0K
KwogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEz
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1
YmxpYyBKU0FycmF5IHsKLSAgICBwdWJsaWM6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShF
eGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oKmV4ZWMt
PmhlYXAoKSkpIFJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBjdG9yUHJpdmF0ZSk7CisgICAgICAg
IH0KICAgICAgICAgdmlydHVhbCB+UmVnRXhwTWF0Y2hlc0FycmF5KCk7CiAKICAgICBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywyMiBAQAogbmFtZXNwYWNlIEpT
QyB7CiAgICAgCiAgICAgY2xhc3MgUmVnRXhwT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEds
b2JhbE9iamVjdCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKKwogICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFJlZ0V4cE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2Jq
ZWN0PigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCByZWdFeHApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUmVnRXhwT2Jq
ZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KGds
b2JhbERhdGEtPmhlYXApKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJl
Z0V4cCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHR5cGVkZWYgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgUmVnRXhwT2JqZWN0KEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgICAgIHZpcnR1YWwgflJlZ0V4cE9iamVjdCgp
OwogCiAgICAgICAgIHZvaWQgc2V0UmVnRXhwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUmVn
RXhwKiByKSB7IGQtPnJlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgcik7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3Rv
dHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNSBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBSZWdFeHBQcm90b3R5cGUgOiBwdWJsaWMgUmVnRXhwT2JqZWN0IHsKLSAg
ICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWdFeHBQcm90b3R5cGUoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cFByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
Z0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8UmVnRXhwUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwUHJvdG90eXBlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
Y29wZUNoYWluLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgIAogICAgIGNsYXNzIFNjb3Bl
Q2hhaW5Ob2RlIDogcHVibGljIEpTQ2VsbCB7Ci0gICAgcHVibGljOgogICAgICAgICBTY29wZUNo
YWluTm9kZShTY29wZUNoYWluTm9kZSogbmV4dCwgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
Z2xvYmFsVGhpcykKICAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LT5zY29wZUNoYWluTm9kZVN0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgZ2xvYmFsRGF0
YShnbG9iYWxEYXRhKQpAQCAtNDcsNiArNDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgfQogCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2NvcGVDaGFp
bk5vZGU+KCpleGVjLT5oZWFwKCkpKSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmplY3QsIGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIFNjb3BlQ2hhaW5Ob2RlKiBjcmVhdGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0
KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTY29wZUNoYWluTm9kZT4oZ2xvYmFsRGF0YS0+aGVhcCkp
IFNjb3BlQ2hhaW5Ob2RlKG5leHQsIG9iamVjdCwgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxUaGlzKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhOwogICAgICAgICBXcml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG5leHQ7CiAg
ICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gb2JqZWN0OwpAQCAtNzYsNyArODUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBpbmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2Rl
OjpwdXNoKEpTT2JqZWN0KiBvKQogICAgIHsKICAgICAgICAgQVNTRVJUKG8pOwotICAgICAgICBy
ZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBTY29wZUNoYWluTm9kZSh0aGlzLCBvLCBnbG9iYWxEYXRh
LCBnbG9iYWxPYmplY3QuZ2V0KCksIGdsb2JhbFRoaXMuZ2V0KCkpOworICAgICAgICByZXR1cm4g
U2NvcGVDaGFpbk5vZGU6OmNyZWF0ZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3Qu
Z2V0KCksIGdsb2JhbFRoaXMuZ2V0KCkpOwogICAgIH0KIAogICAgIGlubGluZSBTY29wZUNoYWlu
Tm9kZSogU2NvcGVDaGFpbk5vZGU6OnBvcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw3IEBAIHVuc2lnbmVkIFNtYWxsU3RyaW5nczo6Y291bnQoKSBjb25zdAog
dm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKIHsKICAgICBBU1NFUlQoIW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcg
PSBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6SGFz
T3RoZXJPd25lcik7CisgICAgbV9lbXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgIiIsIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKTsKIH0KIAogdm9pZCBTbWFsbFN0cmlu
Z3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgU21hbGxT
dHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXIKICAgICBpZiAoIW1fc3RvcmFnZSkKICAgICAg
ICAgbV9zdG9yYWdlID0gYWRvcHRQdHIobmV3IFNtYWxsU3RyaW5nc1N0b3JhZ2UpOwogICAgIEFT
U0VSVCghbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0pOwotICAgIG1fc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNoYXJhY3Rl
cikpLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJp
bmdzW2NoYXJhY3Rlcl0gPSBKU1N0cmluZzo6Y3JlYXRlKGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4obV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKSksIEpTU3RyaW5nOjpIYXNPdGhl
ck93bmVyKTsKIH0KIAogU3RyaW5nSW1wbCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZXJT
dHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5
MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwog
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5n
T2JqZWN0U3RydWN0dXJlKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ldyAoZXhl
YykgU3RyaW5nT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJl
KCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5z
dHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3Ry
aW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0
VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDggKzI4LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cmluZ1Byb3RvdHlwZTsK
IAogICAgIGNsYXNzIFN0cmluZ0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
ewotICAgIHB1YmxpYzoKICAgICAgICAgU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBTdHJpbmdQcm90b3R5cGUqKTsKKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RyaW5nUHJvdG90eXBlKiBzdHJQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdDb25zdHJ1Y3Rvcj4oKmV4ZWMt
PmhlYXAoKSkpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBzdHJQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ09iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMjEgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU3RyaW5nT2JqZWN0IDogcHVibGljIEpTV3Jh
cHBlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgU3RyaW5n
T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAgICAgICBTdHJpbmdPYmplY3QoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwotCisgICAgICAgICAgICAgICAg
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0
cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUpOyAgCisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IFVTdHJpbmcmIHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVj
dChleGVjLCBzdHJ1Y3R1cmUsIHN0cik7ICAKKyAgICAgICAgfQogICAgICAgICBzdGF0aWMgU3Ry
aW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyop
OworICAgICAgICAKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0
VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdFRo
YXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGV4ZWMsCisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ+KCpleGVj
LT5oZWFwKCkpKSBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLAog
ICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90eXBlKCkpLCBzdHJpbmcpOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFz
cyBTdHJpbmdQcm90b3R5cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKLSAgICBwdWJsaWM6CiAg
ICAgICAgIFN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ1Byb3RvdHlw
ZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBwcm90
b3R5cGUsIHR5cGVJbmZvLCBhbm9ueW1vdXNTbG90Q291bnQsIGNsYXNzSW5mbyk7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXAp
KSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3VzU2xv
dENvdW50LCBjbGFzc0luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVt
cFN0YXRpc3RpY3MoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVy
ZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0
dXJlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0
cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwpAQCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2Jh
bERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9i
YWxEYXRhKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVj
dHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB0eXBlZGVmIGVudW0geyAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCiAgICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkgeyByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0
YSkgU3RydWN0dXJlQ2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVDaGFpblN0
cnVjdHVyZS5nZXQoKSwgaGVhZCk7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1
Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3RydWN0dXJl
LmdldCgpLCBoZWFkKTsgfQogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaGVhZCgp
IHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihT
bG90VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEx
LTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2CisgICAgICAg
IFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3RhdGlj
IGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJlZmFjdG9y
aW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IG92
ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJlcGxhY2UK
KyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9yIGVhY2gg
aW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVjdC4gIFRo
aXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMgb2YKKyAg
ICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNoZXMgd2ls
bCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0
aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAgICAgICBv
biBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZyb20gSlND
ZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBwbGUuY29t
KSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNEYXRlT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjpub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRf
cnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1Zh
bHVlKToKKwogMjAxMS0wNy0xNCAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29tPgogCiAg
ICAgICAgIENoYXJhY3RlciByZWZlcmVuY2UgcGFyc2VyIGZvciBuZXcgWE1MIHBhcnNlcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lv
biA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1ZhbHVlIGpzRGF0ZU9yTnVsbChF
eGVjU3RhdGUqIGV4ZWMsIGRvCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsK
KyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKIH0KIAogZG91YmxlIHZhbHVlVG9E
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTMwNyw3ICszMDcsNyBAQCBG
cmFtZSogdG9EeW5hbWljRnJhbWUoRXhlY1N0YXRlKiBleGVjKQogCiBKU1ZhbHVlIG9iamVjdFRv
U3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlv
bihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90
b0Z1bmNUb1N0cmluZyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
Zyk7CiB9CiAKIFN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RPTVdpbmRv
dzo6dmlzaXRDaGlsZHJlbihTbG90VmlzaQogdGVtcGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZl
RnVuY3Rpb24sIGludCBsZW5ndGg+CiBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlv
blN0cnVjdHVyZSgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGxl
bmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
IGNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTcgKzQwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFsdWUg
bm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CisgICAgcmV0dXJuIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBq
c0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25D
YWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFt
ZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKTsKKyAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
IG5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFt
ZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0hp
c3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKIH0KIAogYm9vbCBKU0hpc3Rvcnk6OmdldE93blBy
b3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1
cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBw
cm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOworICAgIHJl
dHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHBy
b3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAKIHN0
YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7Cisg
ICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOwogfQog
CiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7
Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24p
OworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJl
KCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsK
IH0KIAogYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
ODYsNyArMTA4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkb3VibGUgZDsKICAgICAgICAg
ICAgIGlmICghcmVhZChkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAg
ICAgICAgICAgcmV0dXJuIG5ldyAobV9leGVjKSBEYXRlSW5zdGFuY2UobV9leGVjLCBtX2dsb2Jh
bE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBEYXRlSW5z
dGFuY2U6OmNyZWF0ZShtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQp
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsZVRhZzogewogICAgICAgICAgICAgUmVmUHRy
PEZpbGU+IGZpbGU7CkBAIC0xMTY3LDcgKzExNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
UmVnRXhwRmxhZ3MgcmVGbGFncyA9IHJlZ0V4cEZsYWdzKGZsYWdzLT51c3RyaW5nKCkpOwogICAg
ICAgICAgICAgQVNTRVJUKHJlRmxhZ3MgIT0gSW52YWxpZEZsYWdzKTsKICAgICAgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0
ZXJuLT51c3RyaW5nKCksIHJlRmxhZ3MpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9leGVj
KSBSZWdFeHBPYmplY3QobV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1fZ2xvYmFsT2Jq
ZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsgCisgICAgICAgICAgICByZXR1cm4gUmVn
RXhwT2JqZWN0OjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
bV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKICAgICAgICAgfQog
ICAgICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzogewogICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3NSw3ICs4NzUsNyBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoRXhlY1N0YXRlCiAKICAgICAgICAgICAgIEpTQzo6UmVnRXhwKiByZWdFeHAg
PSBKU0M6OlJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdz
KTsKICAgICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAp
OworICAgICAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC05MDgsNyArOTA4LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlh
bnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICBkdC5pc0RTVCA9IC0xOwogICAgICAgICBkb3Vi
bGUgbXMgPSBncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZHQsIHRpbWUubXNlYygpLCAvKmlu
cHV0SXNVVEMqLyBmYWxzZSk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRGF0ZUluc3Rh
bmNlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB0
cnVuYyhtcykpOworICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7CiAg
ICAgfQogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100909</attachid>
            <date>2011-07-14 18:18:35 -0700</date>
            <delta_ts>2011-07-14 19:10:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110714181834.patch</filename>
            <type>text/plain</type>
            <size>163543</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE1IEBA
CisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAg
IChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChK
U0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAg
ICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VDaGFy
YWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RS
ZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6CisgICAgICAgICogcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVt
cHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc3BlY3VsYXRpdmUgSklUIGNvbnRhaW5zIGEg
RklYTUUgZm9yIHJld2luZGluZyBzcGVjdWxhdGl2ZSBjb2RlIGdlbmVyYXRpb24gdGhhdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBO
U185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgogX19aTjNKU0MxNFNh
bXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoKQEAg
LTI2Myw4ICsyNjIsOCBAQCBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9y
CiBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQzZK
U0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRlRQotX19a
TjNKU0M2UmVnRXhwNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18x
MVJlZ0V4cEZsYWdzRQogX19aTjNKU0M2UmVnRXhwRDFFdgorX19aTjNKU0M2UmVnRXhwNmNyZWF0
ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQogX19a
TjNKU0M3SlNBcnJheTEzdmlzaXRDaGlsZHJlbkVSTlNfMTFTbG90VmlzaXRvckUKIF9fWk4zSlND
N0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0M3SlNBcnJheTE4Z2V0T3duUHJv
cGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0MywxMyBAQCBsb25nIFN0b3BXYXRj
aDo6Z2V0RWxhcHNlZE1TKCkKIH0KIAogY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xv
YmFsT2JqZWN0IHsKLXB1YmxpYzoKICAgICBHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIEdsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEdsb2JhbE9iamVjdD4oZ2xv
YmFsRGF0YS5oZWFwKSkgR2xvYmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgYXJndW1l
bnRzKTsKKyAgICB9CiAgICAgdmlydHVhbCBVU3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJnbG9iYWwiOyB9CiB9OwogQ09NUElMRV9BU1NFUlQoIUlzSW50ZWdlcjxHbG9iYWxPYmpl
Y3Q+Ojp2YWx1ZSwgV1RGX0lzSW50ZWdlcl9HbG9iYWxPYmplY3RfZmFsc2UpOwpAQCAtMTUzLDIy
ICsxNTgsMjIgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChHbG9iYWxPYmplY3QpOwogR2xv
YmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBhcmd1bWVudHMpCiAgICAgOiBK
U0dsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCiB7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxF
eGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhl
YygpLCAiZGVidWciKSwgZnVuY3Rpb25EZWJ1ZykpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0
aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInBy
aW50IiksIGZ1bmN0aW9uUHJpbnQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJxdWl0IiksIGZ1
bmN0aW9uUXVpdCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChn
bG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImdjIiksIGZ1bmN0aW9uR0MpKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShn
bG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAiZGVidWciKSwgZnVuY3Rpb25EZWJ1ZykpOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJwcmludCIp
LCBmdW5jdGlvblByaW50KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVuY3Rpb25RdWl0KSk7Cisg
ICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xv
YmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2Jh
bEV4ZWMoKSwgImdjIiksIGZ1bmN0aW9uR0MpKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgcHV0RGly
ZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihn
bG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xv
YmFsRXhlYygpLCAicmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkiKSwgZnVuY3Rpb25SZWxlYXNlRXhl
Y3V0YWJsZU1lbW9yeSkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSIpLCBm
dW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KSk7CiAjZW5kaWYKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJ2ZXJzaW9uIiksIGZ1bmN0aW9uVmVyc2lvbikpOwotICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMo
KSwgInJ1biIpLCBmdW5jdGlvblJ1bikpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImxvYWQiKSwg
ZnVuY3Rpb25Mb2FkKSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcg
KGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiY2hlY2tTeW50YXgiKSwgZnVu
Y3Rpb25DaGVja1N5bnRheCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwg
bmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlv
blN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlYWRsaW5lIiksIGZ1
bmN0aW9uUmVhZGxpbmUpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpT
RnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAidmVyc2lvbiIpLCBmdW5jdGlvblZlcnNpb24p
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0
ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAicnVuIiksIGZ1bmN0aW9uUnVuKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImxvYWQiKSwg
ZnVuY3Rpb25Mb2FkKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAx
LCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImNoZWNrU3ludGF4IiksIGZ1bmN0aW9uQ2hlY2tT
eW50YXgpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246
OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50
aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVhZGxpbmUiKSwgZnVuY3Rpb25SZWFkbGluZSkpOwogCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInNldFNhbXBs
aW5nRmxhZ3MiKSwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdzKSk7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxF
eGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhl
YygpLCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzKSk7
CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUo
Z2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGds
b2JhbEV4ZWMoKSwgInNldFNhbXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25TZXRTYW1wbGluZ0ZsYWdz
KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVh
dGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImNsZWFyU2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvbkNsZWFyU2FtcGxp
bmdGbGFncykpOwogI2VuZGlmCiAKICAgICBKU09iamVjdCogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGdsb2JhbEV4ZWMoKSk7CkBAIC0yMjcsNyArMjMyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJDb3VsZCBub3Qgb3BlbiBmaWxl
LiIpKSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoJmV4ZWMtPmds
b2JhbERhdGEoKSkgR2xvYmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgR2xvYmFsT2JqZWN0
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIFZlY3RvcjxV
U3RyaW5nPigpKTsKKyAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVj
dDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSksIFZlY3RvcjxVU3RyaW5nPigpKTsKIAog
ICAgIFN0b3BXYXRjaCBzdG9wV2F0Y2g7CiAgICAgc3RvcFdhdGNoLnN0YXJ0KCk7CkBAIC01NTIs
NyArNTU3LDcgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2LCBKU0dsbwogICAg
IE9wdGlvbnMgb3B0aW9uczsKICAgICBwYXJzZUFyZ3VtZW50cyhhcmdjLCBhcmd2LCBvcHRpb25z
LCBnbG9iYWxEYXRhKTsKIAotICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbmV3IChn
bG9iYWxEYXRhKSBHbG9iYWxPYmplY3QoKmdsb2JhbERhdGEsIEdsb2JhbE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSksIG9wdGlvbnMuYXJndW1lbnRzKTsKKyAg
ICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKCpnbG9i
YWxEYXRhLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxs
KCkpLCBvcHRpb25zLmFyZ3VtZW50cyk7CiAgICAgYm9vbCBzdWNjZXNzID0gcnVuV2l0aFNjcmlw
dHMoZ2xvYmFsT2JqZWN0LCBvcHRpb25zLnNjcmlwdHMsIG9wdGlvbnMuZHVtcCk7CiAgICAgaWYg
KG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKICAgICAgICAgcnVuSW50ZXJhY3RpdmUo
Z2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiwxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTQ2FsbGJhY2tDb25zdHJ1
Y3RvciA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotcHVibGljOgorcHJvdGVj
dGVkOgogICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSosIEpTQ2xhc3NSZWYsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayk7CitwdWJs
aWM6CisgICAgc3RhdGljIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTQ2xhc3NSZWYgY2xhc3NSZWYsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBj
YWxsYmFjaykgCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNDYWxs
YmFja0NvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja0NvbnN0cnVjdG9yKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBjbGFzc1JlZiwgY2FsbGJhY2spOworICAgIH0KKyAgICAK
ICAgICB2aXJ0dWFsIH5KU0NhbGxiYWNrQ29uc3RydWN0b3IoKTsKICAgICBKU0NsYXNzUmVmIGNs
YXNzUmVmKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzczsgfQogICAgIEpTT2JqZWN0Q2FsbEFzQ29u
c3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24u
aAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJh
Y2tGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiwxNSBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEpTQ2FsbGJhY2tGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0
aW9uIHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrRnVuY3Rpb24oRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2ssIGNv
bnN0IElkZW50aWZpZXImIG5hbWUpOwogCitwdWJsaWM6CisgICAgc3RhdGljIEpTQ2FsbGJhY2tG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpT
Q2FsbGJhY2tGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tGdW5jdGlvbihleGVj
LCBnbG9iYWxPYmplY3QsIGNhbGxiYWNrLCBuYW1lKTsKKyAgICB9CisKICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAKICAgICAvLyBJbnRlcm5hbEZ1bmN0aW9uIG1pc2gt
bWFzaGVzIGNvbnN0cnVjdG9yIGFuZCBmdW5jdGlvbiBiZWhhdmlvciAtLSB3ZSBzaG91bGQgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDkgKzExNiwyMiBAQCBzdHJ1Y3QgSlNDYWxsYmFj
a09iamVjdERhdGEgOiBXZWFrSGFuZGxlCiAgICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNs
YXNzIEpTQ2FsbGJhY2tPYmplY3QgOiBwdWJsaWMgQmFzZSB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6
CiAgICAgSlNDYWxsYmFja09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEpTQ2xhc3NSZWYsIHZvaWQqIGRhdGEpOwogICAgIEpTQ2FsbGJhY2tPYmplY3QoSlNH
bG9iYWxEYXRhJiwgSlNDbGFzc1JlZiwgU3RydWN0dXJlKik7CisgICAgLy8gVGhpcyB2ZXJzaW9u
IG9mIG9wZXJhdG9yIG5ldyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBjYW4ndCB0ZWxsIHN0YXRp
Y2FsbHkgCisgICAgLy8gdGhhdCBCYXNlIHdpbGwgaW5oZXJpdCB0aGUgY29ycmVjdCBwbGFjZW1l
bnQgdmVyc2lvbiBvZiBvcGVyYXRvciBuZXcgZnJvbSBKU0NlbGwuCisgICAgdm9pZCogb3BlcmF0
b3IgbmV3KHNpemVfdCwgdm9pZCogcHRyKSB7IHJldHVybiBwdHI7IH0KKworcHVibGljOgorICAg
IHN0YXRpYyBKU0NhbGxiYWNrT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBj
bGFzc1JlZiwgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxKU0NhbGxiYWNrT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChl
eGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAg
ICBzdGF0aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZ2xvYmFsRGF0
YS5oZWFwKSkgSlNDYWxsYmFja09iamVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3RydWN0dXJl
KTsKKyAgICB9CiAKICAgICB2b2lkIHNldFByaXZhdGUodm9pZCogZGF0YSk7CiAgICAgdm9pZCog
Z2V0UHJpdmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2MCw3ICs1NjAsNyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46
OnN0YXRpY0Z1CiAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBz
dGF0aWNGdW5jdGlvbnMtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAg
ICAgIGlmIChKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBl
bnRyeS0+Y2FsbEFzRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0KiBvID0gbmV3IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhl
YywgYXNHbG9iYWxPYmplY3QodGhpc09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNG
dW5jdGlvbiwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8g
PSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlzT2Jq
LT5nZXRBbm9ueW1vdXNWYWx1ZSgwKSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwog
ICAgICAgICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIG8sIGVudHJ5LT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG87CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NsYXNzUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2xhc3NSZWYuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEs
NyBAQCBKU09iamVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAKICAgICBpZiAo
IWpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZSkgewogICAgICAgICAvLyBSZWN1cnNpdmUsIGJ1
dCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG91ciBwdXJwb3NlcwotICAgICAgICBqc0NsYXNz
RGF0YS5jYWNoZWRQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3IChleGVjKSBK
U0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNr
T2JqZWN0U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8g
c2V0IGpzQ2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBj
bGVhciBvdXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRhLmNh
Y2hlZFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1
Y3R1cmUoKSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFz
c0RhdGEgYXMgdGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciBy
ZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rpb24KICAgICAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAg
ICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUo
ZXhlYykpCiAgICAgICAgICAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQ
cm90b3R5cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0
ZQogICAgICAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD4oKmdsb2JhbERhdGEsIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2Jq
ZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwo
KSkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0
PEpTR2xvYmFsT2JqZWN0Pjo6Y3JlYXRlKCpnbG9iYWxEYXRhLmdldCgpLCBnbG9iYWxPYmplY3RD
bGFzcywgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgq
Z2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENs
YXNzLT5wcm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKCFwcm90b3R5cGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEsNyArODEsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0
CiAgICAgaWYgKCFqc0NsYXNzKQogICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYykpOwogCi0gICAgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxP
YmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywg
ZGF0YSk7CisgICAgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBv
YmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CiAgICAg
aWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAg
ICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsK
IApAQCAtOTUsNyArOTUsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhD
YWxsCiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZl
eGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAg
Ci0gICAgcmV0dXJuIHRvUmVmKG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAg
IHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lSUQpKTsKIH0KIAogSlNPYmpl
Y3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1Jl
ZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3Ry
dWN0b3IpCkBAIC0xMDcsNyArMTA3LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3Ry
dWN0b3IoSlNDbwogICAgIGlmICghanNQcm90b3R5cGUpCiAgICAgICAgIGpzUHJvdG90eXBlID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKIAotICAgIEpT
Q2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tD
b25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBjYWxs
QXNDb25zdHJ1Y3Rvcik7CisgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9
IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9y
U3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rv
ci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
ICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3MzUsNyArMTczNSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENh
bGxGcmEKICAgICBBU1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VS
VChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNr
ZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IG5ldyAoY2FsbEZyYW1lKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KG93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRp
b25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRT
Y29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsNyArMjQ2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFBybwogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tb
aV07CiAgICAgICAgIGdsb2JhbE9iamVjdC0+cmVtb3ZlRGlyZWN0KCptX2dsb2JhbERhdGEsIGZ1
bmN0aW9uLT5pZGVudCgpKTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBl
eGlzdGluZyBwcm9wZXJ0aWVzLgogCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXcgKGV4ZWMp
IEpTRnVuY3Rpb24oZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFp
bik7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgbWFr
ZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CiAgICAgICAgIGludCBpbmRl
eCA9IGFkZEdsb2JhbFZhcihmdW5jdGlvbi0+aWRlbnQoKSwgZmFsc2UpOwogICAgICAgICBnbG9i
YWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqbV9nbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbWFrZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGJvZHktPmlkZW50KCks
IGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMo
KSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgYm9keS0+aWRlbnQoKSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMo
KSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5v
KCksIGJvZHktPmxhc3RMaW5lKCkpOwogICAgICAgICB9CiAKICAgICAgICAgSlNTdHJpbmcqIGFk
ZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgUmVnaXN0ZXJJRCogUmVn
RXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3Jl
YXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZs
YWdzKG1fZmxhZ3MudXN0cmluZygpKSkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1Jl
Z0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2Vu
ZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9m
bGFncy51c3RyaW5nKCkpKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBUaGlzTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICAgZXhjZXB0aW9u
VmFsdWUgPSBjcmVhdGVTeW50YXhFcnJvcihjYWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBs
aWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKTsKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7
CiAgICAgICAgIH0KLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVl
KG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgcmVnRXhwKSk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
SlNWYWx1ZShSZWdFeHBPYmplY3Q6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+
cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX25ld19yZWdleHApOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMzY1
LDcgKzMzNjUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgTkVYVF9JTlNU
UlVDVElPTigpOwogICAgICAgICB9CiAgICAgICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAg
ICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNh
bGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6
Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAg
ICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihh
cmd1bWVudHNSZWdpc3RlcikpID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICB9CkBAIC00
NDk1LDcgKzQ0OTUsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGludCBhY3Rp
dmF0aW9uUmVnID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIo
YWN0aXZhdGlvblJlZykuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFj
dGl2YXRpb24gPSBuZXcgKGdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkp
KTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6
Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGFjdGl2YXRpb25SZWcpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICAgICAgICAg
IGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChh
Y3RpdmF0aW9uKSk7CiAgICAgICAgIH0KQEAgLTQ2MDUsNyArNDYwNSw3IEBAIHNraXBfaWRfY3Vz
dG9tX3NlbGY6CiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCiAgICAgICAg
IGlmICghY2FsbEZyYW1lLT5yKGRzdCkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0
KSA9IEpTVmFsdWUoYXJndW1lbnRzKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2Vk
Uih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7
CiAgICAgICAgIH0KQEAgLTUwNjcsMTMgKzUwNjcsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
cmV0cmlldmVBcmd1bWVudHMoQwogICAgICAgICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0g
dW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAg
aWYgKEpTVmFsdWUgYXJndW1lbnRzID0gZnVuY3Rpb25DYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJn
dW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7
Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShuZXcgKGNhbGxGcmFtZSkgQXJn
dW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0g
SlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rp
b25DYWxsRnJhbWUpKTsKICAgICAgICAgZnVuY3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzUmVn
aXN0ZXIpID0gYXJndW1lbnRzOwogICAgICAgICBmdW5jdGlvbkNhbGxGcmFtZS0+cihyZWFsQXJn
dW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwog
ICAgIH0KIAotICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChmdW5jdGlvbkNhbGxGcmFt
ZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1
bmN0aW9uQ2FsbEZyYW1lKTsKICAgICBhcmd1bWVudHMtPmNvcHlSZWdpc3RlcnMoZnVuY3Rpb25D
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYyLDcgKzIwNjIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1
c2hfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEpTQWN0
aXZhdGlvbihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUo
KSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVz
aChhY3RpdmF0aW9uKSk7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CkBAIC0yMTEwLDcgKzIx
MTAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1
bWVudHMgPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRl
KCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9CiAKQEAgLTIxMTgsNyAr
MjExOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBBcmd1bWVudHMoc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsKKyAgICBBcmd1bWVudHMqIGFy
Z3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNr
RnJhbWUuY2FsbEZyYW1lLCBBcmd1bWVudHM6Ok5vUGFyYW1ldGVycyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKGFyZ3VtZW50cykpOwogfQogCkBAIC0zMTI4LDcgKzMxMjgs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19yCiAgICAgICAgIFZN
X1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0KIAotICAgIHJldHVybiBuZXcgKHN0YWNrRnJhbWUu
Z2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNy
ZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wX2JpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDE0ICs1OSwy
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKICAgICBwdWJsaWM6CisgICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlw
ZSB7IE5vUGFyYW1ldGVycyB9OworICAgICAgICAKKyAgICAgICAgc3RhdGljIEFyZ3VtZW50cyog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+
KGdsb2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50cyhjYWxsRnJhbWUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzdGF0aWMgQXJndW1lbnRzKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgTm9QYXJhbWV0ZXJzVHlwZSBub1BhcmFtcykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFyZ3VtZW50
cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSwgbm9QYXJhbXMpOworICAg
ICAgICB9CisKICAgICAgICAgLy8gVXNlIGFuIGVudW0gYmVjYXVzZSBvdGhlcndpc2UgZ2NjIGlu
c2lzdHMgb24gZG9pbmcgYSBtZW1vcnkKICAgICAgICAgLy8gcmVhZC4KICAgICAgICAgZW51bSB7
IE1heEFyZ3VtZW50cyA9IDB4MTAwMDAgfTsKLQotICAgICAgICBlbnVtIE5vUGFyYW1ldGVyc1R5
cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQorICAgIAorICAgIHByaXZhdGU6CiAgICAgICAgIEFyZ3Vt
ZW50cyhDYWxsRnJhbWUqKTsKICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSosIE5vUGFyYW1l
dGVyc1R5cGUpOworCisgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsK
IAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksMTEgQEAgc3RhdGljIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaQogICAgICAgICB1aW50MzJfdCBuID0gYXJncy5h
dCgwKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgaWYgKG4gIT0gYXJncy5hdCgwKS50b051bWJl
cihleGVjKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIkFycmF5IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGlu
dGVnZXIuIikpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBuLCBDcmVhdGVJbml0aWFs
aXplZCk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsK
ICAgICB9CiAKICAgICAvLyBvdGhlcndpc2UgdGhlIGFycmF5IGlzIGNvbnN0cnVjdGVkIHdpdGgg
dGhlIGFyZ3VtZW50cyBpbiBpdAotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOworICAg
IHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGU7CiAKICAgICBjbGFzcyBBcnJh
eUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAg
ICAgICAgQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEFycmF5UHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIEFycmF5Q29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBBcnJheVByb3RvdHlw
ZSogYXJyUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8QXJyYXlDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5Q29uc3RydWN0
b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGFyclByb3RvdHlwZSk7CisgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Miw3ICs1ODIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBkZWxldGVDb3VudCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihkZWxldGVEb3VibGUpOwogICAgIH0KIAotICAgIEpTQXJyYXkq
IHJlc09iaiA9IG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSwgZGVsZXRlQ291bnQsIENyZWF0
ZUNvbXBhY3QpOworICAgIEpTQXJyYXkqIHJlc09iaiA9IEpTQXJyYXk6OmNyZWF0ZShleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUo
KSwgZGVsZXRlQ291bnQsIENyZWF0ZUNvbXBhY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcmVz
T2JqOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGVsZXRlQ291bnQ7IGsrKykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBBcnJheVByb3RvdHlwZSA6IHB1YmxpYyBKU0FycmF5IHsKLSAgICBwdWJsaWM6
CiAgICAgICAgIGV4cGxpY2l0IEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgQm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3IoRQogLy8gRUNNQSAx
NS42LjIKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJv
b2xlYW5PYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3Qo
KS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmotPnNldEludGVybmFsVmFsdWUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oZXhlYykp
KTsKICAgICByZXR1cm4gb2JqOwogfQpAQCAtNzEsNyArNzEsNyBAQCBDYWxsVHlwZSBCb29sZWFu
Q29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJv
bUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKLSAgICBCb29sZWFuT2Jq
ZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgQm9vbGVhbk9iamVj
dCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxW
YWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSk7CiAgICAgcmV0
dXJuIG9iajsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBCb29sZWFuUHJvdG90eXBl
OwogCiAgICAgY2xhc3MgQm9vbGVhbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24gewotICAgIHB1YmxpYzoKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlwZSopOworICAgICAg
ICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3RydWN0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Qm9vbGVhbkNvbnN0cnVjdG9y
PigqZXhlYy0+aGVhcCgpKSkgQm9vbGVhbkNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCBib29sUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmpl
Y3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE1IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBCb29s
ZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBCb29sZWFu
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOSArMjYsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVhblByb3Rv
dHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKLSAgICBwdWJsaWM6CiAgICAgICAgIEJvb2xl
YW5Qcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEJvb2xlYW5Qcm90b3R5cGUqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
Qm9vbGVhblByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3Rv
dHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQy
LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMsIGdsb2Jh
bE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CisgICAgcmV0dXJuIERhdGVJbnN0YW5j
ZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9
CiAgICAgCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRo
RGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBEYXRl
UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRGF0ZUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAgICAgICAgRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRGF0ZVByb3RvdHlwZSopOworICAgICAg
ICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBEYXRlQ29uc3RydWN0b3IqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBkYXRlUHJvdG90eXBlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZUNvbnN0cnVjdG9yPigqZXhlYy0+
aGVhcCgpKSkgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBk
YXRlUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5z
dGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2UuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDIwIEBAIG5h
bWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2Ug
OiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgog
ICAgICAgICBEYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgZG91YmxlKTsKICAg
ICAgICAgZXhwbGljaXQgRGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotCisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIERhdGVJbnN0YW5jZSogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGRvdWJsZSBkYXRlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNl
PigqZXhlYy0+aGVhcCgpKSkgRGF0ZUluc3RhbmNlKGV4ZWMsIHN0cnVjdHVyZSwgZGF0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RhdGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBEYXRlSW5z
dGFuY2UoZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZG91
YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLnVuY2hl
Y2tlZEdldE51bWJlcigpOyB9CiAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBj
bGFzcyBEYXRlUHJvdG90eXBlIDogcHVibGljIERhdGVJbnN0YW5jZSB7Ci0gICAgcHVibGljOgog
ICAgICAgICBEYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBEYXRlUHJvdG90eXBlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPERhdGVQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBEYXRlUHJvdG90eXBlKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw0MyArNDIsNDMgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZVVSTFBy
b3BlcnR5TmFtZQogSlNPYmplY3QqIGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlz
RW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7
CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNP
YmplY3QqIGNyZWF0ZUV2YWxFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwot
ICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QtPmV2YWxFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+
cmFuZ2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAg
IHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCks
IG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NF
UlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBF
cnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNz
YWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNz
YWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFs
T2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3ludGF4RXJyb3JDb25zdHJ1Y3Rv
cigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN5bnRh
eEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpT
T2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVy
ZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCkt
PmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlVVJJRXJy
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5V
UklFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGds
b2JhbE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNz
YWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
VVN0cmluZyYgbWVzc2FnZSkKQEAgLTE2NiwxMiArMTY2LDE3IEBAIEpTT2JqZWN0KiB0aHJvd1N5
bnRheEVycm9yKEV4ZWNTdGF0ZSogZXgKIH0KIAogY2xhc3MgU3RyaWN0TW9kZVR5cGVFcnJvckZ1
bmN0aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotcHVibGljOgogICAgIFN0cmljdE1v
ZGVUeXBlRXJyb3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQog
ICAgICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIpCiAgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgewogICAgIH0KKwor
cHVibGljOgorICAgIHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbj4oKmV4ZWMtPmhl
YXAoKSkpIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgbWVzc2FnZSk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICB7CkBAIC0yMDUsNyArMjEwLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJp
Y3RNb2RlVHlwZQogCiBKU1ZhbHVlIGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBT
dHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw5ICsyOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFcnJvclByb3RvdHlw
ZTsKIAogICAgIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7Ci0gICAgcHVibGljOgogICAgICAgICBFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRXJyb3JQcm90b3R5cGUqKTsKIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIEVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBF
cnJvclByb3RvdHlwZSogZXJyUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEVy
cm9yQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGVyclByb3RvdHlw
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAgICB2
aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMzIgKzI1LDMyIEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gRXJyb3JJbnN0YW5jZTo6c19pbmZvID0geyAiRXJyb3IiLCAmSlNOb25GaW5h
bE9iamVjdDo6c19pbmZvLCAwLCAwIH07CiAKLUVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2Uo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEpT
Tm9uRmluYWxPYmplY3QoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0Vycm9ySW5zdGFuY2U6OkVy
cm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogICAgICwg
bV9hcHBlbmRTb3VyY2VUb01lc3NhZ2UoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKLSAgICBwdXREaXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5
TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKGdsb2JhbERhdGEsICIiKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2Us
IGpzU3RyaW5nKCZnbG9iYWxEYXRhLCAiIiksIERvbnRFbnVtKTsKIH0KIAotRXJyb3JJbnN0YW5j
ZTo6RXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQotICAgIDogSlNOb25GaW5hbE9iamVjdCgq
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKQorRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0YW5jZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5n
JiBtZXNzYWdlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
CiAgICAgLCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZShmYWxzZSkKIHsKICAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+
cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgbWVzc2FnZSksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5h
bWVzLT5tZXNzYWdlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgbWVzc2FnZSksIERvbnRFbnVtKTsK
IH0KIAotRXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2Up
CitFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsK
LSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBFcnJvckluc3RhbmNlKGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9ySW5z
dGFuY2U+KGdsb2JhbERhdGEuaGVhcCkpIEVycm9ySW5zdGFuY2UoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlLCBtZXNzYWdlKTsKIH0KIAogRXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSkK
IHsKICAgICBpZiAobWVzc2FnZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOworICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5jZShleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvckluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEpTR2xvYmFsRGF0YSosIFN0cnVjdHVyZSosIGNvbnN0
IFVTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7CiAgICAgICAgIHN0YXRpYyBFcnJv
ckluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBtZXNzYWdl
KTsKIAogCkBAIC00NSw4ICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNFcnJvckluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgcHJv
dGVjdGVkOgotICAgICAgICBleHBsaWNpdCBFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSosIFN0
cnVjdHVyZSopOwotICAgICAgICBleHBsaWNpdCBFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSos
IFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKKyAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0
YW5jZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgZXhwbGljaXQgRXJyb3JJ
bnN0YW5jZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7CiAKICAg
ICAgICAgYm9vbCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZTsKICAgICB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgY29uc3QgQ2xhc3NJbmZvIEVy
cm9yUHJvdG90eXBlOjpzX2luZm8gPQogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChFcnJvclBy
b3RvdHlwZSk7CiAKIEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQot
ICAgIDogRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCisgICAg
OiBFcnJvckluc3RhbmNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQogewogICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCAiRXJyb3IiKSwgRG9udEVu
dW0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlOwogCiAgICAgY2xhc3MgRXJy
b3JQcm90b3R5cGUgOiBwdWJsaWMgRXJyb3JJbnN0YW5jZSB7Ci0gICAgcHVibGljOgogICAgICAg
ICBFcnJvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8RXJyb3JQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBFcnJvclByb3RvdHlwZShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0
MiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgSW50ZXJydXB0ZWRFeGVjdXRpb25F
cnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVj
dChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLmludGVycnVwdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1
cmUuZ2V0KCkpCisgICAgeworICAgIH0KKwogcHVibGljOgotICAgIEludGVycnVwdGVkRXhlY3V0
aW9uRXJyb3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9uRmluYWxP
YmplY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmludGVycnVwdGVkRXhlY3V0aW9uRXJyb3JT
dHJ1Y3R1cmUuZ2V0KCkpCisgICAgc3RhdGljIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgeworICAgICAgICByZXR1cm4gbmV3
IChhbGxvY2F0ZUNlbGw8SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFw
KSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gSW50ZXJydXB0
ZWQ7IH0KQEAgLTU1LDE0ICs2MCwxOSBAQCBwdWJsaWM6CiAKIEpTT2JqZWN0KiBjcmVhdGVJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0g
ICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihnbG9i
YWxEYXRhKTsKKyAgICByZXR1cm4gSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpn
bG9iYWxEYXRhKTsKIH0KIAogY2xhc3MgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAg
ICB7CisgICAgfQorCiBwdWJsaWM6Ci0gICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT50ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkp
CisgICAgc3RhdGljIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKICAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxU
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0ZWRFeGVj
dXRpb25FcnJvcihnbG9iYWxEYXRhKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIENvbXBsVHlwZSBl
eGNlcHRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gVGVybWluYXRlZDsgfQpAQCAtNzIsNyArODIs
NyBAQCBwdWJsaWM6CiAKIEpTT2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0
aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIFRl
cm1pbmF0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKIH0KIAogSlNPYmpl
Y3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsOCArOTAsOCBAQCBQcm9ncmFtRXhlY3V0YWJsZTo6flByb2dyYW1F
eGVjdXRhYmxlKCkKIAogY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZv
ID0geyAiRnVuY3Rpb25FeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwg
MCB9OwogCi1GdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFy
YW1ldGVycywgYm9vbCBpblN0cmljdENvbnRleHQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGlu
ZSkKLSAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZ2xvYmFsRGF0YS0+ZnVuY3Rpb25FeGVjdXRhYmxl
U3RydWN0dXJlLmdldCgpLCBnbG9iYWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKK0Z1
bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBi
b29sIGluU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIDog
U2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5n
ZXQoKSwgZ2xvYmFsRGF0YSwgc291cmNlLCBpblN0cmljdENvbnRleHQpCiAgICAgLCBtX251bUNh
cHR1cmVkVmFyaWFibGVzKDApCiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhmb3JjZVVzZXNB
cmd1bWVudHMpCiAgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykKQEAgLTQ4MSw3ICs0ODEs
NyBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6CiAgICAgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSA9IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+
Ym9keSgpOwogICAgIEFTU0VSVChib2R5KTsKIAotICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJj
ZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNT
dHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICByZXR1
cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlv
bk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFt
ZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0
TGluZSgpKTsKIH0KIAogVVN0cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19J
U19IT1NUID0gMDsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1Rf
Q09NUElMRUQgPSAtMTsKLSAgICAKLSAgICBwdWJsaWM6CisKKyAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIEV4ZWN1dGFibGVCYXNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlKQogICAgICAgICAgICAgLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKG51
bVBhcmFtZXRlcnMpCkBAIC02NCw2ICs2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIGZpbmFsaXplci5sZWFrSGFuZGxlKCk7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICAK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFeGVjdXRhYmxlQmFzZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0
ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXhl
Y3V0YWJsZUJhc2U+KGdsb2JhbERhdGEuaGVhcCkpIEV4ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgbnVtUGFyYW1ldGVycyk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIGlz
SG9zdEZ1bmN0aW9uKCkgY29uc3QKICAgICAgICAgewpAQCAtMTY2LDEzICsxNzIsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRo
dW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFjYWxsVGh1bmspCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEp
IE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29k
ZSgpLCBjb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkg
TmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRo
dW5rKSwgZnVuY3Rpb24sIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGNv
bnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0
aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxE
YXRhLCBKSVRDb2RlKCksIGZ1bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxE
YXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5j
dGlvbihjYWxsVGh1bmspLCBmdW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVj
dFRodW5rKSwgY29uc3RydWN0b3IpOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBzdGF0aWMg
TmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2
ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgICAg
fQogI2VuZGlmCiAKQEAgLTIxMywxMyArMjE5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgU2NyaXB0RXhlY3V0YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCkKLSAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoKmdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEKQorICAgICAgICBTY3JpcHRF
eGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKKyAgICAg
ICAgICAgIDogRXhlY3V0YWJsZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1F
VEVSU19OT1RfQ09NUElMRUQpCiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAg
ICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJl
IDogMCkKICAgICAgICAgewogI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0gICAgICAg
ICAgICBpZiAoU2FtcGxpbmdUb29sKiBzYW1wbGVyID0gZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKSkKKyAgICAgICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9i
YWxEYXRhLmludGVycHJldGVyLT5zYW1wbGVyKCkpCiAgICAgICAgICAgICAgICAgc2FtcGxlci0+
bm90aWZ5T2ZTY29wZSgqZ2xvYmFsRGF0YSwgdGhpcyk7CiAjZWxzZQogICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGdsb2JhbERhdGEpOwpAQCAtMjkwLDcgKzI5NiwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiAqbV9ldmFsQ29kZUJsb2NrOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIHsgcmV0dXJuIG5l
dyAoZXhlYykgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7
IH0KKyAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXZhbEV4ZWN1dGFi
bGU+KCpleGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJp
Y3RDb250ZXh0KTsgCisgICAgICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENv
ZGUmIGdlbmVyYXRlZEpJVENvZGUoKQpAQCAtMzE5LDcgKzMyOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJj
ZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFi
bGU+KCpleGVjLT5oZWFwKCkpKSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwogICAg
ICAgICB9CiAKICAgICAgICAgflByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC0zNzIsMTcgKzM4MSwx
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBGdW5jdGlv
bkV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1
bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50
IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVz
ZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxh
c3RMaW5lKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4
ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwg
c291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0
LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBGdW5j
dGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNB
cmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0
Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgICAgICBzdGF0aWMgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgZm9yY2VVc2Vz
QXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGJvb2wgaXNJblN0cmlj
dENvbnRleHQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERh
dGEsIG5hbWUsIHNvdXJjZSwgZm9yY2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3Ry
aWN0Q29udGV4dCwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5j
dGlvbkV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVu
dHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3IgY29u
c3RydWN0IGJ5dGVjb2RlLiBUaGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpAQCAtNDc5LDcgKzQ4OCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERh
dGEqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUs
IGludCBsYXN0TGluZSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEm
LCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVz
ZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGlu
dCBsYXN0TGluZSk7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1
bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0
TGluZSk7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsOCArMTEyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1
bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBleGNl
cHRpb24pOwogICAgIH0KIAotICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gbmV3IChl
eGVjKSBTY29wZUNoYWluTm9kZSgwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxP
YmplY3QsIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBK
U0Z1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uLCBzY29wZUNoYWluKTsKKyAgICBTY29wZUNoYWluTm9k
ZSogc2NvcGVDaGFpbiA9IFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUoZXhlYywgMCwgZ2xvYmFsT2Jq
ZWN0LCAmZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSk7
CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBmdW5jdGlvbiwgc2NvcGVDaGFp
bik7CiB9CiAKIC8vIEVDTUEgMTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3RvcgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogCiAgICAgY2xhc3Mg
RnVuY3Rpb25Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJs
aWM6CiAgICAgICAgIEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBGdW5jdGlvblByb3RvdHlwZSopOworICAgIAorICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIEZ1bmN0aW9uQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBG
dW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29uc3RydWN0b3I+KCpleGVjLT5oZWFw
KCkpKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBm
dW5jUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVh
bCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCBG
dW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhlCiAKIHZvaWQgRnVuY3Rpb25Q
cm90b3R5cGU6OmFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVu
Y3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKQogewotICAg
IHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS50b1N0cmluZywgZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyksIERvbnRF
bnVtKTsKLSAgICAqYXBwbHlGdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBn
bG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YXBwbHksIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0
aG91dFRyYW5zaXRpb24oZXhlYywgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywg
ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKKyAgICAqYXBwbHlGdW5jdGlv
biA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0
dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXBwbHksIGZ1bmN0aW9uUHJvdG9GdW5jQXBw
bHkpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgKmFwcGx5
RnVuY3Rpb24sIERvbnRFbnVtKTsKLSAgICAqY2FsbEZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jYWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOworICAgICpjYWxsRnVu
Y3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0
cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5j
Q2FsbCk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqY2Fs
bEZ1bmN0aW9uLCBEb250RW51bSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMCArMjYsMTYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
RnVuY3Rpb25Qcm90b3R5cGUgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGlj
OgogICAgICAgICBGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSopOwotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVu
Y3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpT
RnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUg
cHJvdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBwcm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBB
bm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDEyICszNiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBmb3IgYSBwcm9wZXJ0eS4KICAg
ICBjbGFzcyBHZXR0ZXJTZXR0ZXIgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVDsKLSAgICBwdWJsaWM6CisgICAgICAgIAogICAgICAgICBHZXR0ZXJTZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBKU0NlbGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBl
eGVjLT5nbG9iYWxEYXRhKCkuZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKQogICAgICAgICB7
CiAgICAgICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEdldHRlclNldHRlciog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEdldHRlclNldHRlcj4oKmV4ZWMtPmhlYXAoKSkpIEdldHRlclNldHRl
cihleGVjKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNPYmplY3QqIGdldHRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fZ2V0dGVyLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgICAgICAKKyAgICAg
ICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVyKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKSAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPEpTQVBJVmFsdWVXcmFwcGVyPigqZXhlYy0+aGVhcCgpKSkgSlNBUElWYWx1ZVdyYXBwZXIo
ZXhlYywgdmFsdWUpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBKU0FQSVZh
bHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCkBAIC01Niw3ICs2MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTVmFsdWUganNBUElWYWx1ZVdyYXBw
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG5ldyAoZXhlYykgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOworICAgICAgICByZXR1
cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVjLCB2YWx1ZSk7CiAgICAgfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIw
LDcgQEAgSlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcihFeAogICAgICAgICBy
ZXR1cm4gYXJndW1lbnRzOwogICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlm
aWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogCi0gICAgSlNWYWx1ZSBh
cmd1bWVudHMgPSBKU1ZhbHVlKG5ldyAoY2FsbEZyYW1lKSBBcmd1bWVudHMoY2FsbEZyYW1lKSk7
CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUpKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAg
IGNsYXNzIEpTQWN0aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKICAgICAgICAg
dHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7Ci0gICAgcHVibGljOgogICAgICAgICBKU0Fj
dGl2YXRpb24oQ2FsbEZyYW1lKiwgRnVuY3Rpb25FeGVjdXRhYmxlKik7CisgICAgCisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgSlNBY3RpdmF0aW9uKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
RXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpT
QWN0aXZhdGlvbj4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgZnVu
Y0V4ZWMpOworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB+SlNBY3RpdmF0aW9uKCk7CiAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxNCArNjAsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBcnJheSA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsK
IAotICAgIHB1YmxpYzoKLSAgICAgICAgSlNBcnJheShWUHRyU3RlYWxpbmdIYWNrVHlwZSk7Ci0K
KyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKik7CiAgICAgICAgIEpTQXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCwgQXJyYXlDcmVhdGlvbk1vZGUpOwogICAgICAgICBKU0Fy
cmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1
ZXMpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIEpTQXJyYXkoVlB0clN0ZWFsaW5n
SGFja1R5cGUpOwogICAgICAgICB2aXJ0dWFsIH5KU0FycmF5KCk7CiAKKyAgICAgICAgc3RhdGlj
IEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGlu
aXRpYWxMZW5ndGgsIEFycmF5Q3JlYXRpb25Nb2RlIGNyZWF0ZU1vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9iYWxEYXRhLmhl
YXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCwgY3JlYXRl
TW9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
QXJnTGlzdCYgaW5pdGlhbFZhbHVlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpTQXJyYXkoZ2xvYmFs
RGF0YSwgc3RydWN0dXJlLCBpbml0aWFsVmFsdWVzKTsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3Niw2ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNl
bGwtPn5KU0NlbGwoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCog
YWxsb2NhdGVDZWxsKEhlYXAmIGhlYXApCisgICAgeworICAgICAgICByZXR1cm4gaGVhcC5hbGxv
Y2F0ZShzaXplb2YoVCkpOworICAgIH0KKyAgICAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEpTQ2VsbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDI0IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
IEJhc2U7CiAKLSAgICBwdWJsaWM6CiAgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwg
TmF0aXZlRnVuY3Rpb24pOwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2
ZUV4ZWN1dGFibGUqKTsKICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4
ZWN1dGFibGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPigqZXhl
Yy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbGVu
Z3RoLCBpZGVudCwgbmF0aXZlRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTRnVu
Y3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlYykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBK
U0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBsZW5ndGgsIGlkZW50LCBu
YXRpdmVFeGVjKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBm
dW5jRXhlYywgc2NvcGVDaGFpbik7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZpcnR1
YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICBjb25zdCBVU3RyaW5nJiBuYW1lKEV4ZWNTdGF0
ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KEpTT2JqZWN0KiB0aGlzCiAgICAgc3RydWN0dXJl
KCktPmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcoKTsKIAogICAgIG1fZ2xvYmFsRGF0
YSA9IEhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKTsKLSAgICBtX2dsb2JhbFNjb3BlQ2hh
aW4uc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIG5ldyAobV9nbG9iYWxEYXRhLmdldCgpKSBTY29w
ZUNoYWluTm9kZSgwLCB0aGlzLCBtX2dsb2JhbERhdGEuZ2V0KCksIHRoaXMsIHRoaXNWYWx1ZSkp
OworICAgIG1fZ2xvYmFsU2NvcGVDaGFpbi5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgU2NvcGVD
aGFpbk5vZGU6OmNyZWF0ZSgwLCB0aGlzLCBtX2dsb2JhbERhdGEuZ2V0KCksIHRoaXMsIHRoaXNW
YWx1ZSkpOwogCiAgICAgSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKS0+aW5pdCgwLCAwLCBt
X2dsb2JhbFNjb3BlQ2hhaW4uZ2V0KCksIENhbGxGcmFtZTo6bm9DYWxsZXIoKSwgMCwgMCk7CiAK
QEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMo
KTsKIAotICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbmV3IChleGVjKSBGdW5jdGlvblByb3RvdHlwZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8v
IFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJlIHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBj
cmVhdGVkLgorICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvblByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7IC8v
IFRoZSByZWFsIHByb3RvdHlwZSB3aWxsIGJlIHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBj
cmVhdGVkLgogICAgIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7
CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gMDsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9mdW5jdGlvblBy
b3RvdHlwZS0+YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCksICZjYWxsRnVuY3Rpb24sICZhcHBseUZ1bmN0aW9uKTsKICAgICBtX2NhbGxG
dW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjYWxsRnVuY3Rpb24pOwogICAg
IG1fYXBwbHlGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBhcHBseUZ1bmN0
aW9uKTsKLSAgICBtX29iamVjdFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSkpOworICAgIG1f
b2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE9iamVjdFByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlw
ZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOwogCiAgICAgbV9lbXB0eU9iamVjdFN0
cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS0+
aW5oZXJpdG9ySUQoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7CkBAIC0yMDYsNTQgKzIwNiw1NCBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9jYWxsYmFja0Nv
bnN0cnVjdG9yU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2NhbGxiYWNrT2JqZWN0U3RydWN0dXJlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xv
YmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fYXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBBcnJheVByb3RvdHlwZSh0aGlzLCBBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7CisgICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEFycmF5UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKICAgICBtX2FycmF5U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIEpTQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fYXJyYXlQ
cm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fYXJyYXlQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAg
IG1fc3RyaW5nUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhl
YykgU3RyaW5nUHJvdG90eXBlKGV4ZWMsIHRoaXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaW5n
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAg
ICBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBT
dHJpbmdPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fc3RyaW5n
UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIHRoaXMs
IEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9ib29sZWFuT2JqZWN0U3RydWN0dXJl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEJvb2xlYW5PYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fYm9vbGVhblByb3RvdHlwZS5nZXQoKSkpOwogCi0g
ICAgbV9udW1iZXJQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChl
eGVjKSBOdW1iZXJQcm90b3R5cGUoZXhlYywgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1i
ZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwog
ICAgIG1fbnVtYmVyT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IE51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9udW1i
ZXJQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fZGF0ZVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIERhdGVQcm90b3R5cGUoZXhlYywgdGhpcywgRGF0
ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKICAgICBtX2RhdGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgRGF0ZUluc3RhbmNlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2RhdGVQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIFJlZ0V4cCogZW1wdHlSZWdleCA9IFJlZ0V4
cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksICIiLCBOb0ZsYWdzKTsKKyAgICBSZWdFeHAq
IGVtcHR5UmVnZXggPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksICIiLCBOb0Zs
YWdzKTsKICAgICAKLSAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBuZXcgKGV4ZWMpIFJlZ0V4cFByb3RvdHlwZShleGVjLCB0aGlzLCBSZWdFeHBQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSwgZW1wdHlSZWdleCkpOworICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CiAgICAgbV9yZWdFeHBTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOwogCiAg
ICAgbV9tZXRob2RDYWxsRHVtbXkuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgRXJyb3JQcm90b3R5cGUqIGVycm9yUHJvdG90
eXBlID0gbmV3IChleGVjKSBFcnJvclByb3RvdHlwZShleGVjLCB0aGlzLCBFcnJvclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90b3R5cGUgPSBFcnJvclByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fZXJy
b3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgRXJyb3JJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQcm90b3R5cGUpKTsKIAog
ICAgIC8vIENvbnN0cnVjdG9ycwogCi0gICAgSlNDZWxsKiBvYmplY3RDb25zdHJ1Y3RvciA9IG5l
dyAoZXhlYykgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgdGhpcywgT2JqZWN0Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBmdW5jdGlvbkNv
bnN0cnVjdG9yID0gbmV3IChleGVjKSBGdW5jdGlvbkNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIEZ1
bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKLSAg
ICBKU0NlbGwqIGFycmF5Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEFycmF5Q29uc3RydWN0b3Io
ZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJyYXlQcm90b3R5cGUuZ2V0
KCkpOwotICAgIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIFN0cmluZ0Nv
bnN0cnVjdG9yKGV4ZWMsIHRoaXMsIFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9zdHJpbmdQ
cm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0cnVjdG9yID0gbmV3IChl
eGVjKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgdGhpcywgQm9vbGVhbkNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIG51bWJlckNvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBOdW1iZXJD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwq
IGRhdGVDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMs
IERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlND
ZWxsKiBvYmplY3RDb25zdHJ1Y3RvciA9IE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywg
dGhpcywgT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7
CisgICAgSlNDZWxsKiBmdW5jdGlvbkNvbnN0cnVjdG9yID0gRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGFycmF5Q29uc3RydWN0b3IgPSBBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1f
YXJyYXlQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogc3RyaW5nQ29uc3RydWN0b3IgPSBT
dHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIFN0cmluZ0NvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9zdHJpbmdQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYm9vbGVhbkNvbnN0
cnVjdG9yID0gQm9vbGVhbkNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgQm9vbGVhbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKTsKKyAgICBKU0NlbGwq
IG51bWJlckNvbnN0cnVjdG9yID0gTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlz
LCBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKTsKKyAg
ICBKU0NlbGwqIGRhdGVDb25zdHJ1Y3RvciA9IERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIERhdGVDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZGF0ZVByb3RvdHlwZS5nZXQoKSk7CiAK
LSAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgdGhpcywgUmVnRXhwQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fcmVnRXhwQ29uc3RydWN0
b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90eXBl
LmdldCgpKSk7CiAKLSAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbmV3IChleGVjKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIEVycm9yQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBlcnJvclByb3RvdHlwZSkpOworICAgIG1fZXJyb3JDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUo
ZXhlYywgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJvdG90eXBlKSk7CiAK
ICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlID0gTmF0aXZlRXJy
b3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGVycm9yUHJv
dG90eXBlKTsKICAgICBTdHJ1Y3R1cmUqIG5hdGl2ZUVycm9yU3RydWN0dXJlID0gTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Io
ZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3Ry
dWN0dXJlLCAiRXZhbEVycm9yIikpOwotICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVT
dHJ1Y3R1cmUsICJSYW5nZUVycm9yIikpOwotICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rv
ci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJv
dG90eXBlU3RydWN0dXJlLCAiUmVmZXJlbmNlRXJyb3IiKSk7Ci0gICAgbV9zeW50YXhFcnJvckNv
bnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZl
RXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZl
RXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJTeW50YXhFcnJvciIpKTsKLSAgICBtX3R5cGVFcnJv
ckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0
aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0
aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJUeXBlRXJyb3IiKSk7Ci0gICAgbV9VUklFcnJv
ckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0
aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0
aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJVUklFcnJvciIpKTsKKyAgICBtX2V2YWxFcnJv
ckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZl
RXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7CisgICAgbV9yYW5nZUVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVF
cnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7CisgICAgbV9yZWZlcmVuY2VF
cnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0
aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIpKTsKKyAgICBtX3N5
bnRheEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJl
LCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIikpOworICAgIG1f
dHlwZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJl
LCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIpKTsKKyAgICBtX1VS
SUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOwogCiAgICAgbV9vYmpl
Y3RQcm90b3R5cGUtPnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG9iamVjdENvbnN0
cnVjdG9yLCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0RnVu
Y3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jb25zdHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwpAQCAt
MjgxLDE1ICsyODEsMTUgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90
bwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0
YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgbV90eXBlRXJyb3JDb25zdHJ1Y3Rv
ci5nZXQoKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJVUklFcnJvciIpLCBtX1VS
SUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKIAotICAgIG1fZXZhbEZ1bmN0aW9u
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZXZhbCwgZ2xvYmFsRnVuY0V2YWwpKTsKKyAgICBtX2V2YWxGdW5jdGlvbi5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgbV9mdW5j
dGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGdsb2Jh
bEZ1bmNFdmFsKSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBtX2V2YWxGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwogCiAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50
aWZpZXIoZXhlYywgIk1hdGgiKSwgbmV3IChleGVjKSBNYXRoT2JqZWN0KGV4ZWMsIHRoaXMsIE1h
dGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCisgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiksIE1hdGhPYmplY3Q6OmNyZWF0ZShl
eGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERvbnREZWxldGUpLAogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiTmFOIiksIGpzTmFOKCks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkluZmluaXR5IiksIGpzTnVtYmVyKHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgInVu
ZGVmaW5lZCIpLCBqc1VuZGVmaW5lZCgpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSksCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJKU09OIiks
IG5ldyAoZXhlYykgSlNPTk9iamVjdCh0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSB8
IERvbnREZWxldGUpCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMs
ICJKU09OIiksIEpTT05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
LCBEb250RW51bSB8IERvbnREZWxldGUpCiAgICAgfTsKICAgICBhZGRTdGF0aWNHbG9iYWxzKHN0
YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwogCkBAIC0zOTUs
MTEgKzM5NSw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2l6ZVJlZ2lzdGVycyhzaXoKICAg
ICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVhc2UoKSwgbmV3U2l6
ZSk7CiB9CiAKLXZvaWQqIEpTR2xvYmFsT2JqZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUs
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLXsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aGVh
cC5hbGxvY2F0ZShzaXplKTsKLX0KLQogdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xv
YmFscyhHbG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkKIHsKICAgICByZXNp
emVSZWdpc3RlcnMoc3ltYm9sVGFibGUoKS5zaXplKCkgKyBjb3VudCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDggKzEyMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIG1fZXZhbEVuYWJsZWQ7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQqIG9wZXJh
dG9yIG5ldyhzaXplX3QsIEpTR2xvYmFsRGF0YSopOwotCiAgICAgICAgIGV4cGxpY2l0IEpTR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAm
bV9zeW1ib2xUYWJsZSwgMCkKICAgICAgICAgICAgICwgbV9yZWdpc3RlckFycmF5U2l6ZSgwKQpA
QCAtMjg3LDggKzI4NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHJlc2V0KEpT
VmFsdWUgcHJvdG90eXBlKTsKIAogICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtu
b3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7Ci0KLSAgICAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCk7IC8vIGNhbiBvbmx5IGJlIGFsbG9jYXRlZCB3aXRoIEpTR2xvYmFs
RGF0YQogICAgIH07CiAKICAgICBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlNWYWx1
ZSk7CkBAIC0zNzgsNyArMzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNB
cnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CiAgICAgfQogICAgIAogICAgIGlubGluZSBKU0FycmF5
KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTM4OCw3ICszODQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWdu
ZWQgaW5pdGlhbExlbmd0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJy
YXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGlu
aXRpYWxMZW5ndGgsIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSwgaW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAogICAgIGlubGlu
ZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCkKQEAgLTQwMCw3ICszOTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7
CiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHZhbHVlczsKICAgICAgICAgdmFsdWVzLmFw
cGVuZChzaW5nbGVJdGVtVmFsdWUpOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1
ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOwogICAgIH0KIAogICAgIGlu
bGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2lu
Z2xlSXRlbVZhbHVlKQpAQCAtNDEwLDcgKzQwNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSwgdmFsdWVzKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIC8vIGluIGNl
cnRhaW4gU3F1aXJyZWxGaXNoIGJ5dGVjb2RlcyAtLSBlZmZlY3RpdmVseSBpdCBqdXN0IHNpbGVu
dGx5IGNvbnN1bWVzCiAgICAgLy8gYW55IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSByZXN1
bHQgb2YgYSBmYWlsZWQgdG9PYmplY3QgY2FsbC4KICAgICBjbGFzcyBKU05vdEFuT2JqZWN0IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgSlNOb3RBbk9i
amVjdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubm90QW5PYmplY3RTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBKU05vdEFuT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNOb3RBbk9iamVjdD4o
KmV4ZWMtPmhlYXAoKSkpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDkgKzMzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAg
ICAgY2xhc3MgSlNPTk9iamVjdCA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3Qgewot
ICAgIHB1YmxpYzoKICAgICAgICAgSlNPTk9iamVjdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNPTk9iamVjdCogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU09OT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcg
KzMyMiw3IEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAo
ZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVy
ID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xv
YmFsRGF0YSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIs
IHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1
cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lk
IEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4
ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9
IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMpOwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBT
ZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBT
dHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBA
QCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRl
c2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3Jp
cHRvcigpKSB7CiAgICAgICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAm
JiBvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdl
dHRlclNldHRlciogYWNjZXNzb3IgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAg
ICAgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShl
eGVjKTsKICAgICAgICAgICAgIGlmIChvbGREZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlcyB8PSBHZXR0ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3It
PnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRhKCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0
dGVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpT
RmluYWxPYmplY3RfaW5saW5lU3RvcgogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmlu
YWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNGaW5hbE9iamVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IqIEpTUHJvcGVydHlOYW1lSXQKICAgICAgICAgIW8tPnN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgIW8tPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpICYmCiAgICAgICAgICFvLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAgIG51bUNhY2hlYWJsZVNsb3RzID0gby0+c3RydWN0
dXJlKCktPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLQotICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IoZXhlYywgcHJvcGVydHlOYW1lcy5kYXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKKyAg
ICAKKyAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yID0g
bmV3IChhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4oKmV4ZWMtPmhlYXAoKSkp
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhlYywgcHJvcGVydHlOYW1lcy5kYXRhKCksIG51bUNh
Y2hlYWJsZVNsb3RzKTsKIAogICAgIGlmIChvLT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkp
CiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgICAgIHN0YXRp
YyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hlYWJs
ZVNsb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcihleGVjLCBwcm9wZXJ0eU5hbWVBcnJheURhdGEsIG51bUNhY2hlYWJsZVNsb3QpOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMCArMTk5LDEwIEBAIEpTU3RyaW5nKiBKU1N0cmlu
Zzo6c3Vic3RyaW5nRnJvbVJvcGUoRXgKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0K
ICAgICBpZiAoc3Vic3RyaW5nRmliZXJDb3VudCA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOworICAg
ICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJz
WzBdKTsKICAgICBpZiAoc3Vic3RyaW5nRmliZXJDb3VudCA9PSAyKQotICAgICAgICByZXR1cm4g
bmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0s
IHN1YnN0cmluZ0ZpYmVyc1sxXSk7Ci0gICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0sIHN1
YnN0cmluZ0ZpYmVyc1syXSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9i
YWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSk7CisgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vi
c3RyaW5nRmliZXJzWzFdLCBzdWJzdHJpbmdGaWJlcnNbMl0pOwogfQogCiBKU1ZhbHVlIEpTU3Ry
aW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNTdGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBj
b25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCkKQEAgLTI1NCw3ICsyNTQsNyBAQCBKU1ZhbHVlIEpT
U3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNTCiAgICAgfQogCiAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZShu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWUoSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYnVpbGRl
ci5yZWxlYXNlKCkpKTsKIH0KIAogSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNl
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKQEAgLTI5OCw3ICsyOTgsNyBAQCBVU3RyaW5n
IEpTU3RyaW5nOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4CiAKIGlubGluZSBTdHJpbmdPYmplY3Qq
IFN0cmluZ09iamVjdDo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBT
dHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpLCBzdHJpbmcpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJp
bmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBzdHJpbmcpOwogfQogCiBK
U09iamVjdCogSlNTdHJpbmc6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsOSArMTgwLDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICAgICAgVmVjdG9yPFdvcmtJdGVtLCAxNj4gbV93
b3JrUXVldWU7CiAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBlbnVtIEhhc090aGVyT3du
ZXJUeXBlIHsgSGFzT3RoZXJPd25lciB9OwogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNTdHJp
bmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKLSAgICAg
ICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgcHJpdmF0ZToKKyAgICAgICAgQUxXQVlTX0lOTElORSBKU1N0cmluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICAgICAg
OiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoMCkKQEAgLTE5MSwyNSArMTk0
LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVw
b3J0RXh0cmFNZW1vcnlDb3N0KHZhbHVlLmltcGwoKS0+Y29zdCgpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5cGUgeyBIYXNPdGhlck93bmVyIH07Ci0gICAgICAg
IEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUs
IEhhc090aGVyT3duZXJUeXBlKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5
cGUpCisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkpCiAg
ICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgw
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAg
ICAgICB9Ci0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCi0gICAgICAgICAgICA6
IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQor
ICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQorICAgICAgICAgICAgOiBKU0NlbGwo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAg
ICAsIG1fbGVuZ3RoKHZhbHVlLT5sZW5ndGgoKSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1
ZSkKICAgICAgICAgICAgICwgbV9maWJlckNvdW50KDApCiAgICAgICAgIHsKICAgICAgICAgICAg
IEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAgICAgICAgIH0KLSAgICAgICAgSlNTdHJpbmco
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQotICAg
ICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNz
UmVmUHRyPFJvcGVJbXBsPiByb3BlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3Ro
KHJvcGUtPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoMSkKICAgICAgICAg
ewpAQCAtMjE3LDggKzIxOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAg
IC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5h
dGluZyBzMSAmIHMyLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRo
IGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKLSAg
ICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCisgICAgICAgICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkK
ICAgICAgICAgICAgICwgbV9sZW5ndGgoczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpKQogICAg
ICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJDb3VudCkKICAgICAgICAgewpAQCAtMjMwLDgg
KzIzMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29u
c3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMy
LgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQg
PD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25l
ZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUyKQotICAgICAgICAg
ICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBm
aWJlckNvdW50LCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUyKQorICAgICAgICAgICAg
OiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgICAgICAgICAsIG1fbGVuZ3RoKHMxLT5sZW5ndGgoKSArIHUyLmxlbmd0aCgpKQogICAgICAg
ICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJDb3VudCkKICAgICAgICAgewpAQCAtMjQzLDggKzI0
NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3Ry
dWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgog
ICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0g
My4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBm
aWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQotICAgICAgICAgICAg
OiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkK
KyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJl
ckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQorICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAg
ICAgICAgICAsIG1fbGVuZ3RoKHUxLmxlbmd0aCgpICsgczItPmxlbmd0aCgpKQogICAgICAgICAg
ICAgLCBtX2ZpYmVyQ291bnQoZmliZXJDb3VudCkKICAgICAgICAgewpAQCAtMjcxLDggKzI3Myw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1
Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHUxICYgdTIuCi0g
ICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYg
dTEsIGNvbnN0IFVTdHJpbmcmIHUyKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEs
IGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYg
dTIpCisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodTEubGVuZ3RoKCkgKyB1Mi5s
ZW5ndGgoKSkKICAgICAgICAgICAgICwgbV9maWJlckNvdW50KDIpCiAgICAgICAgIHsKQEAgLTI4
Myw4ICsyODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRo
aXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB1
MSwgdTIgJiB1My4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBj
b25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQot
ICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBj
b25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQor
ICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHUxLmxlbmd0aCgpICsgdTIubGVuZ3Ro
KCkgKyB1My5sZW5ndGgoKSkKICAgICAgICAgICAgICwgbV9maWJlckNvdW50KHNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoKQogICAgICAgICB7CkBAIC0yOTUsNiArMjk3LDQ4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgQVNTRVJUKGluZGV4IDw9IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3Ro
KTsKICAgICAgICAgfQogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSBoYXNPdGhlck93bmVyVHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3Ry
aW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3Ro
ZXJPd25lclR5cGUpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwg
SGFzT3RoZXJPd25lclR5cGUgaGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUsIGhhc090aGVyT3duZXJUeXBlKTsKKyAgICAgICAg
fQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFBhc3NSZWZQdHI8Um9wZUltcGw+IHJvcGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgcm9wZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5n
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBK
U1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmli
ZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhl
YXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgdTIpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgdW5zaWduZWQgZmliZXJDb3VudCwgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5n
PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwg
czIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSlNWYWx1ZSB2MykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPigqZXhlYy0+aGVh
cCgpKSkgSlNTdHJpbmcoZXhlYywgdjEsIHYyLCB2Myk7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3Ry
aW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmco
Z2xvYmFsRGF0YSwgdTEsIHUyKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25z
dCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1Myk7CisgICAgICAgIH0KKwogICAgICAgICB+SlNT
dHJpbmcoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQodnB0cigpID09IEpTR2xvYmFs
RGF0YTo6anNTdHJpbmdWUHRyKTsKQEAgLTQ0Miw3ICs0ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB7CiAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEs
IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZygmYywgMSkpKTsK
KyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmlu
ZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC00NTIsNyArNDk2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNoYXJhY3RlcnMoKVtvZmZzZXRdOwogICAgICAgICBp
ZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBj
KTsKLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBuZXcgKGdsb2JhbERhdGEp
IEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgp
LCBvZmZzZXQsIDEpKSkpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpT
U3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMu
aW1wbCgpLCBvZmZzZXQsIDEpKSkpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNO
b250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykK
QEAgLTQ2MCwxMyArNTA0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBU1NFUlQocyk7
CiAgICAgICAgIEFTU0VSVChzWzBdKTsKICAgICAgICAgQVNTRVJUKHNbMV0pOwotICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xv
YmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3Ry
aW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJp
bmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVT
dHJpbmcmIHMpCiAgICAgewogICAgICAgICBBU1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgICAg
ICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmco
Z2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpT
U3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNT
dHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCkBA
IC00ODgsNyArNTMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoYyA8PSBt
YXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBuZXcgKGdsb2Jh
bERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHMpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0
cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3Ry
aW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKQEAgLTUxNiw3ICs1NjAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJh
Y3RlclN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNl
dCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CisgICAgICAgIHJldHVybiBm
aXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgVVN0cmlu
ZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5n
OjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc093bmVk
U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcykKQEAgLTUy
OSw3ICs1NzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0
YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKKyAg
ICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9i
YWxEYXRhLCBzLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcikpOwogICAgIH0KIAogICAgIGlubGlu
ZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGpzRW1w
dHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEV4ZWMKIAogICAgIEFT
U0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5v
dEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05v
dEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7
CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b1RoaXNPYmplY3RTbG93Q2FzZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CkBAIC05MCw3ICs5MCw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVz
aXplT2JqZWN0KEV4ZWMKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05v
dEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVz
aXplUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTEwMyw3ICsxMDMsNyBAQCBK
U09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAKICAgICBBU1NFUlQoaXNV
bmRlZmluZWRPck51bGwoKSk7CiAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RBbk9iamVj
dEVycm9yKGV4ZWMsICp0aGlzKSk7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVj
dChleGVjKTsKKyAgICByZXR1cm4gSlNOb3RBbk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwogfQogCiAj
aWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xv
b2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMCBAQCB2b2lkIHNldFVwU3Rh
dGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKS5h
c0NlbGwoKSk7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3Io
KSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVu
Y3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1
bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwg
cHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5m
dW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9yKCkpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0g
ICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxP
YmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9u
TGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOworICAgICAgICAgICAg
ZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9w
ZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigpKTsKIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJl
Y3RGdW5jdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGVu
dHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAgICBsb2NhdGlvbiA9IHRoaXNPYmotPmdldERpcmVj
dExvY2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw5ICsyNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNYXRo
T2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgog
ICAgICAgICBNYXRoT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBNYXRoT2JqZWN0KiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PE1hdGhPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBNYXRoT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3QKIHsKICAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOwogCi0gICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHBy
b3RvdHlwZSA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlLCB0aGlzKTsKKyAgICBOYXRp
dmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gTmF0aXZlRXJyb3JQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2Us
IHRoaXMpOwogCiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsgLy8gRUNNQSAxNS4xMS43LjUKICAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZTsKIAogICAgIGNsYXNzIE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAg
ICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcm
KTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3Qg
VVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkg
TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJv
dG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3I7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZSA6IHB1Ymxp
YyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgTmF0aXZl
RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBj
b25zdCBVU3RyaW5nJiwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOworICAgIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
IGNvbnN0cnVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBOYXRpdmVFcnJvclBy
b3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2UsIGNv
bnN0cnVjdG9yKTsKKyAgICAgICAgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBA
QCBzdGF0aWMgSlNWYWx1ZSBudW1iZXJDb25zdHJ1Y3Rvck1pblZhbHVlCiAvLyBFQ01BIDE1Ljcu
MQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51bWJl
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9iamVj
dCA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0
cnVjdHVyZSgpKTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBkb3VibGUg
biA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4
ZWMpIDogMDsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBqc051bWJlcihuKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3QpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZTsKIAogICAgIGNsYXNzIE51bWJl
ckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAg
ICAgICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBOdW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgTnVtYmVyQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOdW1iZXJQcm90
b3R5cGUqIG51bVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPE51bWJlckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgTnVtYmVyQ29u
c3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG51bVByb3RvdHlwZSk7Cisg
ICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBKU1ZhbHVlIE51bWJlck9iamVjdDo6Z2V0SlNOdW1iZXIoKQogCiBO
dW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQogewotICAgIE51bWJlck9iamVjdCog
b2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9i
YWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBOdW1iZXJPYmplY3QqIG9i
amVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2Jq
ZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZh
bHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbnVtYmVyKTsKICAgICByZXR1cm4gb2JqZWN0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIE51bWJlck9iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgeworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgTnVtYmVyT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSopOworCiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBOdW1iZXJPYmplY3QoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBOdW1iZXJPYmplY3QqIGNyZWF0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyT2JqZWN0Pihn
bG9iYWxEYXRhLmhlYXApKSBOdW1iZXJPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTQgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgTnVtYmVyUHJvdG90eXBlIDogcHVibGljIE51bWJlck9iamVjdCB7
Ci0gICAgcHVibGljOgogICAgICAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE51
bWJlclByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOdW1iZXJQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkp
KSBOdW1iZXJQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAog
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBP
YmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBPYmplY3RDb25zdHJ1Y3RvciA6IHB1YmxpYyBJ
bnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CiAgICAgICAgIE9iamVjdENvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgT2JqZWN0UHJvdG90eXBl
Kik7CisgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0Q29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm90b3R5cGUqIG9ialByb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iamVjdENvbnN0cnVj
dG9yPigqZXhlYy0+aGVhcCgpKSkgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIG9ialByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTQgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewotICAgIHB1YmxpYzoKICAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBPYmplY3RQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqZWN0UHJvdG90eXBlPigqZXhl
Yy0+aGVhcCgpKSkgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0
ICs0OSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBK
U1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIGZpYmVyQ291
bnQsIHMxLCBzMik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVy
KGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1l
bW9yeSgpKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7
CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFw
cGVuZChzMik7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6
Y3JlYXRlKCpnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVT
dHJpbmcmIHUxLCBKU1N0cmluZyogczIpCkBAIC03NCwxNCArNzQsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxS
b3BlTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmco
Z2xvYmFsRGF0YSwgZmliZXJDb3VudCwgdTEsIHMyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0
cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOwogCiAgICAgICAg
IEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAgICAg
aWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRlci5h
cHBlbmQodTEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczIpOwotICAgICAgICByZXR1
cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxl
YXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9w
ZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUy
KQpAQCAtOTksMTQgKzk5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlmIChmaWJl
ckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQs
IHMxLCB1Mik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0
YSwgZmliZXJDb3VudCwgczEsIHUyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIg
cm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVpbGRl
ci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAgICAgICAgcm9w
ZUJ1aWxkZXIuYXBwZW5kKHUyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAg
ICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQpAQCAtMTIxLDcgKzEyMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+
Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgdTEsIHUyKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYg
dTIsIGNvbnN0IFVTdHJpbmcmIHUzKQpAQCAtMTQyLDcgKzE0Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAg
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
ICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIs
IHUzKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHUxLCB1
MiwgdTMpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVj
U3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTE2MCw3
ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBpZiAoZmliZXJDb3VudCA9PSAz
KQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZXhlYywgc3Ry
aW5nc1swXS5qc1ZhbHVlKCksIHN0cmluZ3NbMV0uanNWYWx1ZSgpLCBzdHJpbmdzWzJdLmpzVmFs
dWUoKSk7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLCBzdHJpbmdz
WzBdLmpzVmFsdWUoKSwgc3RyaW5nc1sxXS5qc1ZhbHVlKCksIHN0cmluZ3NbMl0uanNWYWx1ZSgp
KTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3Vu
dCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVpbGRlci5pc091dE9mTWVtb3J5KCkpKQpA
QCAtMTg1LDcgKzE4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAob3ZlcmZsb3cp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0gICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVCdWls
ZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQpAQCAt
MjMyLDcgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRh
KSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOworICAgICAgICBy
ZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgp
KTsKICAgICB9CiAKICAgICAvLyBFQ01BIDExLjkuMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDgg
QEAgc3RydWN0IFJlZ0V4cFJlcHJlc2VudGF0aW9uIHsKICAgICBPd25QdHI8WWFycjo6Qnl0ZWNv
ZGVQYXR0ZXJuPiBtX3JlZ0V4cEJ5dGVjb2RlOwogfTsKIAotUmVnRXhwOjpSZWdFeHAoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBG
bGFncyBmbGFncykKLSAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cmVnRXhw
U3RydWN0dXJlLmdldCgpKQorUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKKyAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkKICAg
ICAsIG1fc3RhdGUoTm90Q29tcGlsZWQpCiAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVyblN0
cmluZykKICAgICAsIG1fZmxhZ3MoZmxhZ3MpCkBAIC05OSw5ICs5OSwxNCBAQCBSZWdFeHA6On5S
ZWdFeHAoKQogewogfQogCi1SZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3Mp
CitSZWdFeHAqIFJlZ0V4cDo6YWxsb2NhdGVBbmRJbml0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCiB7Ci0g
ICAgcmV0dXJuIGdsb2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRl
cm5TdHJpbmcsIGZsYWdzKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwPihn
bG9iYWxEYXRhLmhlYXApKSBSZWdFeHAoZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3Mp
OworfQorCitSZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCit7CisgICAg
cmV0dXJuIGdsb2JhbERhdGEucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVyblN0
cmluZywgZmxhZ3MpOwogfQogCiB2b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIFJlZ0V4cCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFJlZ0V4cCogY3JlYXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIFJl
Z0V4cEZsYWdzKTsKKyAgICAgICAgc3RhdGljIFJlZ0V4cCogY3JlYXRlKEpTR2xvYmFsRGF0YSYs
IGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKICAgICAgICAgflJlZ0V4cCgp
OwogCiAgICAgICAgIGJvb2wgZ2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIEZsYWdH
bG9iYWw7IH0KQEAgLTc1LDcgKzc1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwotICAgICAgICBSZWdFeHAoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFn
cyk7CisgICAgICAgIFJlZ0V4cChKU0dsb2JhbERhdGEmLCBjb25zdCBVU3RyaW5nJiwgUmVnRXhw
RmxhZ3MpOworCisgICAgICAgIC8vIE5vcm1hbGx5IHRoaXMgbWV0aG9kIHdvdWxkIGJlIGNhbGxl
ZCBjcmVhdGUsIGJ1dCB3ZSBoYXZlIHRvIGF2b2lkIGEgcG90ZW50aWFsIGNvbmZsaWN0IHdpdGgg
dGhlIAorICAgICAgICAvLyBub3JtYWwgcHVibGljIGNyZWF0ZSBtZXRob2QgdGhhdCBoYW5kbGVz
IGNhY2hpbmcgYXMgd2VsbC4KKyAgICAgICAgc3RhdGljIFJlZ0V4cCogYWxsb2NhdGVBbmRJbml0
KEpTR2xvYmFsRGF0YSYsIGNvbnN0IFVTdHJpbmcmLCBSZWdFeHBGbGFncyk7CiAKICAgICAgICAg
ZW51bSBSZWdFeHBTdGF0ZSB7CiAgICAgICAgICAgICBQYXJzZUVycm9yLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdFeHBDYWNoZTo6bG9va3Vw
T3JDcmVhdGUoY29ucwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3dl
YWtDYWNoZS5maW5kKGtleSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3dlYWtDYWNoZS5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLmdldCgpOwotICAgIFJlZ0V4cCogcmVnRXhw
ID0gbmV3IChtX2dsb2JhbERhdGEpIFJlZ0V4cChtX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcs
IGZsYWdzKTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6YWxsb2NhdGVBbmRJbml0KCpt
X2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKICNpZiBFTkFCTEUoUkVHRVhQX1RS
QUNJTkcpCiAgICAgbV9nbG9iYWxEYXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4cCk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyAr
MTUzLDcgQEAgdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbGxBcnJheUluc3RhbgogCiBKU09i
amVjdCogUmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBNYXRjaGVzQXJyYXkoZXhlYywg
ZC5nZXQoKSk7CisgICAgcmV0dXJuIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlKGV4ZWMsIGQu
Z2V0KCkpOwogfQogCiBKU1ZhbHVlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNrcmVmKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSkgY29uc3QKQEAgLTMwNCw3ICszMDQsNyBAQCBKU09iamVj
dCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIElmIGNhbGxlZCBh
cyBhIGZ1bmN0aW9uLCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgKHNlZSAx
NS4xMC4zLjEpLgogICAgICAgICBpZiAoY2FsbEFzQ29uc3RydWN0b3IpIHsKICAgICAgICAgICAg
IFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNPYmplY3QoYXJn
MCkpLT5yZWdFeHAoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVj
dChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7
CisgICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CkBAIC0zMjIsMTAgKzMyMiwx
MCBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxp
ZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwogICAgIH0KIAotICAg
IFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0
dGVybiwgZmxhZ3MpOworICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQo
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4
cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdsb2JhbE9iamVjdC0+cmVnRXhw
U3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1
Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
aAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1NiwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgUmVnRXhwQ29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgogICAgICAgICBSZWdFeHBDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cFByb3RvdHlw
ZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVnRXhwQ29uc3RydWN0b3IqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cENvbnN0cnVj
dG9yPigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDEzIEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5IHsK
LSAgICBwdWJsaWM6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUqLCBSZWdF
eHBDb25zdHJ1Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJl
Z0V4cE1hdGNoZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwQ29uc3RydWN0
b3JQcml2YXRlKiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJlZ0V4
cE1hdGNoZXNBcnJheShleGVjLCBjdG9yUHJpdmF0ZSk7CisgICAgICAgIH0KICAgICAgICAgdmly
dHVhbCB+UmVnRXhwTWF0Y2hlc0FycmF5KCk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDEwICsyNywyMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAg
Y2xhc3MgUmVnRXhwT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7Cisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBSZWdFeHAqKTsKKwogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0PigqZXhlYy0+aGVh
cCgpKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkp
IFJlZ0V4cE9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFz
ZTsKIAotICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9p
ZCBzZXRSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgZC0+cmVn
RXhwLnNldChnbG9iYWxEYXRhLCB0aGlzLCByKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJy
b3IoZXhlYywgIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIp
KTsKICAgICAgICAgfQotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIH0KIAogICAgIGlm
ICghcmVnRXhwLT5pc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsOSArMjcsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwUHJvdG90
eXBlIDogcHVibGljIFJlZ0V4cE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoK
ICAgICAgICAgUmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgUmVnRXhwKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBQ
cm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cFByb3RvdHlwZT4oKmV4
ZWMtPmhlYXAoKSkpIFJlZ0V4cFByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5oCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTbG90
VmlzaXRvcjsKICAgICAKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZSA6IHB1YmxpYyBKU0NlbGwg
ewotICAgIHB1YmxpYzoKICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFpbk5vZGUqIG5l
eHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCiAgICAgICAgICAgICA6
IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c2NvcGVDaGFpbk5vZGVTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKQEAgLTQ3LDYgKzQ2
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7
CiAgICAgICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2Rl
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogbmV4dCwgSlNPYmplY3Qq
IG9iamVjdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFNjb3BlQ2hhaW5Ob2RlPigqZXhlYy0+aGVhcCgpKSkgU2Nv
cGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGdsb2Jh
bFRoaXMpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogY3JlYXRl
KFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxU
aGlzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2Nv
cGVDaGFpbk5vZGU+KGdsb2JhbERhdGEtPmhlYXApKSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmpl
Y3QsIGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKICAgICAgICAgV3JpdGVC
YXJyaWVyPFNjb3BlQ2hhaW5Ob2RlPiBuZXh0OwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+IG9iamVjdDsKQEAgLTc2LDcgKzg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5l
IFNjb3BlQ2hhaW5Ob2RlKiBTY29wZUNoYWluTm9kZTo6cHVzaChKU09iamVjdCogbykKICAgICB7
CiAgICAgICAgIEFTU0VSVChvKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgU2Nv
cGVDaGFpbk5vZGUodGhpcywgbywgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9i
YWxUaGlzLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUodGhp
cywgbywgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9iYWxUaGlzLmdldCgpKTsK
ICAgICB9CiAKICAgICBpbmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwb3Ao
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25l
ZCBTbWFsbFN0cmluZ3M6OmNvdW50KCkgY29uc3QKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVF
bXB0eVN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2Vt
cHR5U3RyaW5nKTsKLSAgICBtX2VtcHR5U3RyaW5nID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCAiIiwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOworICAgIG1fZW1wdHlT
dHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCAiIiwgSlNTdHJpbmc6Okhhc090
aGVyT3duZXIpOwogfQogCiB2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXIp
CkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJh
Y3RlcgogICAgIGlmICghbV9zdG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2UgPSBhZG9wdFB0cihu
ZXcgU21hbGxTdHJpbmdzU3RvcmFnZSk7CiAgICAgQVNTRVJUKCFtX3NpbmdsZUNoYXJhY3RlclN0
cmluZ3NbY2hhcmFjdGVyXSk7Ci0gICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rl
cl0gPSBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4obV9zdG9yYWdlLT5yZXAoY2hhcmFjdGVyKSksIEpTU3RyaW5nOjpIYXNPdGhlck93
bmVyKTsKKyAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IEpTU3RyaW5n
OjpjcmVhdGUoKmdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdlLT5y
ZXAoY2hhcmFjdGVyKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKTsKIH0KIAogU3RyaW5nSW1w
bCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBj
aGFyYWN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODcsOCArODcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIGlmICghZXhlYy0+YXJndW1lbnRD
b3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ldyAoZXhlYykgU3RyaW5n
T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIGds
b2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2Jq
ZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6
Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEzIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIFN0cmluZ1Byb3RvdHlwZTsKIAogICAgIGNsYXNzIFN0cmluZ0NvbnN0
cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKICAgICAgICAg
U3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBTdHJpbmdQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgU3RyaW5nQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nUHJvdG90eXBl
KiBzdHJQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxTdHJpbmdDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ0NvbnN0cnVj
dG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBzdHJQcm90b3R5cGUpOworICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiA5
MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxMSArMjcsMjEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgU3RyaW5nT2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7Ci0gICAgcHVibGlj
OgorICAgIHByb3RlY3RlZDoKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopOwogICAgICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgY29u
c3QgVVN0cmluZyYpOwotCisgICAgICAgICAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBz
dGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1
cmUpOyAgCisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIHN0cikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09i
amVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUsIHN0cik7
ICAKKyAgICAgICAgfQogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyopOworICAgICAgICAKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgc3Rh
dGljIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KGV4ZWMsCisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0
VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3RU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLAogICAgICAgICAgICAgICAgIGNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
c3RyaW5nUHJvdG90eXBlKCkpLCBzdHJpbmcpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsNyArNjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgSWYgcmVnZXhwIGlzIG5vdCBh
biBvYmplY3Qgd2hvc2UgW1tDbGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBpcwogICAg
ICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBS
ZWdFeHAocmVnZXhwKS4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRl
KCZleGVjLT5nbG9iYWxEYXRhKCksIGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAg
ICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhl
eGVjKSwgTm9GbGFncyk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25z
dHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3Io
KTsKICAgICBpbnQgcG9zOwpAQCAtNjY0LDcgKzY2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2Jq
ZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAg
ICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhw
KHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJl
ZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyks
IE5vRmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0
b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAg
ICAgaW50IHBvczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBj
bGFzcyBTdHJpbmdQcm90b3R5cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKLSAgICBwdWJsaWM6
CiAgICAgICAgIFN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBl
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPFN0cmluZ1Byb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ1Byb3Rv
dHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEu
c3RydWN0dXJlU3RydWN0dXJlKTsKICAgICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIHR5cGVJbmZvLCBhbm9ueW1vdXNTbG90Q291bnQsIGNsYXNzSW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhl
YXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3Vz
U2xvdENvdW50LCBjbGFzc0luZm8pOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQg
ZHVtcFN0YXRpc3RpY3MoKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVj
dHVyZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3Ry
dWN0dXJlKGdsb2JhbERhdGEpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwpAQCAtMTcwLDcgKzE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGds
b2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZn
bG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0
cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB0eXBlZGVmIGVudW0geyAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCiAg
ICAgcHVibGljOgotICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkgeyByZXR1cm4gbmV3ICgmZ2xvYmFs
RGF0YSkgU3RydWN0dXJlQ2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVDaGFp
blN0cnVjdHVyZS5nZXQoKSwgaGVhZCk7IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWlu
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZUNoYWluPihnbG9iYWxEYXRhLmhlYXApKSBT
dHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3RydWN0
dXJlLmdldCgpLCBoZWFkKTsgfQogICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaGVh
ZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdldCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisy
MDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2CisgICAg
ICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3Rh
dGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJlZmFj
dG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3
IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJlcGxh
Y2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9yIGVh
Y2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVjdC4g
IFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMgb2YK
KyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNoZXMg
d2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ugd2l0
aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAgICAg
ICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZyb20g
SlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBwbGUu
Y29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6anNEYXRlT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om9i
amVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5j
dGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcnVudGltZS5jcHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRU
b1ZhbHVlKToKKwogMjAxMS0wNy0xNCAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29tPgog
CiAgICAgICAgIENoYXJhY3RlciByZWZlcmVuY2UgcGFyc2VyIGZvciBuZXcgWE1MIHBhcnNlcgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCBKU1ZhbHVlIGpzRGF0ZU9yTnVs
bChFeGVjU3RhdGUqIGV4ZWMsIGRvCiB7CiAgICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2Uo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVl
KTsKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKIH0KIAogZG91YmxlIHZhbHVl
VG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTMwNyw3ICszMDcsNyBA
QCBGcmFtZSogdG9EeW5hbWljRnJhbWUoRXhlY1N0YXRlKiBleGVjKQogCiBKU1ZhbHVlIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5j
dGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQ
cm90b0Z1bmNUb1N0cmluZyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0
cmluZyk7CiB9CiAKIFN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RPTVdp
bmRvdzo6dmlzaXRDaGlsZHJlbihTbG90VmlzaQogdGVtcGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0
aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+CiBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5j
dGlvblN0cnVjdHVyZSgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOwor
ICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCks
IGxlbmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlIGNoaWxkRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTcgKzQwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFs
dWUgbm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3
IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0
eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CisgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1l
LCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkJhY2spOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBu
b25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5
TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKTsKKyAgICByZXR1cm4gSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uRm9yd2FyZCk7CiB9CiAKIHN0YXRpYyBKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5
TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Hbyk7CisgICAgcmV0dXJuIEpTRnVuY3Rp
b246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBq
c0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKIH0KIAogYm9vbCBKU0hpc3Rvcnk6OmdldE93
blByb3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICBy
ZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAx
LCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOworICAg
IHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEs
IHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAK
IHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsK
LSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7
CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgMCwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOwog
fQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3Np
Z24pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWdu
KTsKIH0KIAogYm9vbCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwODYsNyArMTA4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkb3VibGUgZDsKICAgICAg
ICAgICAgIGlmICghcmVhZChkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwot
ICAgICAgICAgICAgcmV0dXJuIG5ldyAobV9leGVjKSBEYXRlSW5zdGFuY2UobV9leGVjLCBtX2ds
b2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBEYXRl
SW5zdGFuY2U6OmNyZWF0ZShtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCks
IGQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsZVRhZzogewogICAgICAgICAgICAgUmVm
UHRyPEZpbGU+IGZpbGU7CkBAIC0xMTY2LDggKzExNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAgICBSZWdFeHBGbGFncyByZUZsYWdz
ID0gcmVnRXhwRmxhZ3MoZmxhZ3MtPnVzdHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVG
bGFncyAhPSBJbnZhbGlkRmxhZ3MpOwotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdF
eHA6OmNyZWF0ZSgmbV9leGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVG
bGFncyk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIFJlZ0V4cE9iamVjdChtX2V4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVy
ZSgpLCByZWdFeHApOyAKKyAgICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVh
dGUobV9leGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7Cisg
ICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCBy
ZWdFeHApOyAKICAgICAgICAgfQogICAgICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzogewog
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Myw5ICs4NzMsOSBA
QCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgICAgICBV
U3RyaW5nIHBhdHRlcm4oKFVDaGFyKilyZS5wYXR0ZXJuKCkudXRmMTYoKSwgcmUucGF0dGVybigp
Lmxlbmd0aCgpKTsKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gKHJlLmNhc2VTZW5z
aXRpdml0eSgpID09IFF0OjpDYXNlSW5zZW5zaXRpdmUpID8gRmxhZ0lnbm9yZUNhc2UgOiBOb0Zs
YWdzOwogCi0gICAgICAgICAgICBKU0M6OlJlZ0V4cCogcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNy
ZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgICAgICBK
U0M6OlJlZ0V4cCogcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0
cnVjdHVyZSgpLCByZWdFeHApOworICAgICAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC05MDgsNyArOTA4LDcgQEAgSlNW
YWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICBkdC5pc0RTVCA9
IC0xOwogICAgICAgICBkb3VibGUgbXMgPSBncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZHQs
IHRpbWUubXNlYygpLCAvKmlucHV0SXNVVEMqLyBmYWxzZSk7CiAKLSAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
ZGF0ZVN0cnVjdHVyZSgpLCB0cnVuYyhtcykpOworICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNl
OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJl
KCksIHRydW5jKG1zKSk7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRQnl0
ZUFycmF5KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100914</attachid>
            <date>2011-07-14 19:10:21 -0700</date>
            <delta_ts>2011-07-15 12:37:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110714191020.patch</filename>
            <type>text/plain</type>
            <size>163975</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE1IEBA
CisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAg
IChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChK
U0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAg
ICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VDaGFy
YWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RS
ZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6CisgICAgICAgICogcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVt
cHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc3BlY3VsYXRpdmUgSklUIGNvbnRhaW5zIGEg
RklYTUUgZm9yIHJld2luZGluZyBzcGVjdWxhdGl2ZSBjb2RlIGdlbmVyYXRpb24gdGhhdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBO
U185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgogX19aTjNKU0MxNFNh
bXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoKQEAg
LTI2Myw4ICsyNjIsOCBAQCBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9y
CiBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQzZK
U0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRlRQotX19a
TjNKU0M2UmVnRXhwNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18x
MVJlZ0V4cEZsYWdzRQogX19aTjNKU0M2UmVnRXhwRDFFdgorX19aTjNKU0M2UmVnRXhwNmNyZWF0
ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQogX19a
TjNKU0M3SlNBcnJheTEzdmlzaXRDaGlsZHJlbkVSTlNfMTFTbG90VmlzaXRvckUKIF9fWk4zSlND
N0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0M3SlNBcnJheTE4Z2V0T3duUHJv
cGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0MywxNCBAQCBsb25nIFN0b3BXYXRj
aDo6Z2V0RWxhcHNlZE1TKCkKIH0KIAogY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xv
YmFsT2JqZWN0IHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgR2xvYmFsT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRzKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxHbG9iYWxP
YmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGFyZ3VtZW50cyk7CisgICAgfQogICAgIHZpcnR1YWwgVVN0cmluZyBjbGFzc05hbWUoKSBj
b25zdCB7IHJldHVybiAiZ2xvYmFsIjsgfQogfTsKIENPTVBJTEVfQVNTRVJUKCFJc0ludGVnZXI8
R2xvYmFsT2JqZWN0Pjo6dmFsdWUsIFdURl9Jc0ludGVnZXJfR2xvYmFsT2JqZWN0X2ZhbHNlKTsK
QEAgLTE1MywyMiArMTU5LDIyIEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoR2xvYmFsT2Jq
ZWN0KTsKIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRz
KQogICAgIDogSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogewotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
cXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5j
dGlvbkdDKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9u
OjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVj
KCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygp
LCAicHJpbnQiKSwgZnVuY3Rpb25QcmludCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJxdWl0IiksIGZ1bmN0aW9u
UXVpdCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpT
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9u
UmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkiKSwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSkpOwogI2VuZGlmCi0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5j
dGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAidmVyc2lvbiIpLCBmdW5jdGlvblZlcnNpb24pKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImNoZWNrU3lu
dGF4IiksIGZ1bmN0aW9uQ2hlY2tTeW50YXgpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9i
YWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhp
cywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWFk
bGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwgZnVuY3Rp
b25WZXJzaW9uKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJ
ZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJ1biIpLCBmdW5jdGlvblJ1bikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5j
dGlvbkNoZWNrU3ludGF4KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlYWRsaW5lIiksIGZ1bmN0aW9uUmVhZGxp
bmUpKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncykpOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImNsZWFyU2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvbkNsZWFyU2FtcGxp
bmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2Ft
cGxpbmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
SWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25D
bGVhclNhbXBsaW5nRmxhZ3MpKTsKICNlbmRpZgogCiAgICAgSlNPYmplY3QqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCkpOwpAQCAtMjI3LDcgKzIzMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBpZiAoIWZpbGxCdWZmZXJX
aXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiQ291bGQgbm90
IG9wZW4gZmlsZS4iKSkpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcg
KCZleGVjLT5nbG9iYWxEYXRhKCkpIEdsb2JhbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIEds
b2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
LCBWZWN0b3I8VVN0cmluZz4oKSk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBH
bG9iYWxPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIEdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBWZWN0b3I8VVN0cmlu
Zz4oKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5zdGFydCgp
OwpAQCAtNTUyLDcgKzU1OCw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndiwg
SlNHbG8KICAgICBPcHRpb25zIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJn
diwgb3B0aW9ucywgZ2xvYmFsRGF0YSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpLCBvcHRpb25zLmFyZ3Vt
ZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERh
dGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJvb2wgc3VjY2VzcyA9IHJ1
bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5zY3JpcHRzLCBvcHRpb25zLmR1bXAp
OwogICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCiAgICAgICAgIHJ1bklu
dGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxi
YWNrQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLXB1Ymxp
YzoKK3Byb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2spOworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tDb25z
dHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAg
ICB9CisgICAgCiAgICAgdmlydHVhbCB+SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlND
bGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVj
dENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxiYWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNh
bGxiYWNrLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBK
U0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVu
Y3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgbmFtZSk7CisgICAgfQorCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgCiAgICAgLy8gSW50ZXJuYWxGdW5j
dGlvbiBtaXNoLW1hc2hlcyBjb25zdHJ1Y3RvciBhbmQgZnVuY3Rpb24gYmVoYXZpb3IgLS0gd2Ug
c2hvdWxkIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsMjMgQEAgc3RydWN0
IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgIAogdGVtcGxhdGUgPGNsYXNz
IEJhc2U+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IDogcHVibGljIEJhc2UgewotcHVibGljOgor
cHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOworICAgIC8vIFdl
J2QgbGlrZSB0byB1c2UgdGhlIHBsYWNlbWVudCB2ZXJzaW9uIG9mIG9wZXJhdG9yIG5ldyBkZWZp
bmVkIGluIEpTQ2VsbCwgYnV0IAorICAgIC8vIHdlIGNhbid0IGJlY2F1c2UgQmFzZSBpcyBhIHRl
bXBsYXRlIGFyZ3VtZW50LCBzbyB3ZSBqdXN0IGR1cGxpY2F0ZSB0aGUgc2FtZSAKKyAgICAvLyBm
dW5jdGlvbmFsaXR5IGhlcmUuCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCog
cHRyKSB7IHJldHVybiBwdHI7IH0KKworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrT2Jq
ZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0aWMgSlNDYWxsYmFja09i
amVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBjbGFzc1Jl
ZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNDYWxsYmFja09i
amVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICB2b2lk
IHNldFByaXZhdGUodm9pZCogZGF0YSk7CiAgICAgdm9pZCogZ2V0UHJpdmF0ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAs
NyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1CiAgICAgICAgICAg
ICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChw
cm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24p
IHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBv
ID0gbmV3IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgYXNHbG9iYWxPYmplY3QodGhp
c09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlvbiwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgw
KSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0
aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG8sIGVu
dHJ5LT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBKU09iamVjdCogT3BhcXVl
SlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAKICAgICBpZiAoIWpzQ2xhc3NEYXRhLmNhY2hlZFBy
b3RvdHlwZSkgewogICAgICAgICAvLyBSZWN1cnNpdmUsIGJ1dCBzaG91bGQgYmUgZ29vZCBlbm91
Z2ggZm9yIG91ciBwdXJwb3NlcwotICAgICAgICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHBy
b3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRo
ZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9u
IGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJvdG90eXBlQ2xh
c3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdz
IHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rp
b24KICAgICAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgICAgICAg
ICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNH
bG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogICAgICAgICByZXR1cm4gSlNH
bG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xv
YmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4oKmdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CiAgICAg
aWYgKCFwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAgICAgaWYgKCFqc0NsYXNzKQogICAgICAg
ICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgSlNDYWxs
YmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMp
IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJh
Y2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CisgICAgSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1
Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBq
c0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKIApAQCAtOTUsNyArOTUsNyBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsCiAKICAgICBJZGVudGlmaWVyIG5hbWVJ
RCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRp
ZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVmKG5ldyAoZXhl
YykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAgIHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1
bmN0aW9uLCBuYW1lSUQpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0
b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0Nv
bnN0cnVjdG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0xMDcsNyArMTA3LDcgQEAg
SlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDbwogICAgIGlmICghanNQcm90
b3R5cGUpCiAgICAgICAgIGpzUHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKTsKIAotICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1
Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7CisgICAgSlNDYWxs
YmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxB
c0NvbnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0
b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzUsNyArMTczNSw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKICAgICBBU1NFUlQoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwog
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoY2FsbEZyYW1l
KSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpT
QWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0
aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CiAgICAgICAgIGdsb2JhbE9iamVjdC0+
cmVtb3ZlRGlyZWN0KCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVudCgpKTsgLy8gTmV3bHkg
ZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVzLgogCi0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbWFrZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwg
c2NvcGVDaGFpbik7CiAgICAgICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihmdW5jdGlvbi0+
aWRlbnQoKSwgZmFsc2UpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgp
LnNldCgqbV9nbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbWFr
ZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9k
eSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGJvZHktPmlkZW50KCksIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2Vz
QXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJv
ZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYm9keS0+aWRlbnQoKSwgYm9keS0+
c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5
LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAog
ewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCks
IG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3MudXN0cmluZygpKSkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0
ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy51c3RyaW5nKCkpKSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlYwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTeW50YXhFcnJvcihj
YWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4i
KTsKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgIH0KLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2Jq
ZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CisgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShSZWdFeHBPYmplY3Q6OmNyZWF0
ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkp
OwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19yZWdleHApOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMzY1LDcgKzMzNjUsNyBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9
IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIp
ID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpID0gSlNWYWx1
ZShhcmd1bWVudHMpOwogICAgICAgICB9CkBAIC00NDk1LDcgKzQ0OTUsNyBAQCBza2lwX2lkX2N1
c3RvbV9zZWxmOgogCiAgICAgICAgIGludCBhY3RpdmF0aW9uUmVnID0gdlBDWzFdLnUub3BlcmFu
ZDsKICAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJlZykuanNWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGdsb2JhbERhdGEp
IEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGFjdGl2YXRpb25SZWcpID0gSlNW
YWx1ZShhY3RpdmF0aW9uKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihj
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgICAgIH0KQEAg
LTQ2MDUsNyArNDYwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwogCiAgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGRzdCkuanNW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZ2xvYmFs
RGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZSk7CiAgICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXJndW1lbnRzKTsKICAg
ICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgIH0KQEAgLTUwNjcsMTMgKzUw
NjcsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMoQwogICAgICAg
ICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gZnVu
Y3Rpb25DYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRz
ID0gSlNWYWx1ZShuZXcgKGNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKSk7
CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZShj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUpKTsKICAgICAgICAgZnVu
Y3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgICAg
ICBmdW5jdGlvbkNhbGxGcmFtZS0+cihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRz
OwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KIAotICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gbmV3IChmdW5jdGlvbkNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0
aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uQ2FsbEZyYW1lKTsKICAgICBhcmd1
bWVudHMtPmNvcHlSZWdpc3RlcnMoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAg
ICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYyLDcgKzIwNjIsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3
IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgcmV0dXJu
IGFjdGl2YXRpb247CiB9CkBAIC0yMTEwLDcgKzIxMTAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0
YWNrRnJhbWUuY2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
YXJndW1lbnRzKSk7CiB9CiAKQEAgLTIxMTgsNyArMjExOCw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5n
bG9iYWxEYXRhKSBBcmd1bWVudHMoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9Q
YXJhbWV0ZXJzKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRl
KCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBBcmd1bWVudHM6
Ok5vUGFyYW1ldGVycyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGFyZ3Vt
ZW50cykpOwogfQogCkBAIC0zMTI4LDcgKzMxMjgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihK
U09iamVjdCosIG9wX25ld19yCiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0K
IAotICAgIHJldHVybiBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAp
OworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRh
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
RXhwKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2JpdG9y
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlz
aW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDE0ICs1OSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBwdWJsaWM6
CisgICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlwZSB7IE5vUGFyYW1ldGVycyB9OworICAgICAg
ICAKKyAgICAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50
cyhjYWxsRnJhbWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgQXJndW1l
bnRzKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgTm9QYXJhbWV0ZXJzVHlwZSBub1BhcmFtcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1l
bnRzKGNhbGxGcmFtZSwgbm9QYXJhbXMpOworICAgICAgICB9CisKICAgICAgICAgLy8gVXNlIGFu
IGVudW0gYmVjYXVzZSBvdGhlcndpc2UgZ2NjIGluc2lzdHMgb24gZG9pbmcgYSBtZW1vcnkKICAg
ICAgICAgLy8gcmVhZC4KICAgICAgICAgZW51bSB7IE1heEFyZ3VtZW50cyA9IDB4MTAwMDAgfTsK
LQotICAgICAgICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQorICAg
IAorICAgIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50cyhDYWxsRnJhbWUqKTsKICAgICAgICAg
QXJndW1lbnRzKENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOworCisgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSwxMSArNzksMTEgQEAgc3RhdGljIGlubGluZSBKU09iamVjdCogY29uc3RydWN0QXJyYXlX
aQogICAgICAgICB1aW50MzJfdCBuID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsKICAgICAg
ICAgaWYgKG4gIT0gYXJncy5hdCgwKS50b051bWJlcihleGVjKSkKICAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5IHNpemUgaXMg
bm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZSgpLCBuLCBDcmVhdGVJbml0aWFsaXplZCk7CisgICAgICAgIHJldHVybiBKU0Fy
cmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKICAgICB9CiAKICAgICAvLyBvdGhlcndpc2Ug
dGhlIGFycmF5IGlzIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBpbiBpdAotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQXJy
YXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQXJy
YXlQcm90b3R5cGU7CiAKICAgICBjbGFzcyBBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBBcnJheUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQXJyYXlQ
cm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQXJyYXlD
b25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFycmF5UHJvdG90eXBlKiBhcnJQcm90b3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcnJh
eUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgYXJyUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGRlbGV0ZURvdWJsZSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogcmVzT2JqID0gbmV3
IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3JlYXRlQ29tcGFjdCk7Cisg
ICAgSlNBcnJheSogcmVzT2JqID0gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3Vu
dCwgQ3JlYXRlQ29tcGFjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFy
cmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhw
bGljaXQgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBw
cml2YXRlOgorICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Qm9vbGVhbkNvbnN0cnVjdG9yKEUKIC8vIEVDTUEgMTUu
Ni4yCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29s
ZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAg
Qm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCkt
PmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7
CiAgICAgcmV0dXJuIG9iajsKIH0KQEAgLTcxLDcgKzcxLDcgQEAgQ2FsbFR5cGUgQm9vbGVhbkNv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YQogCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVCb29sZWFuVmFsdWUpCiB7Ci0gICAgQm9vbGVhbk9iamVj
dCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmotPnNldEludGVybmFsVmFs
dWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbW1lZGlhdGVCb29sZWFuVmFsdWUpOwogICAgIHJldHVy
biBvYmo7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQm9vbGVhblByb3RvdHlwZTsK
IAogICAgIGNsYXNzIEJvb2xlYW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Qm9vbGVh
bkNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgQm9vbGVhbkNvbnN0cnVjdG9yKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBib29sUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE1
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMg
SlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEJvb2xlYW5P
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBCb29sZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBC
b29sZWFuT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVh
blByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJp
dmF0ZToKICAgICAgICAgQm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQm9vbGVhblBy
b3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQm9v
bGVhblByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRl
SW5zdGFuY2UoZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAg
ICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3Ry
dWN0dXJlKCksIHZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdFdpdGhEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIERhdGVQcm90b3R5cGU7CiAKICAgICBjbGFzcyBEYXRlQ29uc3RydWN0
b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6
CiAgICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0ZVByb3RvdHlw
ZSogZGF0ZVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPERhdGVDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIERhdGVDb25zdHJ1Y3Rv
cihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZGF0ZVByb3RvdHlwZSk7CisgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwyMCBAQCBuYW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgRGF0ZUluc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVj
dCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgRGF0ZUluc3RhbmNlKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGRvdWJsZSk7Ci0gICAgICAgIGV4cGxpY2l0IERhdGVJbnN0
YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLQorICAgICAgICBEYXRlSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGRvdWJsZSBkYXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRGF0ZUluc3RhbmNlKGV4
ZWMsIHN0cnVjdHVyZSwgZGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIERhdGVJbnN0
YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+
KCpleGVjLT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyByZXR1
cm4gaW50ZXJuYWxWYWx1ZSgpLnVuY2hlY2tlZEdldE51bWJlcigpOyB9CiAKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBP
YmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBEYXRlUHJvdG90eXBlIDogcHVibGljIERhdGVJ
bnN0YW5jZSB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIERhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZVByb3RvdHlw
ZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDQzICs0
Miw0MyBAQCBzdGF0aWMgY29uc3QgY2hhciogc291cmNlVVJMUHJvcGVydHlOYW1lCiBKU09iamVj
dCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmlu
ZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1
cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJ
bnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlRXZhbEVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+
ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAg
cmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBt
ZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1l
c3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yYW5nZUVycm9yQ29uc3RydWN0
b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFu
Y2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yYW5n
ZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpT
T2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5
KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVj
dCogY3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3ludGF4RXJyb3JDb25zdHJ1Y3Rvcigp
LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVR5cGVF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdl
KQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAg
IHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVz
c2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3Io
KS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5VUklFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVj
dCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQpA
QCAtMTY2LDEyICsxNjYsMTggQEAgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRl
KiBleAogfQogCiBjbGFzcyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcml2YXRlOgogICAgIFN0cmljdE1vZGVUeXBlRXJy
b3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICA6
IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIp
CiAgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgewogICAgIH0KKworcHVibGljOgor
ICAgIHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIFN0
cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
bWVzc2FnZSk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7CkBA
IC0yMDUsNyArMjExLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJpY3RNb2RlVHlw
ZQogCiBKU1ZhbHVlIGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpY3RNb2Rl
VHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbWVz
c2FnZSk7CisgICAgcmV0dXJuIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsy
OSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZTsKIAogICAg
IGNsYXNzIEVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAg
cHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBFcnJvclByb3RvdHlwZSopOwogCisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVycm9yUHJvdG90eXBlKiBlcnJQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgp
KSkgRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXJyUHJv
dG90eXBlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAg
ICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lv
biA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzMiArMjUsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBFcnJvckluc3RhbmNlOjpzX2luZm8gPSB7ICJFcnJvciIsICZKU05v
bkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAgfTsKIAotRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0
YW5jZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorRXJyb3JJbnN0YW5j
ZTo6RXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCiAg
ICAgLCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZShmYWxzZSkKIHsKICAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgIiIpLCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+bWVz
c2FnZSwganNTdHJpbmcoJmdsb2JhbERhdGEsICIiKSwgRG9udEVudW0pOwogfQogCi1FcnJvcklu
c3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCi0gICAgOiBKU05vbkZpbmFsT2Jq
ZWN0KCpnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVT
dHJpbmcmIG1lc3NhZ2UpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSkKICAgICAsIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlKGZhbHNlKQogewogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyhnbG9iYWxEYXRhLCBtZXNzYWdl
KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3Bl
cnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBtZXNzYWdlKSwgRG9udEVu
dW0pOwogfQogCi1FcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbWVz
c2FnZSkKK0Vycm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdl
KQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEVycm9ySW5zdGFuY2UoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJy
b3JJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIG1lc3NhZ2UpOwogfQogCiBFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNz
YWdlKQogewogICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsK
LSAgICByZXR1cm4gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5j
ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEVycm9ySW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgU3RydWN0dXJlKiwg
Y29uc3QgVVN0cmluZyYpOworICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKICAgICAgICAgc3RhdGlj
IEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIG1l
c3NhZ2UpOwogCiAKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRh
KiwgU3RydWN0dXJlKik7Ci0gICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxE
YXRhKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOworICAgICAgICBleHBsaWNpdCBFcnJv
ckluc3RhbmNlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBleHBsaWNpdCBF
cnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsK
IAogICAgICAgICBib29sIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOwogICAgIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBjb25zdCBDbGFzc0lu
Zm8gRXJyb3JQcm90b3R5cGU6OnNfaW5mbyA9CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEVy
cm9yUHJvdG90eXBlKTsKIAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkK
KyAgICA6IEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCiB7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubmFtZSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJFcnJvciIpLCBE
b250RW51bSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFz
cyBFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEVycm9y
UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9yUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgRXJy
b3JQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMCArNDIsMTYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHJpdmF0
ZToKKyAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuaW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCiBw
dWJsaWM6Ci0gICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi0gICAgICAgIDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+aW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICBzdGF0aWMg
SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
KGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4Y2VwdGlvblR5
cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQpAQCAtNTUsMTQgKzYxLDIwIEBAIHB1
YmxpYzoKIAogSlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgIHJldHVybiBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKmdsb2JhbERhdGEpOwogfQogCiBjbGFzcyBUZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRl
OgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCiBwdWJs
aWM6Ci0gICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT50
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgc3RhdGljIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxE
YXRhKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBlKCkgY29u
c3QgeyByZXR1cm4gVGVybWluYXRlZDsgfQpAQCAtNzIsNyArODQsNyBAQCBwdWJsaWM6CiAKIEpT
T2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIFRlcm1pbmF0ZWRFeGVjdXRpb25F
cnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
OCArOTAsOCBAQCBQcm9ncmFtRXhlY3V0YWJsZTo6flByb2dyYW1FeGVjdXRhYmxlKCkKIAogY29u
c3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRnVuY3Rpb25FeGVj
dXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwogCi1GdW5jdGlvbkV4
ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpblN0
cmljdENvbnRleHQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKLSAgICA6IFNjcmlwdEV4
ZWN1dGFibGUoZ2xvYmFsRGF0YS0+ZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBn
bG9iYWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3Vt
ZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGluU3RyaWN0Q29udGV4
dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZShn
bG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwg
c291cmNlLCBpblN0cmljdENvbnRleHQpCiAgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKDAp
CiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhmb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgLCBt
X3BhcmFtZXRlcnMocGFyYW1ldGVycykKQEAgLTQ4MSw3ICs0ODEsNyBAQCBGdW5jdGlvbkV4ZWN1
dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9
IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOwogICAgIEFTU0VS
VChib2R5KTsKIAotICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJn
dW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJvZHkt
PmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRh
YmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJj
ZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNT
dHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKIH0KIAogVVN0
cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw4ICs1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQgPSAtMTsKLSAg
ICAKLSAgICBwdWJsaWM6CisKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEV4ZWN1dGFibGVCYXNl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1Q
YXJhbWV0ZXJzKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQog
ICAgICAgICAgICAgLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKG51bVBhcmFtZXRlcnMpCkBAIC02
NCw2ICs2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGZpbmFsaXplci5sZWFr
SGFuZGxlKCk7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBFeGVjdXRhYmxlQmFzZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXhlY3V0YWJsZUJhc2U+KGdsb2Jh
bERhdGEuaGVhcCkpIEV4ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbnVtUGFy
YW1ldGVycyk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29u
c3QKICAgICAgICAgewpAQCAtMTY2LDEzICsxNzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFjYWxsVGh1bmspCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUo
Z2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29kZSgpLCBjb25zdHJ1Y3Rvcik7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgZnVuY3Rpb24sIEpJ
VENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBKSVRDb2RlKCksIGZ1
bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVF
eGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBm
dW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgY29uc3RydWN0
b3IpOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlv
biwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5h
dGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFs
RGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTIx
MywxMyArMjE5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0
YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBTY3Jp
cHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKLSAg
ICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSwgTlVNX1BB
UkFNRVRFUlNfTk9UX0NPTVBJTEVEKQorICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKKyAgICAgICAgICAgIDogRXhlY3V0YWJs
ZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQp
CiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mZWF0dXJl
cyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAgICAgICAgewog
I2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdU
b29sKiBzYW1wbGVyID0gZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkKKyAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9iYWxEYXRhLmludGVycHJldGVy
LT5zYW1wbGVyKCkpCiAgICAgICAgICAgICAgICAgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSgqZ2xv
YmFsRGF0YSwgdGhpcyk7CiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERh
dGEpOwpAQCAtMjkwLDcgKzI5NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAqbV9ldmFsQ29kZUJsb2NrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEV2YWxF
eGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIHsgcmV0dXJuIG5ldyAoZXhlYykgRXZhbEV4ZWN1
dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7IH0KKyAgICAgICAgc3RhdGlj
IEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkp
KSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0KTsgCisgICAg
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENv
ZGUoKQpAQCAtMzE5LDcgKzMyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkp
KSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwogICAgICAgICB9CiAKICAgICAgICAg
flByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC0zNzIsMTcgKzM4MSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyog
cGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBGdW5jdGlv
bkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFt
ZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KCpleGVjLT5o
ZWFwKCkpKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNB
cmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RM
aW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNy
ZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9u
UGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0
TGluZSwgaW50IGxhc3RMaW5lKQorICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIGludCBmaXJz
dExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5hbWUsIHNvdXJjZSwg
Zm9yY2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCwgZmlyc3RM
aW5lLCBsYXN0TGluZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RnVu
Y3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xv
YmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlz
SW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKICAgICAgICAgfQogCiAgICAg
ICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5j
dGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAgICAgICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3IgY29uc3RydWN0IGJ5dGVjb2RlLiBU
aGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpAQCAtNDc5LDcgKzQ4OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1
bmN0aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7Cisg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0
aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAKICAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsOCArMTEyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFs
RQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBleGNlcHRpb24pOwogICAgIH0KIAot
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gbmV3IChleGVjKSBTY29wZUNoYWluTm9k
ZSgwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmdsb2Jh
bFRoaXNWYWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uLCBzY29wZUNoYWluKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IFNj
b3BlQ2hhaW5Ob2RlOjpjcmVhdGUoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCAmZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBmdW5jdGlvbiwgc2NvcGVDaGFpbik7CiB9CiAKIC8vIEVDTUEg
MTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogCiAgICAgY2xhc3MgRnVuY3Rpb25Db25zdHJ1Y3Rv
ciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgRnVuY3Rpb25Db25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0
aW9uUHJvdG90eXBlKiBmdW5jUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkp
IEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGZ1bmNQ
cm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIEZ1bmN0
aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGUKIAogdm9pZCBGdW5jdGlvblByb3Rv
dHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlv
bioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0p
OwotICAgICphcHBseUZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBs
eSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbihleGVjLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgICphcHBseUZ1bmN0aW9uID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUs
IDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7
CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBwbHlGdW5j
dGlvbiwgRG9udEVudW0pOwotICAgICpjYWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk7CisgICAgKmNhbGxGdW5jdGlv
biA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0
dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxs
KTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVu
Y3Rpb24sIERvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5j
dGlvblByb3RvdHlwZSA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRp
ZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0
dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlv
bik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBGdW5jdGlvblByb3RvdHlwZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxGdW5jdGlvblByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uUHJvdG90
eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1
bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CisgICAgICAgIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMiArMzYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gZm9yIGEgcHJv
cGVydHkuCiAgICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgcHVibGljOgorCisgICAgcHJpdmF0ZTogICAgICAgIAog
ICAgICAgICBHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBKU0Nl
bGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0dGVyU2V0dGVyU3Ry
dWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIEdldHRlclNldHRlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEdldHRlclNldHRlcj4oKmV4
ZWMtPmhlYXAoKSkpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNPYmpl
Y3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1
ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgICAgICAKKyAgICAgICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVyKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSAKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPigqZXhlYy0+aGVh
cCgpKSkgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOworICAgICAgICB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCkBAIC01Niw3ICs2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5l
IEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBUElWYWx1ZVdyYXBwZXIoZXhl
YywgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVj
LCB2YWx1ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgSlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3Vt
ZW50c0dldHRlcihFeAogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIGludCByZWFsQXJn
dW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVn
aXN0ZXIpOwogCi0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKG5ldyAoY2FsbEZyYW1l
KSBBcmd1bWVudHMoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
KEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUpKTsK
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRz
OwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJn
dW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIAogICAgIGNsYXNzIEpTQWN0
aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBwcml2YXRlOgogICAgICAg
ICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKLSAgICBwdWJsaWM6CiAgICAgICAgIEpT
QWN0aXZhdGlvbihDYWxsRnJhbWUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmNFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
SlNBY3RpdmF0aW9uPihnbG9iYWxEYXRhLmhlYXApKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBm
dW5jRXhlYyk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDE0ICs2MCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0FycmF5
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2Vy
OwogCi0gICAgcHVibGljOgotICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsK
LQorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAgICAgIEpT
QXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZh
bHVlcyk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRyU3RlYWxp
bmdIYWNrVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAgICBzdGF0
aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCwgQXJyYXlDcmVhdGlvbk1vZGUgY3JlYXRlTW9kZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoLCBjcmVh
dGVNb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxWYWx1ZXMpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Y2VsbC0+fkpTQ2VsbCgpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lk
KiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFwLmFs
bG9jYXRlKHNpemVvZihUKSk7CisgICAgfQorICAgICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gSlNDZWxsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMjQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmpl
Y3QgQmFzZTsKIAotICAgIHB1YmxpYzoKICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXIm
LCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0
aXZlRXhlY3V0YWJsZSopOwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9u
RXhlY3V0YWJsZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuYykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpl
eGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBs
ZW5ndGgsIGlkZW50LCBuYXRpdmVGdW5jKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkp
IEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQs
IG5hdGl2ZUV4ZWMpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMs
IGZ1bmNFeGVjLCBzY29wZUNoYWluKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdmly
dHVhbCB+SlNGdW5jdGlvbigpOwogCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoRXhlY1N0
YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICBzdHJ1Y3R1
cmUoKS0+ZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpOwogCiAgICAgbV9nbG9iYWxE
YXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwotICAgIG1fZ2xvYmFsU2NvcGVD
aGFpbi5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbmV3IChtX2dsb2JhbERhdGEuZ2V0KCkpIFNj
b3BlQ2hhaW5Ob2RlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhpc1ZhbHVl
KSk7CisgICAgbV9nbG9iYWxTY29wZUNoYWluLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBTY29w
ZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhp
c1ZhbHVlKSk7CiAKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAs
IG1fZ2xvYmFsU2NvcGVDaGFpbi5nZXQoKSwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAwLCAwKTsK
IApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUg
cHJvdG8KIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhl
YygpOwogCi0gICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBuZXcgKGV4ZWMpIEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsg
Ly8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlz
IGNyZWF0ZWQuCisgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsg
Ly8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlz
IGNyZWF0ZWQuCiAgICAgbV9mdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSAwOwpAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2Z1bmN0aW9u
UHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgbV9mdW5jdGlvblN0
cnVjdHVyZS5nZXQoKSwgJmNhbGxGdW5jdGlvbiwgJmFwcGx5RnVuY3Rpb24pOwogICAgIG1fY2Fs
bEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxGdW5jdGlvbik7CiAg
ICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFwcGx5RnVu
Y3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIG5ldyAoZXhlYykgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7CisgICAg
bV9vYmplY3RQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqZWN0UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAgICBtX2VtcHR5T2JqZWN0
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LT5pbmhlcml0b3JJRChleGVjLT5nbG9iYWxEYXRhKCkpKTsKQEAgLTIwNiw1NCArMjA2LDU0IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNr
Q29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxs
YmFja0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhH
bG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEFycmF5UHJvdG90eXBlKHRoaXMsIEFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCi0g
ICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChl
eGVjKSBTdHJpbmdQcm90b3R5cGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJp
bmdQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwog
ICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IFN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9zdHJp
bmdQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgdGhp
cywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFuUHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CiAK
LSAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcg
KGV4ZWMpIE51bWJlclByb3RvdHlwZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIG1fbnVtYmVyUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE51
bWJlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CiAgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgTnVtYmVyT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX251
bWJlclByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRGF0ZVByb3RvdHlwZShleGVjLCB0aGlzLCBE
YXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOwogICAgIG1fZGF0ZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVn
RXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5vRmxhZ3MpOworICAgIFJlZ0V4
cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5v
RmxhZ3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIHRoaXMsIFJlZ0V4cFBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CisgICAgbV9yZWdFeHBQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKICAgICBtX3JlZ0V4cFN0cnVj
dHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CiAK
ICAgICBtX21ldGhvZENhbGxEdW1teS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKSk7CiAKLSAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIEVycm9yUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpOworICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IEVycm9yUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9l
cnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckluc3RhbmNl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJvclByb3RvdHlwZSkpOwog
CiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0g
bmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIGZ1bmN0aW9u
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgdGhpcywg
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwot
ICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3Rv
cihleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSk7Ci0gICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5n
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3N0cmlu
Z1Byb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcg
KGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBCb29sZWFuQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogbnVtYmVyQ29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIE51bWJl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2Vs
bCogZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgdGhp
cywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsKKyAgICBK
U0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KTsKKyAgICBKU0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBGdW5jdGlvbkNvbnN0cnVjdG9y
OjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV9hcnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9
IFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBib29sZWFuQ29u
c3RydWN0b3IgPSBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFu
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2Vs
bCogbnVtYmVyQ29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwor
ICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsK
IAotICAgIG1fcmVnRXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9yZWdFeHBDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5
cGUuZ2V0KCkpKTsKIAotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJvdG90eXBlKSk7CisgICAgbV9lcnJvckNvbnN0cnVj
dG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJyb3JQcm90b3R5cGUpKTsK
IAogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVF
cnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQ
cm90b3R5cGUpOwogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKLSAgICBtX2V2YWxFcnJvckNvbnN0cnVjdG9yLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVT
dHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7Ci0gICAgbV9yYW5nZUVycm9yQ29uc3RydWN0b3Iuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlw
ZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVj
dG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQ
cm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIpKTsKLSAgICBtX3N5bnRheEVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIikpOwotICAgIG1fdHlwZUVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIpKTsKLSAgICBtX1VSSUVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOworICAgIG1fZXZhbEVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIpKTsKKyAgICBtX3JhbmdlRXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2
ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIpKTsKKyAgICBtX3JlZmVyZW5j
ZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJlZmVyZW5jZUVycm9yIikpOworICAgIG1f
c3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1
cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiU3ludGF4RXJyb3IiKSk7CisgICAg
bV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1
cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVHlwZUVycm9yIikpOworICAgIG1f
VVJJRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUs
IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVVJJRXJyb3IiKSk7CiAKICAgICBtX29i
amVjdFByb3RvdHlwZS0+cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgb2JqZWN0Q29u
c3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CkBA
IC0yODEsMTUgKzI4MSwxNSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJvciIpLCBtX3R5cGVFcnJvckNvbnN0cnVj
dG9yLmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1f
VVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rp
b24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4
ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOworICAgIG1fZXZhbEZ1bmN0aW9uLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBtX2Z1
bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xv
YmFsRnVuY0V2YWwpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRl
bnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywgdGhpcywg
TWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKKyAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgTWF0aE9iamVjdDo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4iKSwganNOYU4o
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5maW5pdHkiKSwganNOdW1iZXIoc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAi
dW5kZWZpbmVkIiksIGpzVW5kZWZpbmVkKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkpTT04i
KSwgbmV3IChleGVjKSBKU09OT2JqZWN0KHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSkKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhl
YywgIkpTT04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSkKICAgICB9OwogICAgIGFkZFN0YXRpY0dsb2JhbHMo
c3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CiAKQEAgLTM5
NSwxMSArMzk1LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzaXplUmVnaXN0ZXJzKHNpegog
ICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgpLCBuZXdT
aXplKTsKIH0KIAotdm9pZCogSlNHbG9iYWxPYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5o
ZWFwLmFsbG9jYXRlKHNpemUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNH
bG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNvdW50KQogewogICAgIHJl
c2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
OTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOCArMTIyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgbV9ldmFsRW5hYmxlZDsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7Ci0KICAgICAgICAgZXhwbGljaXQgSlNH
bG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
ICZtX3N5bWJvbFRhYmxlLCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDAp
CkBAIC0yODcsOCArMjg1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVzZXQo
SlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KTsKLQotICAgICAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90KTsgLy8gY2FuIG9ubHkgYmUgYWxsb2NhdGVkIHdpdGggSlNHbG9i
YWxEYXRhCiAgICAgfTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1Zh
bHVlKTsKQEAgLTM3OCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJy
YXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpOwor
ICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjKQpAQCAtMzg4LDcgKzM4NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNB
cnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
aW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOworICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKQpAQCAtNDAwLDcgKzM5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHsKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOwogICAgICAgICB2YWx1ZXMu
YXBwZW5kKHNpbmdsZUl0ZW1WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJy
YXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZh
bHVlcyk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7CiAgICAgfQogCiAgICAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
aW5nbGVJdGVtVmFsdWUpCkBAIC00MTAsNyArNDA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCB2YWx1ZXMpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gaW4g
Y2VydGFpbiBTcXVpcnJlbEZpc2ggYnl0ZWNvZGVzIC0tIGVmZmVjdGl2ZWx5IGl0IGp1c3Qgc2ls
ZW50bHkgY29uc3VtZXMKICAgICAvLyBhbnkgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gdGhlIHJl
c3VsdCBvZiBhIGZhaWxlZCB0b09iamVjdCBjYWxsLgogICAgIGNsYXNzIEpTTm90QW5PYmplY3Qg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAg
ICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm5vdEFu
T2JqZWN0U3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNOb3RBbk9iamVjdCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PEpTTm90QW5PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBT
dHJpbmdpZmllcjsKIAogICAgIGNsYXNzIEpTT05PYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgSlNPTk9i
amVjdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgSlNPTk9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU09OT2JqZWN0PigqZXhlYy0+aGVhcCgp
KSkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5m
byk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgSlNPYmplY3Q6OmRl
ZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0
ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOwor
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhl
Yyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0
RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5
LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgR2V0dGVy
U2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAg
ICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMp
OwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBTZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAg
Ly8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHBy
b3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRv
cigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmIChkZXNj
cmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAmJiBvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBuZXcg
KGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAgICAgIGlmIChvbGRE
ZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBHZXR0
ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTks
NyArMzU5LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5saW5lU3RvcgogICAg
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgSlNGaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVy
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4
ICs2MSw4IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKICAgICAg
ICAgIW8tPnN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgIW8tPnN0
cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpICYmCiAgICAgICAgICFvLT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAg
IG51bUNhY2hlYWJsZVNsb3RzID0gby0+c3RydWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZVNpemUo
KTsKLQotICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3Ig
PSBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhlYywgcHJvcGVydHlOYW1lcy5k
YXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKKyAgICAKKyAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yID0gbmV3IChhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhl
YywgcHJvcGVydHlOYW1lcy5kYXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKIAogICAgIGlmIChv
LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0Kik7CisgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFt
ZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hlYWJsZVNsb3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPigqZXhl
Yy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVBcnJh
eURhdGEsIG51bUNhY2hlYWJsZVNsb3QpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwx
MCArMTk5LDEwIEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6c3Vic3RyaW5nRnJvbVJvcGUoRXgKICAg
ICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0KICAgICBpZiAoc3Vic3RyaW5nRmliZXJDb3Vu
dCA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxE
YXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZSgqZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJzWzBdKTsKICAgICBpZiAoc3Vic3RyaW5nRmli
ZXJDb3VudCA9PSAyKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSk7Ci0gICAg
cmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmli
ZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0sIHN1YnN0cmluZ0ZpYmVyc1syXSk7CisgICAgICAg
IHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0s
IHN1YnN0cmluZ0ZpYmVyc1sxXSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdLCBzdWJzdHJpbmdG
aWJlcnNbMl0pOwogfQogCiBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNT
dGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCkK
QEAgLTI1NCw3ICsyNTQsNyBAQCBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4
ZWNTCiAgICAgfQogCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGds
b2JhbERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUoSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYnVpbGRlci5yZWxlYXNlKCkpKTsKIH0KIAogSlNTdHJp
bmcqIEpTU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKQEAgLTI5OCw3ICsyOTgsNyBAQCBVU3RyaW5nIEpTU3RyaW5nOjp0b1N0cmluZyhFeGVjU3Rh
dGUqIGV4CiAKIGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVjdDo6Y3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmlu
ZykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBzdHJpbmcpOworICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBT
dHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpLCBzdHJpbmcpOwogfQogCiBKU09iamVjdCogSlNTdHJpbmc6OnRvT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gOTEw
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODAsOSArMTgwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAg
ICAgICAgVmVjdG9yPFdvcmtJdGVtLCAxNj4gbV93b3JrUXVldWU7CiAgICAgICAgIH07CisgICAg
ICAgIAorICAgICAgICBlbnVtIEhhc090aGVyT3duZXJUeXBlIHsgSGFzT3RoZXJPd25lciB9Owog
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVl
Lmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAgICAgLCBt
X2ZpYmVyQ291bnQoMCkKQEAgLTE5MSwyNSArMTk0LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHZhbHVlLmlt
cGwoKS0+Y29zdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5
cGUgeyBIYXNPdGhlck93bmVyIH07Ci0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQotICAgICAg
ICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBV
U3RyaW5nJiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgICAgICA6IEpTQ2VsbChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAg
ICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgwKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIEpTU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFz
T3RoZXJPd25lclR5cGUpCi0gICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUsIEhhc090aGVyT3du
ZXJUeXBlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLT5sZW5ndGgo
KSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgICAgICwgbV9maWJlckNv
dW50KDApCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQ
YXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERh
dGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmco
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQorICAg
ICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHJvcGUtPmxlbmd0aCgpKQogICAgICAgICAg
ICAgLCBtX2ZpYmVyQ291bnQoMSkKICAgICAgICAgewpAQCAtMjE3LDggKzIxOSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3Ry
dWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAg
SlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBK
U1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5n
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcq
IHMxLCBKU1N0cmluZyogczIpCisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgoczEt
Pmxlbmd0aCgpICsgczItPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmli
ZXJDb3VudCkKICAgICAgICAgewpAQCAtMjMwLDggKzIzMiw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBz
dHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEs
IGNvbnN0IFVTdHJpbmcmIHUyKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIGNv
bnN0IFVTdHJpbmcmIHUyKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHMxLT5s
ZW5ndGgoKSArIHUyLmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJD
b3VudCkKICAgICAgICAgewpAQCAtMjQzLDggKzI0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJp
bmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1
MSwgSlNTdHJpbmcqIHMyKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwg
SlNTdHJpbmcqIHMyKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHUxLmxlbmd0
aCgpICsgczItPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJDb3Vu
dCkKICAgICAgICAgewpAQCAtMjcxLDggKzI3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB9CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmlu
ZyBieSBjb25jYXRlbmF0aW5nIHUxICYgdTIuCi0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQotICAg
ICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCisgICAgICAgICAgICA6IEpTQ2VsbChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAg
ICwgbV9sZW5ndGgodTEubGVuZ3RoKCkgKyB1Mi5sZW5ndGgoKSkKICAgICAgICAgICAgICwgbV9m
aWJlckNvdW50KDIpCiAgICAgICAgIHsKQEAgLTI4Myw4ICsyODUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBh
IG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB1MSwgdTIgJiB1My4KLSAgICAgICAgSlNTdHJp
bmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0
cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJp
bmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0
cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1f
bGVuZ3RoKHUxLmxlbmd0aCgpICsgdTIubGVuZ3RoKCkgKyB1My5sZW5ndGgoKSkKICAgICAgICAg
ICAgICwgbV9maWJlckNvdW50KHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQogICAgICAgICB7CkBA
IC0yOTUsNiArMjk3LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGlu
ZGV4IDw9IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKTsKICAgICAgICAgfQogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGds
b2JhbERhdGEsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNP
dGhlck93bmVyVHlwZSBoYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3RoZXJPd25lclR5cGUpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUgaGFzT3RoZXJP
d25lclR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUs
IGhhc090aGVyT3duZXJUeXBlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8Um9wZUltcGw+IHJv
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5n
PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwg
czIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25z
dCBVU3RyaW5nJiB1MikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBm
aWJlckNvdW50LCBzMSwgdTIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgY29u
c3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBKU1N0cmluZyogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1
ZSB2MiwgSlNWYWx1ZSB2MykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPEpTU3RyaW5nPigqZXhlYy0+aGVhcCgpKSkgSlNTdHJpbmcoZXhlYywgdjEsIHYy
LCB2Myk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmlu
Zz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyKTsKKyAgICAg
ICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmlu
ZyYgdTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxK
U1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1
Myk7CisgICAgICAgIH0KKwogICAgICAgICB+SlNTdHJpbmcoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQodnB0cigpID09IEpTR2xvYmFsRGF0YTo6anNTdHJpbmdWUHRyKTsKQEAgLTQ0
Miw3ICs0ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIGlmIChjIDw9IG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAg
ICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmco
Z2xvYmFsRGF0YSwgVVN0cmluZygmYywgMSkpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihn
bG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkp
OwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQpCkBA
IC00NTIsNyArNDk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNo
YXJhY3RlcnMoKVtvZmZzZXRdOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0
cihnbG9iYWxEYXRhLCBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJp
bmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOworICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOwogICAg
IH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykKQEAgLTQ2MCwxMyArNTA0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBBU1NFUlQocyk7CiAgICAgICAgIEFTU0VSVChzWzBdKTsKICAg
ICAgICAgQVNTRVJUKHNbMV0pOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEs
IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1
cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMp
KTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBB
U1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERh
dGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IHMpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCkBAIC00ODgsNyArNTMyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZp
eHVwVlB0cihnbG9iYWxEYXRhLCBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEs
IHMpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKQEAgLTUxNiw3ICs1NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNP
dGhlck93bmVyKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBs
KCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgVVN0cmluZyYgcykKQEAgLTUyOSw3ICs1NzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBW
UHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywg
SlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9i
YWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzLCBKU1N0cmluZzo6SGFzT3Ro
ZXJPd25lcikpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEo
KSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0
b09iamVjdFNsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsK
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMp
KTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVy
biBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjp0
b1RoaXNPYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC05MCw3ICs5MCw3
IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplT2JqZWN0KEV4ZWMKIAogICAgIEFTU0VS
VChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFu
T2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFu
T2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9
CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6
ZVByb3RvdHlwZShFCiAKICAgICBBU1NFUlQoaXNVbmRlZmluZWRPck51bGwoKSk7CiAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjKTsKKyAgICByZXR1cm4gSlNOb3RB
bk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDEwICs4MCwxMCBAQCB2b2lkIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSog
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0dsb2JhbE9iamVjdCh0
aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKS5hc0NlbGwoKSk7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5m
dW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1l
LCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBl
bnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9y
KCkpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAo
ZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50
cnktPmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCks
IGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigp
KTsKIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3RGdW5jdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAg
ICBsb2NhdGlvbiA9IHRoaXNPYmotPmdldERpcmVjdExvY2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
dGhPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXRoT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNYXRoT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE1hdGhP
YmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE1hdGhPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TWF0aE9iamVjdD4o
KmV4ZWMtPmhlYXAoKSkpIE1hdGhPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdAogewogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiAKLSAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3
IChleGVjKSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2UsIHRoaXMpOworICAgIE5hdGl2ZUVycm9yUHJvdG90
eXBlKiBwcm90b3R5cGUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhpcyk7CiAKICAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBF
Q01BIDE1LjExLjcuNQogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
IHwgRG9udEVudW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDkgKzMwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5h
dGl2ZUVycm9yUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciA6
IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAg
ICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBVU3RyaW5n
Jik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IFVTdHJpbmcmIG5hbWVBbmRNZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkp
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5cGUgOiBwdWJs
aWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOwor
ICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkp
KSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbmFt
ZUFuZE1lc3NhZ2UsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgfQogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgSlNWYWx1ZSBudW1iZXJDb25zdHJ1Y3Rvck1pblZhbHVl
CiAvLyBFQ01BIDE1LjcuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBOdW1i
ZXJPYmplY3QqIG9iamVjdCA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCkt
Pm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51
bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgp
KTsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpIDogMDsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc051bWJlcihuKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZTsKIAog
ICAgIGNsYXNzIE51bWJlckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewot
ICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE51bWJlclByb3RvdHlwZSopOwor
ICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJDb25zdHJ1Y3Rvciog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE51bWJlclByb3RvdHlwZSogbnVtUHJvdG90eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyQ29uc3RydWN0
b3I+KCpleGVjLT5oZWFwKCkpKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgbnVtUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNw
cAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTVmFsdWUgTnVt
YmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiAKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBu
dW1iZXIpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0
dXJlKCkpOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgp
KTsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBudW1i
ZXIpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyT2JqZWN0IDog
cHVibGljIEpTV3JhcHBlck9iamVjdCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBOdW1iZXJP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisKICAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IE51bWJlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAg
ICAgc3RhdGljIE51bWJlck9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxOdW1iZXJPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIE51bWJlck9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw5ICsyNiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOdW1iZXJQcm90
b3R5cGUgOiBwdWJsaWMgTnVtYmVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgTnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJQcm90b3R5cGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8TnVtYmVyUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgTnVtYmVyUHJvdG90
eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBl
OwogCiAgICAgY2xhc3MgT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE9iamVjdENvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgT2JqZWN0UHJvdG90eXBl
Kik7CisgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0Q29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm90b3R5cGUqIG9ialByb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iamVjdENvbnN0cnVj
dG9yPigqZXhlYy0+aGVhcCgpKSkgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIG9ialByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90
b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE9iamVjdFByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmplY3RQ
cm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBPYmplY3RQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlmIChm
aWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291
bnQsIHMxLCBzMik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgZmliZXJDb3VudCwgczEsIHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxk
ZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVp
bGRlci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAgICAgICAg
cm9wZUJ1aWxkZXIuYXBwZW5kKHMyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7
CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKQEAgLTc0LDE0ICs3NCwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBKU1N0cmluZzo6
c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAgICAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHUxLCBz
Mik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291
bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAg
IHJvcGVCdWlsZGVyLmFwcGVuZCh1MSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMik7
Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJv
cGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgY29u
c3QgVVN0cmluZyYgdTIpCkBAIC05OSwxNCArOTksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAg
ICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0
YSwgZmliZXJDb3VudCwgczEsIHUyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgdTIpOwogCiAgICAgICAgIEpTU3RyaW5n
OjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczEp
OwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodTIpOwotICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIu
cmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCkBA
IC0xMjEsNyArMTIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHUxLCB1Mik7CisgICAgICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCB1MSwgdTIpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHUxLCBj
b25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBAIC0xNDIsNyArMTQyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIHUxLCB1MiwgdTMpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgdTEsIHUyLCB1Myk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVkIGNv
dW50KQpAQCAtMTYwLDcgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgICAgIGlmIChm
aWJlckNvdW50ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhleGVjLCBzdHJpbmdzWzBdLmpzVmFsdWUoKSwgc3RyaW5nc1sxXS5qc1ZhbHVlKCksIHN0
cmluZ3NbMl0uanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1ZSgpLCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3RyaW5n
c1syXS5qc1ZhbHVlKCkpOwogCiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVp
bGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0
T2ZNZW1vcnkoKSkpCkBAIC0xODUsNyArMTg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGlmIChvdmVyZmxvdykKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFs
RGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUpCkBAIC0yMzIsNyArMjMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCByb3BlQnVp
bGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIC8vIEVDTUEgMTEuOS4zCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsOCArNzYsOCBAQCBzdHJ1Y3QgUmVnRXhwUmVwcmVzZW50YXRpb24gewogICAgIE93blB0
cjxZYXJyOjpCeXRlY29kZVBhdHRlcm4+IG1fcmVnRXhwQnl0ZWNvZGU7CiB9OwogCi1SZWdFeHA6
OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5T
dHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQotICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCitSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdz
IGZsYWdzKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucmVnRXhwU3RydWN0
dXJlLmdldCgpKQogICAgICwgbV9zdGF0ZShOb3RDb21waWxlZCkKICAgICAsIG1fcGF0dGVyblN0
cmluZyhwYXR0ZXJuU3RyaW5nKQogICAgICwgbV9mbGFncyhmbGFncykKQEAgLTk5LDkgKzk5LDE0
IEBAIFJlZ0V4cDo6flJlZ0V4cCgpCiB7CiB9CiAKLVJlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdF
eHBGbGFncyBmbGFncykKK1JlZ0V4cCogUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4
cEZsYWdzIGZsYWdzKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5s
b29rdXBPckNyZWF0ZShwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CisgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFJlZ0V4cD4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwKGdsb2JhbERhdGEsIHBh
dHRlcm5TdHJpbmcsIGZsYWdzKTsKK30KKworUmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZs
YWdzIGZsYWdzKQoreworICAgIHJldHVybiBnbG9iYWxEYXRhLnJlZ0V4cENhY2hlKCktPmxvb2t1
cE9yQ3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKIH0KIAogdm9pZCBSZWdFeHA6OmNvbXBp
bGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHAgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBjb25zdCBV
U3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7CisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7
CiAgICAgICAgIH5SZWdFeHAoKTsKIAogICAgICAgICBib29sIGdsb2JhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmxhZ3MgJiBGbGFnR2xvYmFsOyB9CkBAIC03NSw3ICs3NSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwot
ICAgICAgICBSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBw
YXR0ZXJuLCBSZWdFeHBGbGFncyk7CisgICAgICAgIFJlZ0V4cChKU0dsb2JhbERhdGEmLCBjb25z
dCBVU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOworCisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0
ZVdpdGhvdXRDYWNoaW5nKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFVTdHJpbmcmLCBSZWdFeHBGbGFn
cyk7CiAKICAgICAgICAgZW51bSBSZWdFeHBTdGF0ZSB7CiAgICAgICAgICAgICBQYXJzZUVycm9y
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNw
cAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdF
eHBDYWNoZTo6bG9va3VwT3JDcmVhdGUoY29ucwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBtX3dlYWtDYWNoZS5maW5kKGtleSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3dl
YWtDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLmdldCgpOwotICAg
IFJlZ0V4cCogcmVnRXhwID0gbmV3IChtX2dsb2JhbERhdGEpIFJlZ0V4cChtX2dsb2JhbERhdGEs
IHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3Jl
YXRlV2l0aG91dENhY2hpbmcoKm1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX2dsb2JhbERhdGEtPmFkZFJlZ0V4cFRv
VHJhY2UocmVnRXhwKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6Zmls
bEFycmF5SW5zdGFuCiAKIEpTT2JqZWN0KiBSZWdFeHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNo
ZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4
cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKKyAgICByZXR1cm4gUmVnRXhwTWF0Y2hlc0Fy
cmF5OjpjcmVhdGUoZXhlYywgZC5nZXQoKSk7CiB9CiAKIEpTVmFsdWUgUmVnRXhwQ29uc3RydWN0
b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKSBjb25zdApAQCAtMzA0
LDcgKzMwNCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAg
ICAgICAgLy8gSWYgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHRoaXMganVzdCByZXR1cm5zIHRoZSBm
aXJzdCBhcmd1bWVudCAoc2VlIDE1LjEwLjMuMSkuCiAgICAgICAgIGlmIChjYWxsQXNDb25zdHJ1
Y3RvcikgewogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBzdGF0aWNfY2FzdDxSZWdFeHBP
YmplY3QqPihhc09iamVjdChhcmcwKSktPnJlZ0V4cCgpOwotICAgICAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KGFyZzApOwogICAg
IH0KQEAgLTMyMiwxMCArMzIyLDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0
YXRlKiBleGUKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRh
eEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rv
ci4iKSk7CiAgICAgfQogCi0gICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBS
ZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICBp
ZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7Ci0gICAgcmV0
dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICByZXR1cm4gUmVn
RXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDkgKzU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBjbGFzcyBSZWdFeHBD
b25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAg
cHJpdmF0ZToKICAgICAgICAgUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHBQcm90b3R5cGUqKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cENvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhw
UHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIFJl
Z0V4cENvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHBQcm90
b3R5cGUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdF
eHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7Ci0gICAgcHVibGljOgorICAgIHByaXZh
dGU6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1
Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNo
ZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRl
KiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE1hdGNoZXNB
cnJheShleGVjLCBjdG9yUHJpdmF0ZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+UmVn
RXhwTWF0Y2hlc0FycmF5KCk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEwICsyNywyMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgUmVn
RXhwT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKKwogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgUmVn
RXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE9i
amVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAg
ICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsK
ICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdF
eHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgZC0+cmVnRXhwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywg
IkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKICAgICAg
ICAgfQotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhw
LT5pc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcs
MTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlIDogcHVi
bGljIFJlZ0V4cE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAg
UmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
UmVnRXhwKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBQcm90b3R5cGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cFByb3RvdHlwZT4oKmV4ZWMtPmhlYXAo
KSkpIFJlZ0V4cFByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhw
KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTbG90VmlzaXRvcjsK
ICAgICAKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZSA6IHB1YmxpYyBKU0NlbGwgewotICAgIHB1
YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBTY29wZUNoYWluTm9kZShTY29wZUNoYWluTm9k
ZSogbmV4dCwgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcykKICAgICAgICAg
ICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zY29wZUNoYWluTm9kZVN0cnVj
dHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtNDcs
NiArNDcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgfQogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU2NvcGVDaGFp
bk5vZGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2NvcGVDaGFpbk5vZGU+KCpleGVjLT5oZWFwKCkp
KSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmplY3QsIGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
Z2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2RlKiBj
cmVhdGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGds
b2JhbFRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxTY29wZUNoYWluTm9kZT4oZ2xvYmFsRGF0YS0+aGVhcCkpIFNjb3BlQ2hhaW5Ob2RlKG5leHQs
IG9iamVjdCwgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxUaGlzKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG5leHQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gb2JqZWN0OwpAQCAtNzYsNyArODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBp
bmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwdXNoKEpTT2JqZWN0KiBvKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG8pOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRh
KSBTY29wZUNoYWluTm9kZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QuZ2V0KCks
IGdsb2JhbFRoaXMuZ2V0KCkpOworICAgICAgICByZXR1cm4gU2NvcGVDaGFpbk5vZGU6OmNyZWF0
ZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QuZ2V0KCksIGdsb2JhbFRoaXMuZ2V0
KCkpOwogICAgIH0KIAogICAgIGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFpbk5vZGU6
OnBvcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVu
c2lnbmVkIFNtYWxsU3RyaW5nczo6Y291bnQoKSBjb25zdAogdm9pZCBTbWFsbFN0cmluZ3M6OmNy
ZWF0ZUVtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQo
IW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcgPSBuZXcgKGdsb2JhbERhdGEpIEpT
U3RyaW5nKGdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgbV9l
bXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6
SGFzT3RoZXJPd25lcik7CiB9CiAKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJh
Y3RlcikKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xl
Q2hhcmFjdGVyCiAgICAgaWYgKCFtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZSA9IGFkb3B0
UHRyKG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdlKTsKICAgICBBU1NFUlQoIW1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1tjaGFyYWN0ZXJdKTsKLSAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hh
cmFjdGVyXSA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPihtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090
aGVyT3duZXIpOworICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNT
dHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihtX3N0b3Jh
Z2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOwogfQogCiBTdHJp
bmdJbXBsKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBj
aGFyIGNoYXJhY3RlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw4ICs4Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChleGVjKSBT
dHJpbmdPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhl
YywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJp
bmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlOwogCiAgICAgY2xhc3MgU3RyaW5n
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAg
IHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgU3RyaW5nUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ0NvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ICwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cmluZ1Byb3RvdHlwZSogc3RyUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nQ29uc3RydWN0b3I+KCpleGVjLT5oZWFw
KCkpKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc3Ry
UHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDIxIEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJP
YmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKLQorICAgICAgICAgICAgICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYywgc3RydWN0dXJlKTsgIAorICAgICAgICB9CisgICAgICAgIHN0YXRpYyBTdHJp
bmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBVU3RyaW5nJiBzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhl
Yywgc3RydWN0dXJlLCBzdHIpOyAgCisgICAgICAgIH0KICAgICAgICAgc3RhdGljIFN0cmluZ09i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAg
ICAgICAgCiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgc3RyaW5nKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3RUaGF0TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLAorICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkPigqZXhlYy0+aGVh
cCgpKSkgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywKICAgICAg
ICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpKSwgc3RyaW5nKTsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDcgKzYxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICog
IElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAi
UmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0
aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICBy
ZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVj
KSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25z
dHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsKQEAgLTY2NCw3ICs2NjQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAqICBJZiBy
ZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4
cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4
cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0g
UmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5v
RmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOSArMjgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0
UHJvdG90eXBlOwogCiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlIDogcHVibGljIFN0cmluZ09i
amVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ1Byb3RvdHlw
ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3Rv
dHlwZT4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ1Byb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKICAg
ICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmds
b2JhbERhdGEpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIHR5cGVJbmZvLCBhbm9u
eW1vdXNTbG90Q291bnQsIGNsYXNzSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgcHJvdG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3VzU2xvdENvdW50LCBjbGFzc0luZm8pOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMTcwLDcg
KzE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0
dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIGVudW0geyAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogaGVhZCkgeyByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlQ2hhaW4oZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSwgaGVhZCk7
IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0
cnVjdHVyZUNoYWluPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgpLCBoZWFkKTsgfQogICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdl
dCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2CisgICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBs
YWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAg
ICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJlZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3Zl
IHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRv
IGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJlcGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qg
d2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9yIGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhl
YXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVjdC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBv
bmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMgb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdp
dGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNoZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUK
KyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBE
T00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAgICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhh
cyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZyb20gSlNDZWxsLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBwbGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRh
cmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNE
YXRlT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNh
Y2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2Fj
aGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25D
YWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVw
bGFjZUZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNS
ZWxvYWRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGlj
QXNzaWduRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZFRlcm1pbmFsKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKKwogMjAxMS0wNy0xNCAg
SmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29tPgogCiAgICAgICAgIENoYXJhY3RlciByZWZl
cmVuY2UgcGFyc2VyIGZvciBuZXcgWE1MIHBhcnNlcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Niw3ICsxNTYsNyBAQCBKU1ZhbHVlIGpzRGF0ZU9yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGRvCiB7
CiAgICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAgICByZXR1cm4gRGF0ZUluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0
dXJlKCksIHZhbHVlKTsKIH0KIAogZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKQEAgLTMwNyw3ICszMDcsNyBAQCBGcmFtZSogdG9EeW5hbWljRnJhbWUo
RXhlY1N0YXRlKiBleGVjKQogCiBKU1ZhbHVlIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CisgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwg
cHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CiAKIFN0cnVjdHVyZSog
Z2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaQogdGVtcGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+
CiBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBu
YXRpdmVGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGNoaWxkRnJhbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTcgKzQwLDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0JhY2tG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlw
ZUZ1bmN0aW9uQmFjayk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5j
dGlvbkJhY2spOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25Gb3J3YXJkKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uRm9yd2FyZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNHb0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25Hbyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlv
bkdvKTsKIH0KIAogYm9vbCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRp
Y1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0
aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRp
b25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlv
blByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hp
bmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBK
U0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpz
TG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0xv
Y2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25D
YWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1l
LCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pOworICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwg
anNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKIH0KIAogYm9vbCBKU0xvY2F0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODYsNyArMTA4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBkb3VibGUgZDsKICAgICAgICAgICAgIGlmICghcmVhZChkKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
bV9leGVjKSBEYXRlSW5zdGFuY2UobV9leGVjLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVy
ZSgpLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShtX2V4ZWMs
IG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQpOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgRmlsZVRhZzogewogICAgICAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGU7CkBAIC0xMTY2
LDggKzExNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAgICAgICAgICAgICBSZWdFeHBGbGFncyByZUZsYWdzID0gcmVnRXhwRmxhZ3MoZmxhZ3MtPnVz
dHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVGbGFncyAhPSBJbnZhbGlkRmxhZ3MpOwot
ICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmbV9leGVjLT5nbG9i
YWxEYXRhKCksIHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChtX2V4ZWMpIFJlZ0V4cE9iamVjdChtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKKyAgICAgICAg
ICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9leGVjLT5nbG9iYWxEYXRhKCks
IHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7CisgICAgICAgICAgICByZXR1cm4gUmVnRXhw
T2JqZWN0OjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9n
bG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKICAgICAgICAgfQogICAg
ICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzogewogICAgICAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3Myw5ICs4NzMsOSBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFu
dFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgICAgICBVU3RyaW5nIHBhdHRlcm4oKFVDaGFyKily
ZS5wYXR0ZXJuKCkudXRmMTYoKSwgcmUucGF0dGVybigpLmxlbmd0aCgpKTsKICAgICAgICAgICAg
IFJlZ0V4cEZsYWdzIGZsYWdzID0gKHJlLmNhc2VTZW5zaXRpdml0eSgpID09IFF0OjpDYXNlSW5z
ZW5zaXRpdmUpID8gRmxhZ0lnbm9yZUNhc2UgOiBOb0ZsYWdzOwogCi0gICAgICAgICAgICBKU0M6
OlJlZ0V4cCogcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgICAgICBKU0M6OlJlZ0V4cCogcmVnRXhwID0gSlND
OjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAg
ICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAg
ICAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3Ry
dWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC05MDgsNyArOTA4LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1Zh
bHVlKEV4ZWNTdGF0ZQogICAgICAgICBkdC5pc0RTVCA9IC0xOwogICAgICAgICBkb3VibGUgbXMg
PSBncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZHQsIHRpbWUubXNlYygpLCAvKmlucHV0SXNV
VEMqLyBmYWxzZSk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB0cnVuYyht
cykpOworICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7CiAgICAgfQog
CiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101025</attachid>
            <date>2011-07-15 12:37:16 -0700</date>
            <delta_ts>2011-07-15 13:17:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110715123716.patch</filename>
            <type>text/plain</type>
            <size>166680</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE1IEBA
CisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAg
IChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChK
U0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAg
ICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VDaGFy
YWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RS
ZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6CisgICAgICAgICogcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVt
cHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc3BlY3VsYXRpdmUgSklUIGNvbnRhaW5zIGEg
RklYTUUgZm9yIHJld2luZGluZyBzcGVjdWxhdGl2ZSBjb2RlIGdlbmVyYXRpb24gdGhhdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBO
U185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgogX19aTjNKU0MxNFNh
bXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoKQEAg
LTI2Myw4ICsyNjIsOCBAQCBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9y
CiBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQzZK
U0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRlRQotX19a
TjNKU0M2UmVnRXhwNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18x
MVJlZ0V4cEZsYWdzRQogX19aTjNKU0M2UmVnRXhwRDFFdgorX19aTjNKU0M2UmVnRXhwNmNyZWF0
ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQogX19a
TjNKU0M3SlNBcnJheTEzdmlzaXRDaGlsZHJlbkVSTlNfMTFTbG90VmlzaXRvckUKIF9fWk4zSlND
N0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0M3SlNBcnJheTE4Z2V0T3duUHJv
cGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0MywxNCBAQCBsb25nIFN0b3BXYXRj
aDo6Z2V0RWxhcHNlZE1TKCkKIH0KIAogY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xv
YmFsT2JqZWN0IHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgR2xvYmFsT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRzKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxHbG9iYWxP
YmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGFyZ3VtZW50cyk7CisgICAgfQogICAgIHZpcnR1YWwgVVN0cmluZyBjbGFzc05hbWUoKSBj
b25zdCB7IHJldHVybiAiZ2xvYmFsIjsgfQogfTsKIENPTVBJTEVfQVNTRVJUKCFJc0ludGVnZXI8
R2xvYmFsT2JqZWN0Pjo6dmFsdWUsIFdURl9Jc0ludGVnZXJfR2xvYmFsT2JqZWN0X2ZhbHNlKTsK
QEAgLTE1MywyMiArMTU5LDIyIEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoR2xvYmFsT2Jq
ZWN0KTsKIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRz
KQogICAgIDogSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogewotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
cXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5j
dGlvbkdDKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9u
OjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVj
KCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygp
LCAicHJpbnQiKSwgZnVuY3Rpb25QcmludCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJxdWl0IiksIGZ1bmN0aW9u
UXVpdCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpT
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9u
UmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkiKSwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSkpOwogI2VuZGlmCi0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5j
dGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAidmVyc2lvbiIpLCBmdW5jdGlvblZlcnNpb24pKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImNoZWNrU3lu
dGF4IiksIGZ1bmN0aW9uQ2hlY2tTeW50YXgpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9i
YWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhp
cywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWFk
bGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwgZnVuY3Rp
b25WZXJzaW9uKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJ
ZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJ1biIpLCBmdW5jdGlvblJ1bikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5j
dGlvbkNoZWNrU3ludGF4KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlYWRsaW5lIiksIGZ1bmN0aW9uUmVhZGxp
bmUpKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncykpOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImNsZWFyU2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvbkNsZWFyU2FtcGxp
bmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2Ft
cGxpbmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
SWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25D
bGVhclNhbXBsaW5nRmxhZ3MpKTsKICNlbmRpZgogCiAgICAgSlNPYmplY3QqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCkpOwpAQCAtMjI3LDcgKzIzMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBpZiAoIWZpbGxCdWZmZXJX
aXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiQ291bGQgbm90
IG9wZW4gZmlsZS4iKSkpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcg
KCZleGVjLT5nbG9iYWxEYXRhKCkpIEdsb2JhbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIEds
b2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
LCBWZWN0b3I8VVN0cmluZz4oKSk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBH
bG9iYWxPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIEdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBWZWN0b3I8VVN0cmlu
Zz4oKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5zdGFydCgp
OwpAQCAtNTUyLDcgKzU1OCw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndiwg
SlNHbG8KICAgICBPcHRpb25zIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJn
diwgb3B0aW9ucywgZ2xvYmFsRGF0YSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpLCBvcHRpb25zLmFyZ3Vt
ZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERh
dGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJvb2wgc3VjY2VzcyA9IHJ1
bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5zY3JpcHRzLCBvcHRpb25zLmR1bXAp
OwogICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCiAgICAgICAgIHJ1bklu
dGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxi
YWNrQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLXB1Ymxp
YzoKK3Byb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2spOworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tDb25z
dHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAg
ICB9CisgICAgCiAgICAgdmlydHVhbCB+SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlND
bGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVj
dENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxiYWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNh
bGxiYWNrLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBK
U0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVu
Y3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgbmFtZSk7CisgICAgfQorCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgCiAgICAgLy8gSW50ZXJuYWxGdW5j
dGlvbiBtaXNoLW1hc2hlcyBjb25zdHJ1Y3RvciBhbmQgZnVuY3Rpb24gYmVoYXZpb3IgLS0gd2Ug
c2hvdWxkIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsMjMgQEAgc3RydWN0
IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgIAogdGVtcGxhdGUgPGNsYXNz
IEJhc2U+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IDogcHVibGljIEJhc2UgewotcHVibGljOgor
cHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOworICAgIC8vIFdl
J2QgbGlrZSB0byB1c2UgdGhlIHBsYWNlbWVudCB2ZXJzaW9uIG9mIG9wZXJhdG9yIG5ldyBkZWZp
bmVkIGluIEpTQ2VsbCwgYnV0IAorICAgIC8vIHdlIGNhbid0IGJlY2F1c2UgQmFzZSBpcyBhIHRl
bXBsYXRlIGFyZ3VtZW50LCBzbyB3ZSBqdXN0IGR1cGxpY2F0ZSB0aGUgc2FtZSAKKyAgICAvLyBm
dW5jdGlvbmFsaXR5IGhlcmUuCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCog
cHRyKSB7IHJldHVybiBwdHI7IH0KKworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrT2Jq
ZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0aWMgSlNDYWxsYmFja09i
amVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBjbGFzc1Jl
ZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNDYWxsYmFja09i
amVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICB2b2lk
IHNldFByaXZhdGUodm9pZCogZGF0YSk7CiAgICAgdm9pZCogZ2V0UHJpdmF0ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAs
NyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1CiAgICAgICAgICAg
ICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChw
cm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24p
IHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBv
ID0gbmV3IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgYXNHbG9iYWxPYmplY3QodGhp
c09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlvbiwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgw
KSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0
aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG8sIGVu
dHJ5LT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBKU09iamVjdCogT3BhcXVl
SlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAKICAgICBpZiAoIWpzQ2xhc3NEYXRhLmNhY2hlZFBy
b3RvdHlwZSkgewogICAgICAgICAvLyBSZWN1cnNpdmUsIGJ1dCBzaG91bGQgYmUgZ29vZCBlbm91
Z2ggZm9yIG91ciBwdXJwb3NlcwotICAgICAgICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHBy
b3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRo
ZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9u
IGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJvdG90eXBlQ2xh
c3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdz
IHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rp
b24KICAgICAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgICAgICAg
ICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNH
bG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogICAgICAgICByZXR1cm4gSlNH
bG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xv
YmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4oKmdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CiAgICAg
aWYgKCFwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAgICAgaWYgKCFqc0NsYXNzKQogICAgICAg
ICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgSlNDYWxs
YmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMp
IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJh
Y2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CisgICAgSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1
Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBq
c0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKIApAQCAtOTUsNyArOTUsNyBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsCiAKICAgICBJZGVudGlmaWVyIG5hbWVJ
RCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRp
ZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVmKG5ldyAoZXhl
YykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAgIHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1
bmN0aW9uLCBuYW1lSUQpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0
b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0Nv
bnN0cnVjdG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0xMDcsNyArMTA3LDcgQEAg
SlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDbwogICAgIGlmICghanNQcm90
b3R5cGUpCiAgICAgICAgIGpzUHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKTsKIAotICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1
Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7CisgICAgSlNDYWxs
YmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxB
c0NvbnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0
b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJ
KHdvcmtpbmcgY29weSkKQEAgLTMsMjQgKzMsMTggQEAgRVhQT1JUUwogICAgID8/MENTdHJpbmdA
V1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCRElAWgogICAgID8/MENv
bGxhdG9yQFdURkBAUUFFQFBCREBaCi0gICAgPz8wRGF0ZUluc3RhbmNlQEpTQ0BAUUFFQFBBVkV4
ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQE5AWgogICAgID8/MERlZmF1bHRHQ0FjdGl2aXR5Q2Fs
bGJhY2tASlNDQEBRQUVAUEFWSGVhcEAxQEBaCiAgICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BK
U0NAQFFBRUBXNEpTTG9ja0JlaGF2aW9yQDJAQFoKICAgICA/PzBEeW5hbWljR2xvYmFsT2JqZWN0
U2NvcGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBAWiAg
CiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZKU0dsb2JhbERhdGFAMUBQQVZK
U0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEFCVklkZW50aWZpZXJAMUBAWgotICAgID8/
MEpTQXJyYXlASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAQFoKLSAg
ICA/PzBKU0FycmF5QEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEFC
VkFyZ0xpc3RAMUBAWgogICAgID8/MEpTQnl0ZUFycmF5QEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAx
QFBBVlN0cnVjdHVyZUAxQFBBVkJ5dGVBcnJheUBXVEZAQEBaCi0gICAgPz8wSlNGdW5jdGlvbkBK
U0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAx
QEhBQlZJZGVudGlmaWVyQDFAUDZJX0owQFpAWgogICAgID8/MEpTTG9ja0BKU0NAQFFBRUBQQVZF
eGVjU3RhdGVAMUBAWgogICAgID8/MEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdEBKU0NAQElBRUBB
QVZKU0dsb2JhbERhdGFAMUBQQVZKU0dsb2JhbE9iamVjdEAxQFBBVlN0cnVjdHVyZUAxQEBaCiAg
ICAgPz8wSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0QEpTQ0BASUFFQFBBVkpTR2xvYmFsT2JqZWN0
QDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBNRDVAV1RGQEBRQUVAWFoKICAgICA/PzBNdXRl
eEBXVEZAQFFBRUBYWgogICAgID8/MFJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBQQkRA
WgotICAgID8/MFJlZ0V4cE9iamVjdEBKU0NAQFFBRUBQQVZKU0dsb2JhbE9iamVjdEAxQFBBVlN0
cnVjdHVyZUAxQFBBVlJlZ0V4cEAxQEBaCiAgICAgPz8wU0hBMUBXVEZAQFFBRUBYWgotICAgID8/
MFN0cmluZ09iamVjdEBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZV
U3RyaW5nQDFAQFoKICAgICA/PzBTdHJ1Y3R1cmVASlNDQEBBQUVAQUFWSlNHbG9iYWxEYXRhQDFA
VkpTVmFsdWVAMUBBQlZUeXBlSW5mb0AxQElQQlVDbGFzc0luZm9AMUBAWgogICAgID8/MFRocmVh
ZENvbmRpdGlvbkBXVEZAQFFBRUBYWgogICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJEQFoKQEAg
LTQwLDcgKzM0LDYgQEAgRVhQT1JUUwogICAgID8/MVRocmVhZENvbmRpdGlvbkBXVEZAQFFBRUBY
WgogICAgID8/MVdURlRocmVhZERhdGFAV1RGQEBRQUVAWFoKICAgICA/PzFXZWFrSGFuZGxlT3du
ZXJASlNDQEBVQUVAWFoKLSAgICA/PzJKU0dsb2JhbE9iamVjdEBKU0NAQFNBUEFYSVBBVkpTR2xv
YmFsRGF0YUAxQEBaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgogICAgID8/OFdU
RkBAWUFfTkFCVkNTdHJpbmdAMEAwQFoKICAgICA/YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dElu
dGVydmFsQFdURkBAWUFLTkBaCkBAIC05OSw3ICs5Miw2IEBAIEVYUE9SVFMKICAgICA/Y3JlYXRl
QEJ5dGVBcnJheUBXVEZAQFNBP0FWPyRQYXNzUmVmUHRyQFZCeXRlQXJyYXlAV1RGQEBAMkBJQFoK
ICAgICA/Y3JlYXRlQEpTR2xvYmFsRGF0YUBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZKU0dsb2Jh
bERhdGFASlNDQEBAV1RGQEBXNFRocmVhZFN0YWNrVHlwZUAyQEBaCiAgICAgP2NyZWF0ZUBPcGFx
dWVKU1N0cmluZ0BAU0E/QVY/JFBhc3NSZWZQdHJAVU9wYXF1ZUpTU3RyaW5nQEBAV1RGQEBBQlZV
U3RyaW5nQEpTQ0BAQFoKLSAgICA/Y3JlYXRlQFJlZ0V4cEBKU0NAQFNBUEFWMTJAUEFWSlNHbG9i
YWxEYXRhQDJAQUJWVVN0cmluZ0AyQFc0UmVnRXhwRmxhZ3NAMkBAWgogICAgID9jcmVhdGVFbXB0
eVN0cmluZ0BTbWFsbFN0cmluZ3NASlNDQEBBQUVYUEFWSlNHbG9iYWxEYXRhQDJAQFoKICAgICA/
Y3JlYXRlRXJyb3JASlNDQEBZQVBBVkpTT2JqZWN0QDFAUEFWRXhlY1N0YXRlQDFAQUJWVVN0cmlu
Z0AxQEBaCiAgICAgP2NyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uQEpTQ0BAWUFQ
QVZKU09iamVjdEAxQFBBVkpTR2xvYmFsRGF0YUAxQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTczNSw3ICsxNzM1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2Fs
bEZyYQogICAgIEFTU0VSVChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CiAgICAgQVNTRVJU
KG5lZWRzRnVsbFNjb3BlQ2hhaW4oKSk7CiAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnVuY2hlY2tl
ZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uID0gbmV3IChjYWxsRnJhbWUpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7CisgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpKTsKICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYWN0aXZhdGlv
blJlZ2lzdGVyKCkpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICBjYWxsRnJhbWUtPnNldFNj
b3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goYWN0aXZhdGlvbikpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0Niw3ICsyNDYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
UHJvCiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFja1tp
XTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5yZW1vdmVEaXJlY3QoKm1fZ2xvYmFsRGF0YSwgZnVu
Y3Rpb24tPmlkZW50KCkpOyAvLyBOZXdseSBkZWNsYXJlZCBmdW5jdGlvbnMgb3ZlcndyaXRlIGV4
aXN0aW5nIHByb3BlcnRpZXMuCiAKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5ldyAoZXhlYykg
SlNGdW5jdGlvbihleGVjLCBtYWtlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24pLCBzY29wZUNoYWlu
KTsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBtYWtl
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb24pLCBzY29wZUNoYWluKTsKICAgICAgICAgaW50IGluZGV4
ID0gYWRkR2xvYmFsVmFyKGZ1bmN0aW9uLT5pZGVudCgpLCBmYWxzZSk7CiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+cmVnaXN0ZXJBdChpbmRleCkuc2V0KCptX2dsb2JhbERhdGEsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NzgsNyArNDc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBtYWtlRnVuY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgYm9keS0+aWRlbnQoKSwg
Ym9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygp
LCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkp
OworICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCBib2R5LT5pZGVudCgpLCBib2R5LT5zb3VyY2UoKSwgYm9keS0+dXNlc0FyZ3VtZW50cygp
LCBib2R5LT5wYXJhbWV0ZXJzKCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBib2R5LT5saW5lTm8o
KSwgYm9keS0+bGFzdExpbmUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBKU1N0cmluZyogYWRk
U3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24g
OTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBSZWdpc3RlcklEKiBSZWdF
eHBOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiB7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdu
b3JlZFJlc3VsdCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXROZXdSZWdFeHAoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgUmVnRXhwOjpjcmVh
dGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxh
Z3MobV9mbGFncy51c3RyaW5nKCkpKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVn
RXhwKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKCpnZW5l
cmF0b3IuZ2xvYmFsRGF0YSgpLCBtX3BhdHRlcm4udXN0cmluZygpLCByZWdFeHBGbGFncyhtX2Zs
YWdzLnVzdHJpbmcoKSkpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IFRoaXNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMwLDcgKzE2MzAsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGNyZWF0ZVN5bnRheEVycm9yKGNhbGxGcmFtZSwgIkludmFsaWQgZmxhZ3Mgc3VwcGxp
ZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpOwogICAgICAgICAgICAgZ290byB2bV90aHJvdzsK
ICAgICAgICAgfQotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUo
bmV3IChnbG9iYWxEYXRhKSBSZWdFeHBPYmplY3QoY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVj
dHVyZSgpLCByZWdFeHApKTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBK
U1ZhbHVlKFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5y
ZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CiAKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5H
VEgob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTMzNjUs
NyArMzM2NSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgICAgICBORVhUX0lOU1RS
VUNUSU9OKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAg
ICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoY2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5j
aGVja2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFy
Z3VtZW50c1JlZ2lzdGVyKSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgIH0KQEAgLTQ0
OTUsNyArNDQ5NSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAKICAgICAgICAgaW50IGFjdGl2
YXRpb25SZWcgPSB2UENbMV0udS5vcGVyYW5kOwogICAgICAgICBpZiAoIWNhbGxGcmFtZS0+cihh
Y3RpdmF0aW9uUmVnKS5qc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNBY3RpdmF0aW9uKGNhbGxGcmFtZSwgc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkp
OworICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgICAgICAgICBjYWxsRnJh
bWUtPnIoYWN0aXZhdGlvblJlZykgPSBKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgICAgICAgICAg
Y2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKGFj
dGl2YXRpb24pKTsKICAgICAgICAgfQpAQCAtNDYwNSw3ICs0NjA1LDcgQEAgc2tpcF9pZF9jdXN0
b21fc2VsZjoKICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAKICAgICAgICAg
aWYgKCFjYWxsRnJhbWUtPnIoZHN0KS5qc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIEFyZ3VtZW50
cyogYXJndW1lbnRzID0gbmV3IChnbG9iYWxEYXRhKSBBcmd1bWVudHMoY2FsbEZyYW1lKTsKKyAg
ICAgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoZ2xvYmFs
RGF0YSwgY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3Qp
ID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihkc3QpKSA9IEpTVmFsdWUoYXJndW1lbnRzKTsK
ICAgICAgICAgfQpAQCAtNTA2NywxMyArNTA2NywxMyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpy
ZXRyaWV2ZUFyZ3VtZW50cyhDCiAgICAgICAgIGludCByZWFsQXJndW1lbnRzUmVnaXN0ZXIgPSB1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICBp
ZiAoSlNWYWx1ZSBhcmd1bWVudHMgPSBmdW5jdGlvbkNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1
bWVudHNSZWdpc3RlcikuanNWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50czsK
LSAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKG5ldyAoY2FsbEZyYW1lKSBBcmd1
bWVudHMoZnVuY3Rpb25DYWxsRnJhbWUpKTsKKyAgICAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBK
U1ZhbHVlKEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlv
bkNhbGxGcmFtZSkpOwogICAgICAgICBmdW5jdGlvbkNhbGxGcmFtZS0+cihhcmd1bWVudHNSZWdp
c3RlcikgPSBhcmd1bWVudHM7CiAgICAgICAgIGZ1bmN0aW9uQ2FsbEZyYW1lLT5yKHJlYWxBcmd1
bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgICAgIHJldHVybiBhcmd1bWVudHM7CiAg
ICAgfQogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKGZ1bmN0aW9uQ2FsbEZyYW1l
KSBBcmd1bWVudHMoZnVuY3Rpb25DYWxsRnJhbWUpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRz
ID0gQXJndW1lbnRzOjpjcmVhdGUoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVu
Y3Rpb25DYWxsRnJhbWUpOwogICAgIGFyZ3VtZW50cy0+Y29weVJlZ2lzdGVycyhmdW5jdGlvbkNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKICAgICByZXR1cm4gYXJndW1lbnRzOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNjIsNyArMjA2Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfcHVz
aF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBKU0Fj
dGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgSlNBY3Rp
dmF0aW9uKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
KSk7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gSlNBY3RpdmF0aW9uOjpjcmVhdGUo
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUs
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpKTsKICAgICBzdGFja0ZyYW1lLmNhbGxGcmFt
ZS0+c2V0U2NvcGVDaGFpbihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNo
KGFjdGl2YXRpb24pKTsKICAgICByZXR1cm4gYWN0aXZhdGlvbjsKIH0KQEAgLTIxMTAsNyArMjEx
MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBBcmd1bWVudHMoc3RhY2tGcmFtZS5j
YWxsRnJhbWUpOworICAgIEFyZ3VtZW50cyogYXJndW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUo
KnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShhcmd1bWVudHMpKTsKIH0KIApAQCAtMjExOCw3ICsy
MTE4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogewogICAg
IFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAotICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEFyZ3VtZW50cyhzdGFja0ZyYW1l
LmNhbGxGcmFtZSwgQXJndW1lbnRzOjpOb1BhcmFtZXRlcnMpOworICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gQXJndW1lbnRzOjpjcmVhdGUoKnN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgc3RhY2tG
cmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9CiAKQEAgLTMxMjgsNyArMzEyOCw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X3IKICAgICAgICAgVk1f
VEhST1dfRVhDRVBUSU9OKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyAoc3RhY2tGcmFtZS5n
bG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3Jl
YXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfYml0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDI3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJndW1lbnRzIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewogICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBOb1BhcmFtZXRlcnNUeXBl
IHsgTm9QYXJhbWV0ZXJzIH07CisgICAgICAgIAorICAgICAgICBzdGF0aWMgQXJndW1lbnRzKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4o
Z2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBBcmd1bWVudHMqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBOb1BhcmFtZXRlcnNUeXBlIG5vUGFyYW1zKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8QXJndW1lbnRz
PihnbG9iYWxEYXRhLmhlYXApKSBBcmd1bWVudHMoY2FsbEZyYW1lLCBub1BhcmFtcyk7CisgICAg
ICAgIH0KKwogICAgICAgICAvLyBVc2UgYW4gZW51bSBiZWNhdXNlIG90aGVyd2lzZSBnY2MgaW5z
aXN0cyBvbiBkb2luZyBhIG1lbW9yeQogICAgICAgICAvLyByZWFkLgogICAgICAgICBlbnVtIHsg
TWF4QXJndW1lbnRzID0gMHgxMDAwMCB9OwotCi0gICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlw
ZSB7IE5vUGFyYW1ldGVycyB9OwotCisgICAgCisgICAgcHJpdmF0ZToKICAgICAgICAgQXJndW1l
bnRzKENhbGxGcmFtZSopOwogICAgICAgICBBcmd1bWVudHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0
ZXJzVHlwZSk7CisKKyAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfkFyZ3VtZW50cygpOwog
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDExICs3OSwxMSBAQCBzdGF0aWMgaW5saW5l
IEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpCiAgICAgICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0
KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICBpZiAobiAhPSBhcmdzLmF0KDApLnRvTnVtYmVy
KGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50
ZWdlci4iKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIG4sIENyZWF0ZUluaXRpYWxp
emVkKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgbiwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwog
ICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJyYXkgaXMgY29uc3RydWN0ZWQgd2l0aCB0
aGUgYXJndW1lbnRzIGluIGl0Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CisgICAg
cmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBjbGFzcyBBcnJheVByb3RvdHlwZTsKIAogICAgIGNsYXNzIEFycmF5
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAg
IHByaXZhdGU6CiAgICAgICAgIEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBBcnJheVByb3RvdHlwZSopOworICAgICAgICAKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBBcnJheUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
QXJyYXlQcm90b3R5cGUqIGFyclByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFycmF5Q29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBB
cnJheUNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBhcnJQcm90b3R5
cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNyArNTgyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgZGVs
ZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsZXRlRG91YmxlKTsKICAgICB9CiAK
LSAgICBKU0FycmF5KiByZXNPYmogPSBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCksIGRlbGV0
ZUNvdW50LCBDcmVhdGVDb21wYWN0KTsKKyAgICBKU0FycmF5KiByZXNPYmogPSBKU0FycmF5Ojpj
cmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFy
cmF5U3RydWN0dXJlKCksIGRlbGV0ZUNvdW50LCBDcmVhdGVDb21wYWN0KTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHJlc09iajsKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5n
bG9iYWxEYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyBr
KyspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsMTUgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJyYXlQcm90b3R5cGUgOiBwdWJsaWMgSlNBcnJheSB7
Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSopOworICAgIHByaXZhdGU6CisgICAgICAgIEFycmF5UHJvdG90eXBl
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcnJheVByb3RvdHlwZT4oKmV4ZWMtPmhl
YXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwg
Y29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgQm9vbGVhbkNvbnN0cnVjdG9yOjpCb29sZWFu
Q29uc3RydWN0b3IoRQogLy8gRUNNQSAxNS42LjIKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFu
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBCb29sZWFuT2Jq
ZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVh
bk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2Jq
ZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKICAg
ICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJn
cy5hdCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKICAgICByZXR1cm4gb2JqOwogfQpAQCAtNzEsNyAr
NzEsNyBAQCBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0b3I6OmdldENhbGxEYXRhCiAKIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGltbWVkaWF0ZUJvb2xlYW5W
YWx1ZSkKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmpl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1
cmUoKSk7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkp
OwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGltbWVkaWF0
ZUJvb2xlYW5WYWx1ZSk7CiAgICAgcmV0dXJuIG9iajsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5
MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBCb29sZWFuUHJvdG90eXBlOwogCiAgICAgY2xhc3MgQm9vbGVhbkNvbnN0cnVjdG9y
IDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgog
ICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBCb29sZWFuUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEJvb2xlYW5Db25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJvb2xl
YW5Qcm90b3R5cGUqIGJvb2xQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBC
b29sZWFuQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGJvb2xQcm90
b3R5cGUpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5PYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xh
c3MgQm9vbGVhbk9iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewotICAgIHB1YmxpYzoK
LSAgICAgICAgZXhwbGljaXQgQm9vbGVhbk9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJvb2xlYW5PYmplY3QoSlNHbG9iYWxEYXRhJiwg
U3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuT2JqZWN0
KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5P
YmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEJvb2xlYW5PYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNSBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBCb29sZWFuUHJvdG90eXBlIDogcHVibGljIEJvb2xlYW5PYmpl
Y3QgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBCb29sZWFuUHJvdG90eXBl
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBCb29sZWFuUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5Qcm90
b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBuZXcgKGV4ZWMpIERhdGVJbnN0YW5jZShleGVjLCBnbG9iYWxPYmplY3QtPmRh
dGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwogfQogICAgIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aERhdGVDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsK
IAogICAgIGNsYXNzIERhdGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsK
LSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgRGF0ZUNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRGF0ZVByb3RvdHlwZSopOworICAg
ICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBEYXRlQ29uc3RydWN0b3IqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBkYXRlUHJvdG90eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZUNvbnN0cnVjdG9yPigqZXhl
Yy0+aGVhcCgpKSkgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBkYXRlUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlSW5zdGFuY2UuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDIwIEBA
IG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBEYXRlSW5zdGFu
Y2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVk
OgogICAgICAgICBEYXRlSW5zdGFuY2UoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgZG91YmxlKTsK
LSAgICAgICAgZXhwbGljaXQgRGF0ZUluc3RhbmNlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwot
CisgICAgICAgIERhdGVJbnN0YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAg
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgZG91YmxlIGRhdGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+KCpleGVj
LT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlLCBkYXRlKTsKKyAgICAgICAg
fQorICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVJbnN0YW5jZShl
eGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBkb3VibGUgaW50
ZXJuYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbFZhbHVlKCkudW5jaGVja2VkR2V0
TnVtYmVyKCk7IH0KIAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIERh
dGVQcm90b3R5cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNlIHsKLSAgICBwdWJsaWM6CisgICAgcHJp
dmF0ZToKICAgICAgICAgRGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRGF0ZVByb3RvdHlw
ZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxEYXRlUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgRGF0ZVByb3RvdHlw
ZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNDMgKzQyLDQzIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzb3Vy
Y2VVUkxQcm9wZXJ0eU5hbWUKIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVz
c2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1l
c3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9
CiAKIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0
cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGds
b2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmV2YWxFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRl
UmFuZ2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBt
ZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBF
cnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxP
YmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdl
KTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVj
dHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAg
ICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+cmVmZXJl
bmNlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBy
ZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUo
KSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VS
VCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUo
Jmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN5bnRheEVycm9yQ29u
c3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0
LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwog
fQogCiBKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5n
bG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1
Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0
ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1l
c3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsK
KyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUo
KSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCkBAIC0xNjYsMTIgKzE2NiwxOCBAQCBKU09iamVjdCog
dGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4CiB9CiAKIGNsYXNzIFN0cmljdE1vZGVUeXBl
RXJyb3JGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLXB1YmxpYzoKK3ByaXZh
dGU6CiAgICAgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVT
dHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcikKICAgICAgICAgLCBtX21lc3NhZ2UobWVzc2FnZSkK
ICAgICB7CiAgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIFN0cmljdE1vZGVUeXBlRXJyb3JG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCisgICAg
eworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1
bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBtZXNzYWdlKTsKKyAgICB9CiAgICAgCiAgICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0VGhyb3dUeXBlRXJyb3Io
RXhlY1N0YXRlKiBleGVjKQogICAgIHsKQEAgLTIwNSw3ICsyMTEsNyBAQCBBU1NFUlRfQ0xBU1Nf
RklUU19JTl9DRUxMKFN0cmljdE1vZGVUeXBlCiAKIEpTVmFsdWUgY3JlYXRlVHlwZUVycm9yRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+aW50ZXJu
YWxGdW5jdGlvblN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gU3RyaWN0TW9kZVR5
cGVFcnJvckZ1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgbWVzc2FnZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIEVycm9yUHJvdG90eXBlOwogCiAgICAgY2xhc3MgRXJyb3JDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAg
RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IEVycm9yUHJvdG90eXBlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBFcnJvckNv
bnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVyclByb3RvdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9y
Q29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCBlcnJQcm90b3R5cGUpOworICAgICAgICB9CisgICAgICAgIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKENvbnN0cnVjdERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0
YShDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDMyICsy
NSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEVycm9ySW5zdGFuY2U6
OnNfaW5mbyA9IHsgIkVycm9yIiwgJkpTTm9uRmluYWxPYmplY3Q6OnNfaW5mbywgMCwgMCB9Owog
Ci1FcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRh
LCBzdHJ1Y3R1cmUpCitFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKICAgICAsIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlKGZh
bHNlKQogewogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KCpn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyhn
bG9iYWxEYXRhLCAiIiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZygmZ2xvYmFsRGF0YSwgIiIp
LCBEb250RW51bSk7CiB9CiAKLUVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbWVz
c2FnZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSkKK0Vy
cm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKKyAgICA6IEpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogICAgICwgbV9hcHBlbmRTb3VyY2VUb01l
c3NhZ2UoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICBwdXRE
aXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpz
U3RyaW5nKGdsb2JhbERhdGEsIG1lc3NhZ2UpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KGds
b2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoJmds
b2JhbERhdGEsIG1lc3NhZ2UpLCBEb250RW51bSk7CiB9CiAKLUVycm9ySW5zdGFuY2UqIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQorRXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0
YSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UpOworICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPihnbG9iYWxEYXRhLmhlYXApKSBF
cnJvckluc3RhbmNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbWVzc2FnZSk7CiB9CiAKIEVycm9y
SW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiB7CiAgICAgaWYgKG1lc3NhZ2UuaXNVbmRl
ZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRXJyb3JJbnN0YW5jZSgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEVycm9ySW5z
dGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5nKGV4
ZWMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+KCpl
eGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
KTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4oKmV4ZWMtPmhl
YXAoKSkpIEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3Nh
Z2UudG9TdHJpbmcoZXhlYykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2lu
Zm8pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShK
U0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7CisgICAgICAgIHN0YXRp
YyBFcnJvckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3Qg
VVN0cmluZyYpOwogICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIEpTVmFsdWUgbWVzc2FnZSk7CiAKIApAQCAtNDUsOCArNDUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzRXJyb3JJbnN0YW5jZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQg
RXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgZXhwbGlj
aXQgRXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5n
Jik7CisgICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0
dXJlKik7CisgICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwogCiAgICAgICAgIGJvb2wgbV9hcHBlbmRTb3VyY2VU
b01lc3NhZ2U7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIGNvbnN0IENsYXNzSW5mbyBFcnJvclByb3RvdHlwZTo6c19pbmZvID0KIEFT
U0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRXJyb3JQcm90b3R5cGUpOwogCiBFcnJvclByb3RvdHlw
ZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICA6IEVycm9ySW5zdGFuY2UoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDogRXJyb3JJbnN0YW5jZShleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSkKIHsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIkVycm9yIiksIERvbnRFbnVtKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE9i
amVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIEVycm9yUHJvdG90eXBlIDogcHVibGljIEVycm9y
SW5zdGFuY2UgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBFcnJvclByb3Rv
dHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJyb3JQcm90
b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5j
cHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxNiBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJl
LmdldCgpKQorICAgIHsKKyAgICB9CisKIHB1YmxpYzoKLSAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlv
bkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2Jq
ZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yU3Ry
dWN0dXJlLmdldCgpKQorICAgIHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERhdGEuaGVhcCkp
IEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEludGVycnVwdGVk
OyB9CkBAIC01NSwxNCArNjEsMjAgQEAgcHVibGljOgogCiBKU09iamVjdCogY3JlYXRlSW50ZXJy
dXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFs
RGF0YSk7CisgICAgcmV0dXJuIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSk7CiB9CiAKIGNsYXNzIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9y
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGds
b2JhbERhdGEsIGdsb2JhbERhdGEudGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3RydWN0dXJlLmdl
dCgpKQorICAgIHsKKyAgICB9CisKIHB1YmxpYzoKLSAgICBUZXJtaW5hdGVkRXhlY3V0aW9uRXJy
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qo
Kmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVy
ZS5nZXQoKSkKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFwKSkgVGVybWlu
YXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZpcnR1YWwgQ29t
cGxUeXBlIGV4Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBUZXJtaW5hdGVkOyB9CkBAIC03
Miw3ICs4NCw3IEBAIHB1YmxpYzoKIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRp
b25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJldHVybiBuZXcg
KGdsb2JhbERhdGEpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRhKTsKKyAgICBy
ZXR1cm4gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKmdsb2JhbERhdGEpOwogfQog
CiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw4IEBAIFByb2dyYW1FeGVjdXRhYmxlOjp+
UHJvZ3JhbUV4ZWN1dGFibGUoKQogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25FeGVjdXRhYmxl
OjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19p
bmZvLCAwLCAwIH07CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0
ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGluU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50
IGxhc3RMaW5lKQotICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLT5mdW5jdGlvbkV4
ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEsIHNvdXJjZSwgaW5TdHJpY3RDb250
ZXh0KQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFt
ZXRlcnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUp
CisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rpb25FeGVjdXRhYmxlU3Ry
dWN0dXJlLmdldCgpLCBnbG9iYWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKICAgICAs
IG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMoMCkKICAgICAsIG1fZm9yY2VVc2VzQXJndW1lbnRzKGZv
cmNlVXNlc0FyZ3VtZW50cykKICAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQpAQCAtNDgx
LDcgKzQ4MSw3IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAg
ICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5ID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJOb2RlKj4oZnVu
Y0V4cHIpLT5ib2R5KCk7CiAgICAgQVNTRVJUKGJvZHkpOwogCi0gICAgcmV0dXJuIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uTmFtZSwgYm9k
eS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBi
b2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwor
ICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGZ1bmN0aW9uTmFtZSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9k
eS0+cGFyYW1ldGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOwogfQogCiBVU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1T
dHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IE5VTV9QQVJB
TUVURVJTX0lTX0hPU1QgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IE5VTV9QQVJBTUVU
RVJTX05PVF9DT01QSUxFRCA9IC0xOwotICAgIAotICAgIHB1YmxpYzoKKworICAgIHByb3RlY3Rl
ZDoKICAgICAgICAgRXhlY3V0YWJsZUJhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50IG51bVBhcmFtZXRlcnMpCiAgICAgICAgICAgICA6IEpTQ2Vs
bChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAsIG1fbnVtUGFyYW1ldGVyc0Zv
ckNhbGwobnVtUGFyYW1ldGVycykKQEAgLTY0LDYgKzY0LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgZmluYWxpemVyLmxlYWtIYW5kbGUoKTsKICNlbmRpZgogICAgICAgICB9Cisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEV4ZWN1dGFibGVCYXNlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50IG51
bVBhcmFtZXRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxFeGVjdXRhYmxlQmFzZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXhlY3V0YWJsZUJhc2UoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBudW1QYXJhbWV0ZXJzKTsKKyAgICAgICAgfQogCiAgICAgICAg
IGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25zdAogICAgICAgICB7CkBAIC0xNjYsMTMgKzE3Miwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjYWxs
VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29u
c3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoIWNhbGxUaHVuaykKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xv
YmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBKSVRDb2RlKCksIGZ1bmN0aW9u
LCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9i
YWxEYXRhKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlv
bihjYWxsVGh1bmspLCBmdW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRo
dW5rKSwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxl
KGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29uc3RydWN0b3Ip
OworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+
KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZTo6
SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24o
Y29uc3RydWN0VGh1bmspLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KICNlbHNlCiAgICAgICAg
IHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBOYXRpdmVFeGVj
dXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFw
KSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOwog
ICAgICAgICB9CiAjZW5kaWYKIApAQCAtMjEzLDEzICsyMTksMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFibGVCYXNlIHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBi
b29sIGlzSW5TdHJpY3RDb250ZXh0KQotICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZSgqZ2xv
YmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQpCisgICAgICAg
IFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0
KQorICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIE5V
TV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNl
KQogICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKGlzSW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9k
ZUZlYXR1cmUgOiAwKQogICAgICAgICB7CiAjaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykK
LSAgICAgICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9iYWxEYXRhLT5pbnRl
cnByZXRlci0+c2FtcGxlcigpKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nVG9vbCogc2FtcGxl
ciA9IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkKICAgICAgICAgICAgICAgICBz
YW1wbGVyLT5ub3RpZnlPZlNjb3BlKCpnbG9iYWxEYXRhLCB0aGlzKTsKICNlbHNlCiAgICAgICAg
ICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CkBAIC0yOTAsNyArMjk2LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2V2YWxDb2RlQmxvY2s7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkgeyBy
ZXR1cm4gbmV3IChleGVjKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RD
b250ZXh0KTsgfQorICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4
dCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFdmFs
RXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEV2YWxFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSwg
aXNJblN0cmljdENvbnRleHQpOyAKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZSgpCkBAIC0zMTksNyArMzI4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUHJvZ3JhbUV4ZWN1dGFibGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvZ3JhbUV4ZWN1dGFibGUoZXhl
Yywgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxQcm9ncmFt
RXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJj
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB+UHJvZ3JhbUV4ZWN1dGFibGUoKTsKQEAgLTM3Miwx
NyArMzgxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGlj
IEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3Vt
ZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5TdHJpY3RDb250
ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1lLCBzb3VyY2Us
IGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQsIGZpcnN0
TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVj
LCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmlj
dENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKLSAgICAgICAgc3Rh
dGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZv
cmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlz
SW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisgICAgICAgIHN0
YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBm
b3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBp
c0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBGdW5jdGlvbkV4ZWN1dGFibGUo
Z2xvYmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMs
IGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVh
cCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNl
c0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFz
dExpbmUpOwogICAgICAgICB9CiAKICAgICAgICAgSlNGdW5jdGlvbiogbWFrZShFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIHRoaXMsIHNjb3BlQ2hhaW4pOwor
ICAgICAgICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBzY29wZUNo
YWluKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmV0dXJucyBlaXRoZXIgY2Fs
bCBvciBjb25zdHJ1Y3QgYnl0ZWNvZGUuIFRoaXMgY2FuIGJlIGFwcHJvcHJpYXRlCkBAIC00Nzks
NyArNDg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpT
R2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xv
YmFsRGF0YSYsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29s
IGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCwgaW50IGZpcnN0
TGluZSwgaW50IGxhc3RMaW5lKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGZvcmNl
VXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCwgaW50IGZpcnN0TGluZSwg
aW50IGxhc3RMaW5lKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5h
bChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBKU09iamVjdCogY29u
c3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBuZXcgKGV4ZWMpIFNjb3BlQ2hhaW5Ob2RlKDAsIGdsb2JhbE9iamVjdCwgJmdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotICAgIHJldHVybiBuZXcg
KGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4pOworICAgIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZShleGVjLCAwLCBn
bG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmdsb2JhbFRoaXNW
YWx1ZSgpKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1bmN0aW9uLCBz
Y29wZUNoYWluKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENvbnN0cnVjdG9y
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgs
MTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5cGU7CiAKICAg
ICBjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewot
ICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBGdW5jdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRnVuY3Rpb25Qcm90b3R5cGUq
KTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkNvbnN0cnVjdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90b3R5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkNv
bnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgRnVuY3Rpb25Db25zdHJ1Y3RvcihleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgZnVuY1Byb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENv
bnN0cnVjdERhdGEmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSwxMCArNDUsMTAgQEAgRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBl
KEV4ZQogCiB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3BlcnRpZXMoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIGZ1
bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiog
YXBwbHlGdW5jdGlvbikKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9u
U3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1bmN0aW9uUHJv
dG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgKmFwcGx5RnVuY3Rpb24gPSBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMiwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51
bSk7CisgICAgKmFwcGx5RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5
LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMsICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7Ci0gICAgKmNhbGxGdW5j
dGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9u
U3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1
bmNDYWxsKTsKKyAgICAqY2FsbEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
YWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91
dFRyYW5zaXRpb24oZXhlYywgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDE3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBGdW5jdGlvblBy
b3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwotICAgICAg
ICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24s
IEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUHJvdG90eXBlPigqZXhl
Yy0+aGVhcCgpKSkgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVy
dGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1
Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0
aW9uKTsKKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG8pCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBwcm90bywgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZz
X2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAvLyBmb3IgYSBwcm9wZXJ0eS4KICAgICBjbGFzcyBHZXR0ZXJTZXR0ZXIg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICBwdWJsaWM6
CisKKyAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIEdldHRlclNldHRlcihFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmds
b2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgIHsKICAgICAg
ICAgfQogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgR2V0dGVyU2V0dGVyKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8R2V0dGVyU2V0dGVyPigqZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0dGVyKGV4ZWMp
OworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyByZXR1cm4gbV9n
ZXR0ZXIuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJ
VmFsdWVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw2ICs0MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIAorICAgICAgICBzdGF0
aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNB
UElWYWx1ZVdyYXBwZXI+KCpleGVjLT5oZWFwKCkpKSBKU0FQSVZhbHVlV3JhcHBlcihleGVjLCB2
YWx1ZSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTQVBJVmFsdWVXcmFw
cGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTU2LDcgKzYxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gbmV3IChl
eGVjKSBKU0FQSVZhbHVlV3JhcHBlcihleGVjLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0FQ
SVZhbHVlV3JhcHBlcjo6Y3JlYXRlKGV4ZWMsIHZhbHVlKTsKICAgICB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBK
U1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4CiAgICAgICAgIHJldHVybiBh
cmd1bWVudHM7CiAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9kaWZpZWRBcmd1
bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAKLSAgICBKU1ZhbHVlIGFyZ3VtZW50
cyA9IEpTVmFsdWUobmV3IChjYWxsRnJhbWUpIEFyZ3VtZW50cyhjYWxsRnJhbWUpKTsKKyAgICBK
U1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGNhbGxGcmFtZSkpOwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihhcmd1
bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHJl
YWxBcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsOSArNDAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVnaXN0
ZXI7CiAgICAgCiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDogcHVibGljIEpTVmFyaWFibGVPYmpl
Y3QgeworICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNl
OwotICAgIHB1YmxpYzoKICAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIEZ1bmN0aW9u
RXhlY3V0YWJsZSopOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTQWN0aXZh
dGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KGdsb2JhbERhdGEuaGVhcCkp
IEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIGZ1bmNFeGVjKTsKKyAgICAgICAgfQorCiAgICAgICAg
IHZpcnR1YWwgfkpTQWN0aXZhdGlvbigpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENo
aWxkcmVuKFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTQgKzYwLDMwIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBXYWxrZXI7CiAKLSAgICBwdWJsaWM6Ci0gICAgICAgIEpTQXJy
YXkoVlB0clN0ZWFsaW5nSGFja1R5cGUpOwotCisgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBs
aWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAgICBKU0FycmF5
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgsIEFycmF5
Q3JlYXRpb25Nb2RlKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
LCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKTsKKyAgICAgICAgCisgICAgcHVibGljOgor
ICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsKICAgICAgICAgdmlydHVhbCB+
SlNBcnJheSgpOwogCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEuaGVhcCkpIEpT
QXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9k
ZSBjcmVhdGVNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIGluaXRpYWxMZW5ndGgsIGNyZWF0ZU1vZGUpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1ZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FycmF5PihnbG9i
YWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW5pdGlhbFZhbHVl
cyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjZWxsLT5+SlNDZWxsKCk7CiAgICAgfQogCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBoZWFwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGhlYXAuYWxsb2NhdGUoc2l6ZW9mKFQpKTsKKyAgICB9CisgICAg
ICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NlbGxfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDEwICs0OCwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBl
ZGVmIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOwogCi0gICAgcHVibGljOgogICAgICAg
ICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgaW50
IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgSlNG
dW5jdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludCBsZW5n
dGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVFeGVjdXRhYmxlKik7CiAgICAgICAgIEpTRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgU2NvcGVDaGFpbk5vZGUqKTsK
KyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBOYXRpdmVG
dW5jdGlvbiBuYXRpdmVGdW5jKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQsIG5hdGl2ZUZ1bmMpOworICAg
ICAgICB9CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50
IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2
ZUV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxK
U0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgbGVuZ3RoLCBpZGVudCwgbmF0aXZlRXhlYyk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZnVuY0V4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMt
PmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywgZnVuY0V4ZWMsIHNjb3BlQ2hhaW4pOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIH5KU0Z1bmN0aW9uKCk7CiAKICAgICAgICAg
Y29uc3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChK
U09iamVjdCogdGhpcwogICAgIHN0cnVjdHVyZSgpLT5kaXNhYmxlU3BlY2lmaWNGdW5jdGlvblRy
YWNraW5nKCk7CiAKICAgICBtX2dsb2JhbERhdGEgPSBIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxE
YXRhKCk7Ci0gICAgbV9nbG9iYWxTY29wZUNoYWluLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBu
ZXcgKG1fZ2xvYmFsRGF0YS5nZXQoKSkgU2NvcGVDaGFpbk5vZGUoMCwgdGhpcywgbV9nbG9iYWxE
YXRhLmdldCgpLCB0aGlzLCB0aGlzVmFsdWUpKTsKKyAgICBtX2dsb2JhbFNjb3BlQ2hhaW4uc2V0
KCptX2dsb2JhbERhdGEsIHRoaXMsIFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUoMCwgdGhpcywgbV9n
bG9iYWxEYXRhLmdldCgpLCB0aGlzLCB0aGlzVmFsdWUpKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0
OjpnbG9iYWxFeGVjKCktPmluaXQoMCwgMCwgbV9nbG9iYWxTY29wZUNoYWluLmdldCgpLCBDYWxs
RnJhbWU6Om5vQ2FsbGVyKCksIDAsIDApOwogCkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKLSAgICBtX2Z1bmN0aW9uUHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRnVuY3Rpb25Qcm90b3R5
cGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBz
ZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KKyAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVh
dGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBz
ZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBtX2Z1bmN0aW9uU3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAg
ICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlv
biA9IDA7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNW
YWx1ZSBwcm90bwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPmFkZEZ1bmN0aW9uUHJvcGVydGll
cyhleGVjLCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAmY2FsbEZ1bmN0aW9uLCAm
YXBwbHlGdW5jdGlvbik7CiAgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgY2FsbEZ1bmN0aW9uKTsKICAgICBtX2FwcGx5RnVuY3Rpb24uc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgYXBwbHlGdW5jdGlvbik7Ci0gICAgbV9vYmplY3RQcm90b3R5cGUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBPYmplY3RQcm90b3R5cGUo
ZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBqc051bGwoKSkpKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBPYmpl
Y3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgp
KSkpOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKTsKIAogICAgIG1fZW1wdHlPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUtPmluaGVyaXRvcklEKGV4ZWMtPmdsb2JhbERhdGEo
KSkpOwpAQCAtMjA2LDU0ICsyMDYsNTQgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNW
YWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9j
YWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0Nh
bGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX2Fy
cmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgQXJy
YXlQcm90b3R5cGUodGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5n
bG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fYXJyYXlQcm90
b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9hcnJheVN0cnVjdHVy
ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9yZWdF
eHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVn
RXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Fy
cmF5UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFN0cmluZ1Byb3RvdHlwZShleGVjLCB0aGlz
LCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fc3RyaW5nUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaW5nT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9i
b29sZWFuUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykg
Qm9vbGVhblByb3RvdHlwZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQm9vbGVh
blByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwog
ICAgIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Jv
b2xlYW5Qcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fbnVtYmVyUHJvdG90eXBlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTnVtYmVyUHJvdG90eXBlKGV4ZWMsIHRo
aXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9udW1iZXJQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX251bWJlck9iamVjdFN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBt
X2RhdGVQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBE
YXRlUHJvdG90eXBlKGV4ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fZGF0
ZVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlUHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9kYXRlU3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVJbnN0YW5jZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKSk7CiAKLSAg
ICBSZWdFeHAqIGVtcHR5UmVnZXggPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCAiIiwgTm9GbGFncyk7CisgICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhwOjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIiwgTm9GbGFncyk7CiAgICAgCi0gICAgbV9yZWdFeHBQcm90
b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBSZWdFeHBQcm90
b3R5cGUoZXhlYywgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKKyAg
ICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSwgZW1wdHlS
ZWdleCkpOwogICAgIG1fcmVnRXhwU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIFJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9y
ZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbWV0aG9kQ2FsbER1bW15LnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpKTsKIAotICAg
IEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgRXJyb3JQcm90b3R5
cGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9i
YWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgRXJyb3JQcm90b3R5cGUq
IGVycm9yUHJvdG90eXBlID0gRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBFcnJv
clByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2Vycm9yU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIGVycm9yUHJvdG90eXBlKSk7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMKIAotICAgIEpT
Q2VsbCogb2JqZWN0Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0cnVjdG9yKGV4
ZWMsIHRoaXMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpOwotICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgRnVuY3Rp
b25Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0g
bmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIHN0cmluZ0NvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBTdHJpbmdD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwq
IGJvb2xlYW5Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQm9vbGVhbkNvbnN0cnVjdG9yKGV4ZWMs
IHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3RvdHlwZS5nZXQo
KSk7Ci0gICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTnVtYmVyQ29u
c3RydWN0b3IoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX251bWJlclBy
b3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBkYXRlQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMp
IERhdGVDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Rh
dGVQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogb2JqZWN0Q29uc3RydWN0b3IgPSBPYmpl
Y3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1
Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBGdW5jdGlvbkNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxs
KiBhcnJheUNvbnN0cnVjdG9yID0gQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKKyAgICBK
U0NlbGwqIHN0cmluZ0NvbnN0cnVjdG9yID0gU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgp
KTsKKyAgICBKU0NlbGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IEJvb2xlYW5Db25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblBy
b3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IE51bWJlckNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X251bWJlclByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBkYXRlQ29uc3RydWN0b3IgPSBE
YXRlQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOwogCi0gICAgbV9yZWdFeHBDb25zdHJ1Y3Rvci5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFJlZ0V4cENvbnN0cnVjdG9yKGV4
ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgUmVnRXhwQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9lcnJvckNvbnN0
cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRXJyb3JDb25z
dHJ1Y3RvcihleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJyb3JQcm90b3R5
cGUpKTsKKyAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBlcnJvclByb3RvdHlwZSkpOwogCiAgICAgU3RydWN0dXJlKiBuYXRpdmVFcnJvclBy
b3RvdHlwZVN0cnVjdHVyZSA9IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJvclByb3RvdHlwZSk7CiAgICAgU3RydWN0dXJlKiBuYXRp
dmVFcnJvclN0cnVjdHVyZSA9IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwotICAgIG1f
ZXZhbEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChl
eGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0
dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIpKTsKLSAgICBt
X3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcg
KGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1
Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIpKTsKLSAg
ICBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJlZmVyZW5jZUVy
cm9yIikpOwotICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywg
bmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiU3lu
dGF4RXJyb3IiKSk7Ci0gICAgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhp
cywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAi
VHlwZUVycm9yIikpOwotICAgIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhp
cywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAi
VVJJRXJyb3IiKSk7CisgICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFs
RGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywg
bmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiRXZh
bEVycm9yIikpOworICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBu
YXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUsICJSYW5n
ZUVycm9yIikpOworICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhp
cywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAi
UmVmZXJlbmNlRXJyb3IiKSk7CisgICAgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9yLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1
cmUsICJTeW50YXhFcnJvciIpKTsKKyAgICBtX3R5cGVFcnJvckNvbnN0cnVjdG9yLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1
cmUsICJUeXBlRXJyb3IiKSk7CisgICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0
aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUs
ICJVUklFcnJvciIpKTsKIAogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwogICAgIG1fZnVu
Y3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9u
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKQEAgLTI4MSwxNSArMjgxLDE1IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiVHlwZUVy
cm9yIiksIG1fdHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRp
ZmllcihleGVjLCAiVVJJRXJyb3IiKSwgbV9VUklFcnJvckNvbnN0cnVjdG9yLmdldCgpLCBEb250
RW51bSk7CiAKLSAgICBtX2V2YWxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgdGhpcywgbV9mdW5jdGlvblN0cnVjdHVyZS5n
ZXQoKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGdsb2JhbEZ1bmNFdmFsKSk7Cisg
ICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNGdW5jdGlv
bjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOwogICAgIHB1dERpcmVjdEZ1
bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbV9ldmFsRnVuY3Rpb24uZ2V0KCksIERvbnRF
bnVtKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7Ci0gICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiksIG5ldyAoZXhl
YykgTWF0aE9iamVjdChleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSB8IERv
bnREZWxldGUpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAi
TWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwg
RG9udEVudW0gfCBEb250RGVsZXRlKSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50
aWZpZXIoZXhlYywgIk5hTiIpLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJJbmZp
bml0eSIpLCBqc051bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkp
LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3Bl
cnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJ1bmRlZmluZWQiKSwganNVbmRlZmluZWQoKSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8oSWRlbnRpZmllcihleGVjLCAiSlNPTiIpLCBuZXcgKGV4ZWMpIEpTT05PYmplY3QodGhpcywg
SlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKQorICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSlNPTiIpLCBKU09OT2JqZWN0OjpjcmVhdGUo
ZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKQogICAg
IH07CiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJSQVlfTEVOR1RI
KHN0YXRpY0dsb2JhbHMpKTsKIApAQCAtMzk1LDExICszOTUsNiBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpyZXNpemVSZWdpc3RlcnMoc2l6CiAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVn
aXN0ZXJBcnJheS5yZWxlYXNlKCksIG5ld1NpemUpOwogfQogCi12b2lkKiBKU0dsb2JhbE9iamVj
dDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi17
Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGUoc2l6ZSk7Ci19Ci0KIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2xvYmFsUHJvcGVydHlJbmZvKiBnbG9i
YWxzLCBpbnQgY291bnQpCiB7CiAgICAgcmVzaXplUmVnaXN0ZXJzKHN5bWJvbFRhYmxlKCkuc2l6
ZSgpICsgY291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw4ICsxMjIs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2V2YWxFbmFibGVkOwogCiAgICAg
cHVibGljOgotICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBKU0dsb2JhbERhdGEq
KTsKLQogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICAgICAgOiBKU1ZhcmlhYmxlT2Jq
ZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUsIDApCiAgICAgICAgICAg
ICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKQEAgLTI4Nyw4ICsyODUsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlIHByb3RvdHlwZSk7CiAKICAgICAgICAg
dm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NP
d25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5LCBzaXplX3Qg
Y291bnQpOwotCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpOyAvLyBjYW4gb25s
eSBiZSBhbGxvY2F0ZWQgd2l0aCBKU0dsb2JhbERhdGEKICAgICB9OwogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTVmFsdWUpOwpAQCAtMzc4LDcgKzM3NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpOwogICAg
IH0KICAgICAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3Rh
dGUqIGV4ZWMpCkBAIC0zODgsNyArMzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxp
bmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJbml0aWFsaXpl
ZCk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgsIENyZWF0ZUluaXRp
YWxpemVkKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCkBAIC00MDAsNyArMzk2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciB2YWx1ZXM7CiAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2luZ2xlSXRlbVZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUo
KSwgdmFsdWVzKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXko
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNpbmdsZUl0ZW1WYWx1ZSkKQEAgLTQxMCw3ICs0MDYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEFy
Z0xpc3QmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJyYXko
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVl
cyk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgdmFsdWVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90
QW5PYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywxNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAvLyBpbiBjZXJ0YWluIFNxdWlycmVsRmlzaCBieXRlY29kZXMg
LS0gZWZmZWN0aXZlbHkgaXQganVzdCBzaWxlbnRseSBjb25zdW1lcwogICAgIC8vIGFueSBvcGVy
YXRpb25zIHBlcmZvcm1lZCBvbiB0aGUgcmVzdWx0IG9mIGEgZmFpbGVkIHRvT2JqZWN0IGNhbGwu
CiAgICAgY2xhc3MgSlNOb3RBbk9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKLSAg
ICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb3RBbk9iamVjdChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBleGVjLT5nbG9iYWxEYXRhKCkubm90QW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAg
IHsKICAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU05v
dEFuT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNOb3RBbk9iamVjdD4oKmV4ZWMtPmhlYXAoKSkp
IEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT05PYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAgICAgY2xhc3MgSlNPTk9i
amVjdCA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAg
ICBwcml2YXRlOgogICAgICAgICBKU09OT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU09OT2JqZWN0KiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PEpTT05PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU09OT2JqZWN0KGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5
cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9i
YWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyAr
MzIyLDcgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSogZQogCiAgICAg
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90OwotICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gbmV3IChl
eGVjKSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0ZXJTZXR0ZXIg
PSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICBwdXREaXJlY3RJbnRlcm5hbChnbG9i
YWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cmlidXRlcyB8IEdldHRlciwg
dHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFuZ2Ugb3VyIFN0cnVjdHVy
ZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHZvaWQg
SlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUqIGUKICAgICB9CiAKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhl
YykgR2V0dGVyU2V0dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0g
R2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cmlidXRlcyB8IFNl
dHRlciwgdHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFuZ2Ugb3VyIFN0
cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpAQCAtNjMzLDcgKzYzMyw3IEBA
IHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKIHsKICAgICBpZiAoZGVz
Y3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkgfHwgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlw
dG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigpICYm
IG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAgICAgICAgR2V0
dGVyU2V0dGVyKiBhY2Nlc3NvciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOworICAg
ICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4
ZWMpOwogICAgICAgICAgICAgaWYgKG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpIHsKICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzIHw9IEdldHRlcjsKICAgICAgICAgICAgICAgICBhY2Nlc3Nvci0+
c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3Qob2xkRGVzY3JpcHRvci5nZXR0
ZXIoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBDT01QSUxFX0FTU0VSVCgoSlNG
aW5hbE9iamVjdF9pbmxpbmVTdG9yCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgSlNGaW5h
bE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRmluYWxPYmplY3QoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU0ZpbmFsT2JqZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
VmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciogSlNQcm9wZXJ0eU5hbWVJdAogICAgICAgICAhby0+c3RydWN0dXJlKCktPmhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMoKSAmJiAhby0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkgJiYKICAgICAgICAgIW8tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgbnVtQ2FjaGVhYmxlU2xvdHMgPSBvLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotCi0gICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
cioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IG5ldyAoZXhlYykgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2FjaGVhYmxlU2xvdHMpOworICAg
IAorICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3IgPSBu
ZXcgKGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPigqZXhlYy0+aGVhcCgpKSkg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2Fj
aGVhYmxlU2xvdHMpOwogCiAgICAgaWYgKG8tPnN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkK
ICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKyAgICAgICAgc3RhdGlj
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhLCBzaXplX3QgbnVtQ2FjaGVhYmxl
U2xvdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpT
UHJvcGVydHlOYW1lSXRlcmF0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgbnVtQ2FjaGVhYmxlU2xvdCk7CisgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAgQEAgSlNTdHJpbmcqIEpTU3RyaW5n
OjpzdWJzdHJpbmdGcm9tUm9wZShFeAogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgfQog
ICAgIGlmIChzdWJzdHJpbmdGaWJlckNvdW50ID09IDEpCi0gICAgICAgIHJldHVybiBuZXcgKGds
b2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSk7CisgICAg
ICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNb
MF0pOwogICAgIGlmIChzdWJzdHJpbmdGaWJlckNvdW50ID09IDIpCi0gICAgICAgIHJldHVybiBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwg
c3Vic3RyaW5nRmliZXJzWzFdKTsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSwgc3Vi
c3RyaW5nRmliZXJzWzJdKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdKTsKKyAgICByZXR1
cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJzWzBdLCBzdWJz
dHJpbmdGaWJlcnNbMV0sIHN1YnN0cmluZ0ZpYmVyc1syXSk7CiB9CiAKIEpTVmFsdWUgSlNTdHJp
bmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjLCBVQ2hhciBjaGFyYWN0ZXIsIGNv
bnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50KQpAQCAtMjU0LDcgKzI1NCw3IEBAIEpTVmFsdWUgSlNT
dHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1MKICAgICB9CiAKICAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHJldHVybiBKU1ZhbHVlKG5l
dyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgYnVpbGRlci5yZWxlYXNlKCkpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZShKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBidWlsZGVy
LnJlbGVhc2UoKSkpOwogfQogCiBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4U2xvd0Nhc2Uo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQpAQCAtMjk4LDcgKzI5OCw3IEBAIFVTdHJpbmcg
SlNTdHJpbmc6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXgKIAogaW5saW5lIFN0cmluZ09iamVjdCog
U3RyaW5nT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0
cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKCksIHN0cmluZyk7CisgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmlu
Z09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7CiB9CiAKIEpT
T2JqZWN0KiBKU1N0cmluZzo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCShyZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw5ICsxODAsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgICAgICBWZWN0b3I8V29ya0l0ZW0sIDE2PiBtX3dv
cmtRdWV1ZTsKICAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGVudW0gSGFzT3RoZXJPd25l
clR5cGUgeyBIYXNPdGhlck93bmVyIH07CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBKU1N0cmlu
ZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQotICAgICAg
ICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkKKyAgICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5FIEpTU3RyaW5nKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUpCisgICAgICAgICAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAg
ICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgwKQpAQCAtMTkxLDI1ICsxOTQs
MjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBv
cnRFeHRyYU1lbW9yeUNvc3QodmFsdWUuaW1wbCgpLT5jb3N0KCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgZW51bSBIYXNPdGhlck93bmVyVHlwZSB7IEhhc090aGVyT3duZXIgfTsKLSAgICAgICAg
SlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSwg
SGFzT3RoZXJPd25lclR5cGUpCi0gICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNPdGhlck93bmVyVHlw
ZSkKKyAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX2xlbmd0aCh2YWx1ZS5sZW5ndGgoKSkKICAg
ICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgICAgICwgbV9maWJlckNvdW50KDAp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAgICAg
ICAgIH0KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkKLSAgICAgICAgICAgIDog
SlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgICAgICA6IEpTQ2VsbChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAg
ICwgbV9sZW5ndGgodmFsdWUtPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVl
KQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoMCkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgfQotICAgICAgICBKU1N0cmluZyhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8Um9wZUltcGw+IHJvcGUpCi0gICAg
ICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJl
LmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NS
ZWZQdHI8Um9wZUltcGw+IHJvcGUpCisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgo
cm9wZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgxKQogICAgICAgICB7
CkBAIC0yMTcsOCArMjE5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAg
Ly8gVGhpcyBjb25zdHJ1Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0
aW5nIHMxICYgczIuCiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGgg
ZmliZXJDb3VudCA8PSAzLgotICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQotICAg
ICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgICAg
IDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQog
ICAgICAgICAgICAgLCBtX2xlbmd0aChzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkpCiAgICAg
ICAgICAgICAsIG1fZmliZXJDb3VudChmaWJlckNvdW50KQogICAgICAgICB7CkBAIC0yMzAsOCAr
MjMyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgLy8gVGhpcyBjb25z
dHJ1Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHMxICYgczIu
CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggZmliZXJDb3VudCA8
PSAzLgotICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGZpYmVyQ291bnQsIEpTU3RyaW5nKiBzMSwgY29uc3QgVVN0cmluZyYgdTIpCi0gICAgICAgICAg
ICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgp
KQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZp
YmVyQ291bnQsIEpTU3RyaW5nKiBzMSwgY29uc3QgVVN0cmluZyYgdTIpCisgICAgICAgICAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAg
ICAgICAgICAgICwgbV9sZW5ndGgoczEtPmxlbmd0aCgpICsgdTIubGVuZ3RoKCkpCiAgICAgICAg
ICAgICAsIG1fZmliZXJDb3VudChmaWJlckNvdW50KQogICAgICAgICB7CkBAIC0yNDMsOCArMjQ1
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgLy8gVGhpcyBjb25zdHJ1
Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHMxICYgczIuCiAg
ICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGggZmliZXJDb3VudCA8PSAz
LgotICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZp
YmVyQ291bnQsIGNvbnN0IFVTdHJpbmcmIHUxLCBKU1N0cmluZyogczIpCi0gICAgICAgICAgICA6
IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQor
ICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVy
Q291bnQsIGNvbnN0IFVTdHJpbmcmIHUxLCBKU1N0cmluZyogczIpCisgICAgICAgICAgICA6IEpT
Q2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAg
ICAgICAgICwgbV9sZW5ndGgodTEubGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkpCiAgICAgICAgICAg
ICAsIG1fZmliZXJDb3VudChmaWJlckNvdW50KQogICAgICAgICB7CkBAIC0yNzEsOCArMjczLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGNvbnN0cnVjdHMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgdTEgJiB1Mi4KLSAg
ICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1
MSwgY29uc3QgVVN0cmluZyYgdTIpCi0gICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1
MikKKyAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3Ry
dWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX2xlbmd0aCh1MS5sZW5ndGgoKSArIHUyLmxl
bmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoMikKICAgICAgICAgewpAQCAtMjgz
LDggKzI4NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhp
cyBjb25zdHJ1Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmluZyBieSBjb25jYXRlbmF0aW5nIHUx
LCB1MiAmIHUzLgotICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCi0g
ICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCisg
ICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodTEubGVuZ3RoKCkgKyB1Mi5sZW5ndGgo
KSArIHUzLmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoc19tYXhJbnRlcm5h
bFJvcGVMZW5ndGgpCiAgICAgICAgIHsKQEAgLTI5NSw2ICsyOTcsNDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPD0gc19tYXhJbnRlcm5hbFJvcGVMZW5ndGgp
OwogICAgICAgICB9CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xv
YmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
Y29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlIGhhc090aGVyT3duZXJUeXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJp
bmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlLCBoYXNPdGhl
ck93bmVyVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlLCBI
YXNPdGhlck93bmVyVHlwZSBoYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBK
U1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3RoZXJPd25lclR5cGUpOworICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgUGFzc1JlZlB0cjxSb3BlSW1wbD4gcm9wZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCByb3BlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIEpT
U3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGds
b2JhbERhdGEsIGZpYmVyQ291bnQsIHMxLCBzMik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJl
ckNvdW50LCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVh
cCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHMxLCB1Mik7CisgICAgICAgIH0K
KyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+
KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHUxLCBz
Mik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBKU1ZhbHVlIHYzKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCpleGVjLT5oZWFw
KCkpKSBKU1N0cmluZyhleGVjLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0
aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJp
bmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0
IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCB1MSwgdTIsIHUzKTsKKyAgICAgICAgfQorCiAgICAgICAgIH5KU1N0
cmluZygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2cHRyKCkgPT0gSlNHbG9iYWxE
YXRhOjpqc1N0cmluZ1ZQdHIpOwpAQCAtNDQyLDcgKzQ4Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAg
ICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoZ2xvYmFsRGF0YSwgYyk7Ci0gICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwg
bmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkpOwor
ICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmds
b2JhbERhdGEsIFVTdHJpbmcoJmMsIDEpKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5n
KiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJp
bmcmIHMsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTQ1Miw3ICs0OTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVycygpW29mZnNldF07CiAgICAgICAgIGlm
IChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMp
OwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCks
IG9mZnNldCwgMSkpKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNT
dHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5p
bXBsKCksIG9mZnNldCwgMSkpKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc05v
bnRyaXZpYWxTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBzKQpA
QCAtNDYwLDEzICs1MDQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChzKTsK
ICAgICAgICAgQVNTRVJUKHNbMF0pOwogICAgICAgICBBU1NFUlQoc1sxXSk7Ci0gICAgICAgIHJl
dHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCBzKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmlu
ZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0
cmluZyYgcykKICAgICB7CiAgICAgICAgIEFTU0VSVChzLmxlbmd0aCgpID4gMSk7Ci0gICAgICAg
IHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBzKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNT
dHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0
cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKQEAg
LTQ4OCw3ICs1MzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChjIDw9IG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFs
RGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4gZml4dXBWUHRy
KGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMpKTsKICAgICB9CiAK
ICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJp
bmcqIHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNTE2LDcgKzU2MCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmlu
Z3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBVU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0
LCBsZW5ndGgpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZp
eHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBVU3RyaW5n
KFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCBsZW5ndGgpKSwgSlNTdHJpbmc6
Okhhc090aGVyT3duZXIpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzKQpAQCAtNTI5
LDcgKzU3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRh
KSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcikpOworICAg
ICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIHMsIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQogCiAgICAgaW5saW5l
IEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0
eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1
LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnRvT2JqZWN0U2xvd0Nhc2UoRXhlYwogCiAgICAgQVNT
RVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90
QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90
QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsK
IH0KIAogSlNPYmplY3QqIEpTVmFsdWU6OnRvVGhpc09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSog
ZXhlYykgY29uc3QKQEAgLTkwLDcgKzkwLDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNp
emVPYmplY3QoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90
QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNp
emVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtMTAzLDcgKzEwMyw3IEBAIEpT
T2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEUKIAogICAgIEFTU0VSVChpc1Vu
ZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0
RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0
KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5j
cHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9v
a3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDEwIEBAIHZvaWQgc2V0VXBTdGF0
aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiAKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGFzR2xvYmFsT2JqZWN0KHRoaXNPYmotPmdldEFub255bW91c1ZhbHVlKDApLmFz
Q2VsbCgpKTsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBpZiAoZW50cnktPmdlbmVyYXRvcigp
KQotICAgICAgICAgICAgZnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5j
dGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVu
Y3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3IoKSkpOworICAgICAgICAg
ICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBw
cm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1
bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3IoKSkpOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAg
ICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25M
ZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICBm
dW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3Bl
cnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkpOwogCiAgICAgICAgIHRoaXNPYmotPnB1dERpcmVj
dEZ1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwgZW50
cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIGxvY2F0aW9uID0gdGhpc09iai0+Z2V0RGlyZWN0
TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDkgKzI2LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE1hdGhP
YmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgTWF0aE9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTWF0aE9iamVj
dCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxNYXRoT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgTWF0aE9iamVjdChleGVj
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNv
bnN0CiB7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIAotICAgIE5hdGl2ZUVycm9y
UHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4
ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhp
cyk7CisgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUqIHByb3RvdHlwZSA9IE5hdGl2ZUVycm9yUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIG5h
bWVBbmRNZXNzYWdlLCB0aGlzKTsKIAogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVDTUEgMTUuMTEuNy41CiAgICAgcHV0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90
eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5cGU7CiAKICAgICBjbGFz
cyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAg
IHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5
cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNv
bnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2Fn
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDE0IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I7CiAKICAgICBjbGFzcyBO
YXRpdmVFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3Qgewot
ICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBOYXRpdmVFcnJvclByb3RvdHlwZShF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmLCBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKik7CisgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgTmF0aXZlRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5n
JiBuYW1lQW5kTWVzc2FnZSwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciogY29uc3RydWN0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFcnJv
clByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgY29uc3RydWN0b3IpOworICAg
ICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyBKU1ZhbHVl
IG51bWJlckNvbnN0cnVjdG9yTWluVmFsdWUKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBO
dW1iZXJPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+
Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOworICAg
IE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3Qo
KS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIG9i
amVjdC0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVtYmVyKG4pKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgTnVtYmVyUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTnVtYmVyQ29uc3RydWN0b3IgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAg
ICAgIE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgTnVtYmVyUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIE51bWJlckNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTnVtYmVyUHJvdG90
eXBlKiBudW1Qcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxOdW1iZXJDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIE51bWJlckNvbnN0
cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBudW1Qcm90b3R5cGUpOworICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgSlNWYWx1ZSBOdW1iZXJPYmplY3Q6OmdldEpTTnVtYmVyKCkKIAogTnVt
YmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51bWJlcikKIHsKLSAgICBOdW1iZXJPYmplY3QqIG9i
amVjdCA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0KiBvYmpl
Y3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVj
dC0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iamVjdC0+c2V0SW50ZXJuYWxWYWx1
ZShleGVjLT5nbG9iYWxEYXRhKCksIG51bWJlcik7CiAgICAgcmV0dXJuIG9iamVjdDsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIE51bWJlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
KTsKKwogICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgTnVtYmVyT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBzdGF0aWMgTnVtYmVyT2JqZWN0KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE51bWJlck9iamVjdD4oZ2xv
YmFsRGF0YS5oZWFwKSkgTnVtYmVyT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE1IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZSA6IHB1YmxpYyBOdW1iZXJPYmplY3Qgewot
ICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIE51bWJlclByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOdW1iZXJQcm90b3R5cGU+KCpl
eGVjLT5oZWFwKCkpKSBOdW1iZXJQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBPYmplY3RDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgT2JqZWN0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBPYmplY3RQcm90b3R5cGUqKTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBPYmplY3RDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE9iamVjdFByb3Rv
dHlwZSogb2JqUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8T2JqZWN0Q29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBPYmplY3RDb25z
dHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgb2JqUHJvdG90eXBlKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw5ICsyNiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBPYmplY3RQ
cm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHBy
aXZhdGU6CiAgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0UHJv
dG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPE9iamVjdFByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIE9iamVj
dFByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CiAKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50
ZXJuYWxSb3BlTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgczEsIHMyKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIpOwogCiAg
ICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAg
ICAgICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVp
bGRlci5hcHBlbmQoczEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczIpOwotICAgICAg
ICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRl
ci5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0
YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJp
bmcqIHMyKQpAQCAtNzQsMTQgKzc0LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlm
IChmaWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVy
Q291bnQsIHUxLCBzMik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgZmliZXJDb3VudCwgdTEsIHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3Bl
QnVpbGRlci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHUxKTsKICAgICAg
ICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0
YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAg
cmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2Uo
KSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKQEAgLTk5LDE0ICs5OSwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBKU1N0cmlu
Zzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9i
YWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgdTIpOworICAgICAg
ICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHMx
LCB1Mik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVy
Q291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgp
KSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAg
ICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZCh1
Mik7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEs
IHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KCpnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcm
IHUxLCBjb25zdCBVU3RyaW5nJiB1MikKQEAgLTEyMSw3ICsxMjEsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKICAg
ICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAg
ICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUy
KTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHUxLCB1Mik7
CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5n
JiB1MykKQEAgLTE0Miw3ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1Myk7CisgICAgICAgIHJl
dHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCB1MSwgdTIsIHUzKTsKICAgICB9CiAK
ICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBSZWdp
c3Rlciogc3RyaW5ncywgdW5zaWduZWQgY291bnQpCkBAIC0xNjAsNyArMTYwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmds
b2JhbERhdGEoKTsKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1ZSgp
LCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3RyaW5nc1syXS5qc1ZhbHVlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoZXhlYywgc3RyaW5nc1swXS5qc1ZhbHVlKCksIHN0
cmluZ3NbMV0uanNWYWx1ZSgpLCBzdHJpbmdzWzJdLmpzVmFsdWUoKSk7CiAKICAgICAgICAgSlNT
dHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBpZiAo
VU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkKQEAgLTE4NSw3ICsxODUsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKG92ZXJmbG93KQogICAgICAgICAgICAgcmV0
dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAotICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIu
cmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKQEAgLTIzMiw3ICsyMzIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFs
RGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAg
Ly8gRUNNQSAxMS45LjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
LmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw4IEBAIHN0cnVjdCBSZWdFeHBS
ZXByZXNlbnRhdGlvbiB7CiAgICAgT3duUHRyPFlhcnI6OkJ5dGVjb2RlUGF0dGVybj4gbV9yZWdF
eHBCeXRlY29kZTsKIH07CiAKLVJlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCi0gICAg
OiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkK
K1JlZ0V4cDo6UmVnRXhwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYg
cGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3N0YXRlKE5vdENv
bXBpbGVkKQogICAgICwgbV9wYXR0ZXJuU3RyaW5nKHBhdHRlcm5TdHJpbmcpCiAgICAgLCBtX2Zs
YWdzKGZsYWdzKQpAQCAtOTksOSArOTksMTQgQEAgUmVnRXhwOjp+UmVnRXhwKCkKIHsKIH0KIAot
UmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQorUmVnRXhwKiBSZWdFeHA6
OmNyZWF0ZVdpdGhvdXRDYWNoaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0
cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIGds
b2JhbERhdGEtPnJlZ0V4cENhY2hlKCktPmxvb2t1cE9yQ3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZs
YWdzKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwPihnbG9iYWxEYXRhLmhl
YXApKSBSZWdFeHAoZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworfQorCitSZWdF
eHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuIGdsb2Jh
bERhdGEucmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVhdGUocGF0dGVyblN0cmluZywgZmxhZ3Mp
OwogfQogCiB2b2lkIFJlZ0V4cDo6Y29tcGlsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cCA6
IHB1YmxpYyBKU0NlbGwgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZ0V4cCogY3Jl
YXRlKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsK
KyAgICAgICAgc3RhdGljIFJlZ0V4cCogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFVTdHJp
bmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKICAgICAgICAgflJlZ0V4cCgpOwogCiAgICAgICAg
IGJvb2wgZ2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV9mbGFncyAmIEZsYWdHbG9iYWw7IH0KQEAg
LTc1LDcgKzc1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgUmVnRXhwQ2FjaGU7Ci0gICAgICAgIFJlZ0V4cChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIFJlZ0V4cEZsYWdzKTsKKyAgICAgICAg
UmVnRXhwKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFVTdHJpbmcmLCBSZWdFeHBGbGFncyk7CisKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cCogY3JlYXRlV2l0aG91dENhY2hpbmcoSlNHbG9iYWxEYXRhJiwg
Y29uc3QgVVN0cmluZyYsIFJlZ0V4cEZsYWdzKTsKIAogICAgICAgICBlbnVtIFJlZ0V4cFN0YXRl
IHsKICAgICAgICAgICAgIFBhcnNlRXJyb3IsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNyArMzgsNyBAQCBSZWdFeHAqIFJlZ0V4cENhY2hlOjpsb29rdXBPckNyZWF0ZShjb25zCiAg
ICAgUmVnRXhwQ2FjaGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fd2Vha0NhY2hlLmZpbmQoa2V5
KTsKICAgICBpZiAocmVzdWx0ICE9IG1fd2Vha0NhY2hlLmVuZCgpKQogICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQuZ2V0KCk7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSBuZXcgKG1fZ2xvYmFs
RGF0YSkgUmVnRXhwKG1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIFJl
Z0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZygqbV9nbG9iYWxEYXRh
LCBwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAg
IG1fZ2xvYmFsRGF0YS0+YWRkUmVnRXhwVG9UcmFjZShyZWdFeHApOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcgKzE1Myw3IEBAIHZv
aWQgUmVnRXhwTWF0Y2hlc0FycmF5OjpmaWxsQXJyYXlJbnN0YW4KIAogSlNPYmplY3QqIFJlZ0V4
cENvbnN0cnVjdG9yOjphcnJheU9mTWF0Y2hlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG5ldyAoZXhlYykgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGQuZ2V0KCkpOwor
ICAgIHJldHVybiBSZWdFeHBNYXRjaGVzQXJyYXk6OmNyZWF0ZShleGVjLCBkLmdldCgpKTsKIH0K
IAogSlNWYWx1ZSBSZWdFeHBDb25zdHJ1Y3Rvcjo6Z2V0QmFja3JlZihFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGkpIGNvbnN0CkBAIC0zMDQsNyArMzA0LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVj
dFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAvLyBJZiBjYWxsZWQgYXMgYSBmdW5jdGlv
biwgdGhpcyBqdXN0IHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IChzZWUgMTUuMTAuMy4xKS4K
ICAgICAgICAgaWYgKGNhbGxBc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICBSZWdFeHAqIHJl
Z0V4cCA9IHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KGFzT2JqZWN0KGFyZzApKS0+cmVnRXhw
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgICAgICAg
ICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gYXNPYmplY3QoYXJnMCk7CiAgICAgfQpAQCAtMzIyLDEwICszMjIsMTAgQEAgSlNPYmpl
Y3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgIkludmFsaWQgZmxhZ3Mgc3Vw
cGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKICAgICB9CiAKLSAgICBSZWdFeHAqIHJl
Z0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdz
KTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIGlmICghcmVnRXhwLT5pc1ZhbGlkKCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIHJlZ0V4cC0+
ZXJyb3JNZXNzYWdlKCkpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgp
LCByZWdFeHApOworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJl
Z0V4cCk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dFdpdGhSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgfTsKIAogICAgIGNsYXNzIFJlZ0V4cENvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBSZWdFeHBDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cFByb3Rv
dHlwZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVnRXhwQ29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cENvbnN0
cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cFByb3RvdHlwZSk7CisgICAgICAgIH0KKwogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDE0IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE1hdGNoZXNBcnJheSA6IHB1YmxpYyBKU0FycmF5
IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgUmVnRXhwTWF0Y2hlc0FycmF5
KEV4ZWNTdGF0ZSosIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSopOworCisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUmVnRXhwTWF0Y2hlc0FycmF5KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBSZWdFeHBDb25zdHJ1Y3RvclByaXZhdGUqIGN0b3JQcml2YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwTWF0Y2hlc0FycmF5PigqZXhl
Yy0+aGVhcCgpKSkgUmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGN0b3JQcml2YXRlKTsKKyAgICAg
ICAgfQogICAgICAgICB2aXJ0dWFsIH5SZWdFeHBNYXRjaGVzQXJyYXkoKTsKIAogICAgIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
aAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDIyIEBACiBuYW1lc3BhY2Ug
SlNDIHsKICAgICAKICAgICBjbGFzcyBSZWdFeHBPYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFJlZ0V4cE9iamVjdChKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOworCiAgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhwKiByZWdFeHAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBP
YmplY3Q+KCpleGVjLT5oZWFwKCkpKSBSZWdFeHBPYmplY3QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUsIHJlZ0V4cCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBSZWdFeHBP
YmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cE9iamVjdD4o
Z2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBy
ZWdFeHApOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB0eXBlZGVmIEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdCBCYXNlOwogCi0gICAgICAgIFJlZ0V4cE9iamVjdChKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgICAgICB2aXJ0dWFsIH5SZWdFeHBPYmplY3Qo
KTsKIAogICAgICAgICB2b2lkIHNldFJlZ0V4cChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFJl
Z0V4cCogcikgeyBkLT5yZWdFeHAuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHIpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgICAgIGlmIChmbGFncyA9
PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdF
eHAgY29uc3RydWN0b3IuIikpOwogICAgICAgICB9Ci0gICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6
Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgcmVn
RXhwID0gUmVnRXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7
CiAgICAgfQogCiAgICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBSZWdFeHBQcm90b3R5cGUgOiBwdWJsaWMgUmVnRXhwT2JqZWN0IHsKLSAgICBwdWJsaWM6
CisgICAgcHJvdGVjdGVkOgogICAgICAgICBSZWdFeHBQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKIAorICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFJlZ0V4cFByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVn
RXhwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVn
RXhwUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHBy
b3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWlu
LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Nv
cGVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIFNsb3RWaXNpdG9yOwogICAgIAogICAgIGNsYXNzIFNjb3BlQ2hhaW5Ob2Rl
IDogcHVibGljIEpTQ2VsbCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIFNj
b3BlQ2hhaW5Ob2RlKFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBnbG9iYWxUaGlzKQogICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPnNjb3BlQ2hhaW5Ob2RlU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBnbG9i
YWxEYXRhKGdsb2JhbERhdGEpCkBAIC00Nyw2ICs0NywxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwogICAgICAgICB9CiAKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRo
aXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTY29w
ZUNoYWluTm9kZT4oKmV4ZWMtPmhlYXAoKSkpIFNjb3BlQ2hhaW5Ob2RlKG5leHQsIG9iamVjdCwg
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxUaGlzKTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgU2NvcGVDaGFpbk5vZGUqIGNyZWF0ZShTY29wZUNoYWluTm9kZSogbmV4dCwgSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFNjb3BlQ2hhaW5Ob2RlPihnbG9iYWxEYXRhLT5o
ZWFwKSkgU2NvcGVDaGFpbk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIGdsb2JhbFRoaXMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGE7CiAgICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbmV4
dDsKICAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBvYmplY3Q7CkBAIC03Niw3ICs4Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFp
bk5vZGU6OnB1c2goSlNPYmplY3QqIG8pCiAgICAgewogICAgICAgICBBU1NFUlQobyk7Ci0gICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIFNjb3BlQ2hhaW5Ob2RlKHRoaXMsIG8sIGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdC5nZXQoKSwgZ2xvYmFsVGhpcy5nZXQoKSk7CisgICAgICAgIHJl
dHVybiBTY29wZUNoYWluTm9kZTo6Y3JlYXRlKHRoaXMsIG8sIGdsb2JhbERhdGEsIGdsb2JhbE9i
amVjdC5nZXQoKSwgZ2xvYmFsVGhpcy5nZXQoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIFNjb3Bl
Q2hhaW5Ob2RlKiBTY29wZUNoYWluTm9kZTo6cG9wKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWduZWQgU21hbGxTdHJpbmdzOjpjb3VudCgpIGNv
bnN0CiB2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewogICAgIEFTU0VSVCghbV9lbXB0eVN0cmluZyk7Ci0gICAgbV9lbXB0eVN0
cmluZyA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgIiIsIEpTU3RyaW5n
OjpIYXNPdGhlck93bmVyKTsKKyAgICBtX2VtcHR5U3RyaW5nID0gSlNTdHJpbmc6OmNyZWF0ZSgq
Z2xvYmFsRGF0YSwgIiIsIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKTsKIH0KIAogdm9pZCBTbWFs
bFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQg
U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXIKICAgICBpZiAoIW1fc3RvcmFnZSkK
ICAgICAgICAgbV9zdG9yYWdlID0gYWRvcHRQdHIobmV3IFNtYWxsU3RyaW5nc1N0b3JhZ2UpOwog
ICAgIEFTU0VSVCghbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0pOwotICAgIG1f
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNo
YXJhY3RlcikpLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgbV9zaW5nbGVDaGFyYWN0
ZXJTdHJpbmdzW2NoYXJhY3Rlcl0gPSBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNoYXJhY3RlcikpLCBKU1N0cmluZzo6
SGFzT3RoZXJPd25lcik7CiB9CiAKIFN0cmluZ0ltcGwqIFNtYWxsU3RyaW5nczo6c2luZ2xlQ2hh
cmFjdGVyU3RyaW5nUmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShuZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBnbG9iYWxPYmplY3Qt
PnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShu
ZXcgKGV4ZWMpIFN0cmluZ09iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0
cnVjdHVyZSgpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKFN0cmluZ09iamVjdDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CiB9CiAKIENv
bnN0cnVjdFR5cGUgU3RyaW5nQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTdHJpbmdQcm90
b3R5cGU7CiAKICAgICBjbGFzcyBTdHJpbmdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBTdHJpbmdQcm90
b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5nQ29u
c3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nUHJvdG90eXBlKiBzdHJQcm90b3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJp
bmdDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ0NvbnN0cnVjdG9yKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBzdHJQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywxMSArMjcsMjEgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU3RyaW5n
T2JqZWN0IDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwogICAg
ICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYp
OwotCisgICAgICAgICAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU3RyaW5n
T2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVj
dD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUpOyAgCisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIHN0cikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMt
PmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLCBzdHJ1Y3R1cmUsIHN0cik7ICAKKyAgICAgICAg
fQogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBKU1N0cmluZyopOworICAgICAgICAKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3RU
aGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFN0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBVU3RyaW5nJiBzdHJpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
KGV4ZWMpIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKGV4ZWMsCisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQ+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZChleGVjLAogICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+c3RyaW5nUHJvdG90
eXBlKCkpLCBzdHJpbmcpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gOTEwMjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MTUsNyArNjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgICAgICAgKiAgSWYgcmVnZXhwIGlzIG5vdCBhbiBvYmplY3Qgd2hv
c2UgW1tDbGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBpcwogICAgICAgICAgKiAgcmVw
bGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhw
KS4KICAgICAgICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9i
YWxEYXRhKCksIGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVn
RXhwOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFn
cyk7CiAgICAgfQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQg
cG9zOwpAQCAtNjY0LDcgKzY2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICAgICAgICogIElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtb
Q2xhc3NdXSBwcm9wZXJ0eSBpcyAiUmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2Vk
IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAg
ICAgICAgICAqLwotICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6
Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOwog
ICAgIH0KICAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBTdHJpbmdQ
cm90b3R5cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0
ZToKICAgICAgICAgU3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHJpbmdQcm90b3R5
cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChhbGxvY2F0ZUNlbGw8U3RyaW5nUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nUHJv
dG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsRGF0
YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgQVNTRVJUKGNsYXNzSW5mbyk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEs
IHByb3RvdHlwZSwgdHlwZUluZm8sIGFub255bW91c1Nsb3RDb3VudCwgY2xhc3NJbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEu
aGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIHR5cGVJbmZvLCBhbm9ueW1v
dXNTbG90Q291bnQsIGNsYXNzSW5mbyk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9p
ZCBkdW1wU3RhdGlzdGljcygpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoIWdsb2JhbERhdGEuc3Ry
dWN0dXJlU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBT
dHJ1Y3R1cmUoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CkBAIC0xNzAsNyArMTcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNv
bnN0IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
Z2xvYmFsRGF0YS5zdHJ1Y3R1cmVTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
Jmdsb2JhbERhdGEpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFwKSkg
U3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHR5cGVkZWYgZW51bSB7IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2hhaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBoZWFkKSB7IHJldHVybiBuZXcgKCZnbG9i
YWxEYXRhKSBTdHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNo
YWluU3RydWN0dXJlLmdldCgpLCBoZWFkKTsgfQorICAgICAgICBzdGF0aWMgU3RydWN0dXJlQ2hh
aW4qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogaGVhZCkgeyBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlQ2hhaW4+KGdsb2JhbERhdGEuaGVhcCkp
IFN0cnVjdHVyZUNoYWluKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlQ2hhaW5TdHJ1
Y3R1cmUuZ2V0KCksIGhlYWQpOyB9CiAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBo
ZWFkKCkgeyByZXR1cm4gbV92ZWN0b3IuZ2V0KCk7IH0KICAgICAgICAgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAK
KzIwMTEtMDctMTQgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0NjYKKyAg
ICAgICAgUmVmYWN0b3IgSlNDIHRvIHJlcGxhY2UgSlNDZWxsOjpvcGVyYXRvciBuZXcgd2l0aCBz
dGF0aWMgY3JlYXRlIG1ldGhvZAorCisgICAgICAgIEZpcnN0IHN0ZXAgaW4gYSBsb25nZXIgcmVm
YWN0b3JpbmcgcHJvY2VzcyB0byByZW1vdmUgdGhlIHVzZSBvZgorICAgICAgICBvcGVyYXRvciBu
ZXcgb3ZlcmxvYWRpbmcgaW4gb3JkZXIgdG8gYWxsb2NhdGUgR0Mgb2JqZWN0cyBhbmQgdG8gcmVw
bGFjZQorICAgICAgICB0aGlzIG1ldGhvZCB3aXRoIHN0YXRpYyBjcmVhdGUgbWV0aG9kcyBmb3Ig
ZWFjaCBpbmRpdmlkdWFsIHR5cGUgb2YgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICAgSlMgb2JqZWN0
LiAgVGhpcyBwYXJ0aWN1bGFyIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCByZXBsYWNpbmcgdXNlcyBv
ZgorICAgICAgICBvcGVyYXRvciBuZXcgd2l0aGluIEpTQyBwcm9wZXIuICBGdXR1cmUgcGF0Y2hl
cyB3aWxsIHJlbW92ZSBpdCBmcm9tIHRoZQorICAgICAgICBwYXJ0cyB0aGF0IGludGVyZmFjZSB3
aXRoIHRoZSBET00uICBEdWUgdG8gdGhlIERPTSdzIGNvbnRpbnVlZCBkZXBlbmRlbmNlCisgICAg
ICAgIG9uIGl0LCBvcGVyYXRvciBuZXcgaGFzIG5vdCBhY3R1YWxseSBiZWVuIHJlbW92ZWQgZnJv
bSBKU0NlbGwuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQgKG9saXZlckBhcHBs
ZS5jb20pIGFuZCBEYXJpbiBBZGxlciAoZGFyaW5AYXBwbGUuY29tKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpqc0RhdGVPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6
b2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Z1
bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAgICAqIGJyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFu
dFRvVmFsdWUpOgorCiAyMDExLTA3LTE0ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+
CiAKICAgICAgICAgQ2hhcmFjdGVyIHJlZmVyZW5jZSBwYXJzZXIgZm9yIG5ldyBYTUwgcGFyc2Vy
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIEpTVmFsdWUganNEYXRlT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgZG8KIHsKICAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIERhdGVJbnN0YW5j
ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFs
dWUpOworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwogfQogCiBkb3VibGUgdmFs
dWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQpAQCAtMzA3LDcgKzMwNyw3
IEBAIEZyYW1lKiB0b0R5bmFtaWNGcmFtZShFeGVjU3RhdGUqIGV4ZWMpCiAKIEpTVmFsdWUgb2Jq
ZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVj
dFByb3RvRnVuY1RvU3RyaW5nKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1Rv
U3RyaW5nKTsKIH0KIAogU3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIEpTRE9N
V2luZG93Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpCiB0ZW1wbGF0ZTxOYXRpdmVGdW5jdGlvbiBu
YXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4KIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1
bmN0aW9uU3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7
CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIG5hdGl2ZUZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIEpT
VmFsdWUgY2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxNyArNDAsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSlNW
YWx1ZSBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3Bl
cnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25CYWNrKTsKKyAgICByZXR1cm4gSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5h
bWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFjayk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVl
IG5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVy
dHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkZvcndhcmQpOworICAgIHJldHVybiBK
U0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5
TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25Gb3J3YXJkKTsKIH0KIAogc3RhdGljIEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVy
dHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlvbkdvKTsKKyAgICByZXR1cm4gSlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUs
IGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pOwogfQogCiBib29sIEpTSGlzdG9yeTo6Z2V0
T3duUHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljUmVwbGFjZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCks
IDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7Cisg
ICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZXBsYWNlKTsKIH0K
IAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQog
ewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0
dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uUmVsb2Fk
KTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7
CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvbkFz
c2lnbik7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3Np
Z24pOwogfQogCiBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4Niw3ICsxMDg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBkOwogICAg
ICAgICAgICAgaWYgKCFyZWFkKGQpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMpIERhdGVJbnN0YW5jZShtX2V4ZWMsIG1f
Z2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQpOworICAgICAgICAgICAgcmV0dXJuIERh
dGVJbnN0YW5jZTo6Y3JlYXRlKG1fZXhlYywgbV9nbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUo
KSwgZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWxlVGFnOiB7CiAgICAgICAgICAgICBS
ZWZQdHI8RmlsZT4gZmlsZTsKQEAgLTExNjYsOCArMTE2Niw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIFJlZ0V4cEZsYWdzIHJlRmxh
Z3MgPSByZWdFeHBGbGFncyhmbGFncy0+dXN0cmluZygpKTsKICAgICAgICAgICAgIEFTU0VSVChy
ZUZsYWdzICE9IEludmFsaWRGbGFncyk7Ci0gICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJl
Z0V4cDo6Y3JlYXRlKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybi0+dXN0cmluZygpLCBy
ZUZsYWdzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKG1fZXhlYykgUmVnRXhwT2JqZWN0KG1f
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0
dXJlKCksIHJlZ0V4cCk7IAorICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNy
ZWF0ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybi0+dXN0cmluZygpLCByZUZsYWdzKTsK
KyAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2dsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCk7IAogICAgICAgICB9CiAgICAgICAgIGNhc2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODczLDkgKzg3Myw5
IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1ZShFeGVjU3RhdGUKICAgICAgICAgICAg
IFVTdHJpbmcgcGF0dGVybigoVUNoYXIqKXJlLnBhdHRlcm4oKS51dGYxNigpLCByZS5wYXR0ZXJu
KCkubGVuZ3RoKCkpOwogICAgICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSAocmUuY2FzZVNl
bnNpdGl2aXR5KCkgPT0gUXQ6OkNhc2VJbnNlbnNpdGl2ZSkgPyBGbGFnSWdub3JlQ2FzZSA6IE5v
RmxhZ3M7CiAKLSAgICAgICAgICAgIEpTQzo6UmVnRXhwKiByZWdFeHAgPSBKU0M6OlJlZ0V4cDo6
Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgICAg
IEpTQzo6UmVnRXhwKiByZWdFeHAgPSBKU0M6OlJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgICAgICAgICAgaWYgKHJlZ0V4cC0+aXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhw
U3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlZ0V4cE9iamVj
dDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKICAgICAgICAgICAg
IHJldHVybiBqc051bGwoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTkwOCw3ICs5MDgsNyBAQCBK
U1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgIGR0LmlzRFNU
ID0gLTE7CiAgICAgICAgIGRvdWJsZSBtcyA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhleGVjLCBk
dCwgdGltZS5tc2VjKCksIC8qaW5wdXRJc1VUQyovIGZhbHNlKTsKIAotICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7CisgICAgICAgIHJldHVybiBEYXRlSW5zdGFu
Y2U6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1
cmUoKSwgdHJ1bmMobXMpKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFC
eXRlQXJyYXkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101031</attachid>
            <date>2011-07-15 13:17:55 -0700</date>
            <delta_ts>2011-07-18 09:04:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110715131753.patch</filename>
            <type>text/plain</type>
            <size>167224</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjE1IEBA
CisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2Cisg
ICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGgg
c3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChHbG9i
YWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5jdGlvblJ1bik6CisgICAgICAg
IChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlND
OjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTcGxpY2UpOgorICAgICAgICAqIHJ1bnRpbWUv
QXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm90b3R5cGU6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5o
OgorICAgICAgICAoSlNDOjpCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmg6CisgICAgICAgIChK
U0M6OkJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpEYXRlQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAgICAgICAgKEpT
Qzo6RGF0ZUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5oOgorICAgICAgICAoSlNDOjpEYXRlUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3IuY3BwOgorICAgICAgICAoSlNDOjpTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OmNyZWF0
ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAoSlNDOjpUZXJtaW5h
dGVkRXhlY3V0aW9uRXJyb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQmFzZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFi
bGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3RvdHlw
ZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNldHRl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAg
ICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAg
ICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAg
ICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRl
ZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgorICAg
ICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VDaGFy
YWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6anNTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAoSlNDOjpq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OmpzTm9udHJpdmlhbFN0
cmluZyk6CisgICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNTdWJzdHJp
bmcpOgorICAgICAgICAoSlNDOjpqc093bmVkU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKToKKyAg
ICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0VXBTdGF0aWNGdW5jdGlvblNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAoSlNDOjpNYXRoT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JQcm90b3R5cGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdFdpdGhOdW1iZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpOdW1iZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE51bWJlcik6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAg
ICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6anNTdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdF
eHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNoZXMpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RS
ZWdFeHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAg
KEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdF
eHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJl
Z0V4cE9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5o
OgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6cHVzaCk6CisgICAgICAgICogcnVudGlt
ZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVt
cHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nQ29uc3Ry
dWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5n
T2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpj
cmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1
cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIwMTEtMDctMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc3BlY3VsYXRpdmUgSklUIGNvbnRhaW5zIGEg
RklYTUUgZm9yIHJld2luZGluZyBzcGVjdWxhdGl2ZSBjb2RlIGdlbmVyYXRpb24gdGhhdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MTAy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QzcHV0RVBO
U185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQTlNfOEpTT2JqZWN0RQog
X19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVj
dEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRFdgogX19aTjNKU0MxNFNh
bXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNXN0YXJ0RWoKQEAg
LTI2Myw4ICsyNjIsOCBAQCBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9y
CiBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVoYXZpb3JFCiBfX1pOM0pTQzZK
U0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185RXhlY1N0YXRlRQotX19a
TjNKU0M2UmVnRXhwNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18x
MVJlZ0V4cEZsYWdzRQogX19aTjNKU0M2UmVnRXhwRDFFdgorX19aTjNKU0M2UmVnRXhwNmNyZWF0
ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQogX19a
TjNKU0M3SlNBcnJheTEzdmlzaXRDaGlsZHJlbkVSTlNfMTFTbG90VmlzaXRvckUKIF9fWk4zSlND
N0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0M3SlNBcnJheTE4Z2V0T3duUHJv
cGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNsb3RFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0MywxNCBAQCBsb25nIFN0b3BXYXRj
aDo6Z2V0RWxhcHNlZE1TKCkKIH0KIAogY2xhc3MgR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xv
YmFsT2JqZWN0IHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgR2xvYmFsT2JqZWN0KEpTR2xvYmFs
RGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRzKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxHbG9iYWxP
YmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsIGFyZ3VtZW50cyk7CisgICAgfQogICAgIHZpcnR1YWwgVVN0cmluZyBjbGFzc05hbWUoKSBj
b25zdCB7IHJldHVybiAiZ2xvYmFsIjsgfQogfTsKIENPTVBJTEVfQVNTRVJUKCFJc0ludGVnZXI8
R2xvYmFsT2JqZWN0Pjo6dmFsdWUsIFdURl9Jc0ludGVnZXJfR2xvYmFsT2JqZWN0X2ZhbHNlKTsK
QEAgLTE1MywyMiArMTU5LDIyIEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoR2xvYmFsT2Jq
ZWN0KTsKIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYgYXJndW1lbnRz
KQogICAgIDogSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQogewotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxF
eGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCks
IHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAi
cXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVj
KCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5j
dGlvbkdDKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9u
OjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVj
KCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygp
LCAicHJpbnQiKSwgZnVuY3Rpb25QcmludCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJxdWl0IiksIGZ1bmN0aW9u
UXVpdCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRp
ZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CiAjaWZuZGVmIE5ERUJVRwot
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpT
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9u
UmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3Ry
dWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkiKSwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSkpOwogI2VuZGlmCi0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5j
dGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAidmVyc2lvbiIpLCBmdW5jdGlvblZlcnNpb24pKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBm
dW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImNoZWNrU3lu
dGF4IiksIGZ1bmN0aW9uQ2hlY2tTeW50YXgpKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9i
YWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhp
cywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJyZWFk
bGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwgZnVuY3Rp
b25WZXJzaW9uKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0
aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJ
ZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJ1biIpLCBmdW5jdGlvblJ1bikpOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVja1N5bnRheCIpLCBmdW5j
dGlvbkNoZWNrU3ludGF4KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlYWRsaW5lIiksIGZ1bmN0aW9uUmVhZGxp
bmUpKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncykpOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgImNsZWFyU2FtcGxpbmdGbGFncyIpLCBmdW5jdGlvbkNsZWFyU2FtcGxp
bmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlv
bjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2Ft
cGxpbmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwg
SWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5nRmxhZ3MiKSwgZnVuY3Rpb25D
bGVhclNhbXBsaW5nRmxhZ3MpKTsKICNlbmRpZgogCiAgICAgSlNPYmplY3QqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCkpOwpAQCAtMjI3LDcgKzIzMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBpZiAoIWZpbGxCdWZmZXJX
aXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiQ291bGQgbm90
IG9wZW4gZmlsZS4iKSkpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBuZXcg
KCZleGVjLT5nbG9iYWxEYXRhKCkpIEdsb2JhbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIEds
b2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
LCBWZWN0b3I8VVN0cmluZz4oKSk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBH
bG9iYWxPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIEdsb2JhbE9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpLCBWZWN0b3I8VVN0cmlu
Zz4oKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0b3BXYXRjaC5zdGFydCgp
OwpAQCAtNTUyLDcgKzU1OCw3IEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndiwg
SlNHbG8KICAgICBPcHRpb25zIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJn
diwgb3B0aW9ucywgZ2xvYmFsRGF0YSk7CiAKLSAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpLCBvcHRpb25zLmFyZ3Vt
ZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKmdsb2JhbERh
dGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJvb2wgc3VjY2VzcyA9IHJ1
bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5zY3JpcHRzLCBvcHRpb25zLmR1bXAp
OwogICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIHN1Y2Nlc3MpCiAgICAgICAgIHJ1bklu
dGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxi
YWNrQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLXB1Ymxp
YzoKK3Byb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJh
Y2spOworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3RydWN0b3IqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTQ2FsbGJhY2tDb25z
dHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGNhbGxiYWNrKTsKKyAg
ICB9CisgICAgCiAgICAgdmlydHVhbCB+SlNDYWxsYmFja0NvbnN0cnVjdG9yKCk7CiAgICAgSlND
bGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3M7IH0KICAgICBKU09iamVj
dENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2Nh
bGxiYWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tGdW5j
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFj
a0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxiYWNrRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgSlNDYWxsYmFja0Z1bmN0
aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNh
bGxiYWNrLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsKIAorcHVibGljOgorICAgIHN0YXRpYyBK
U0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0NhbGxiYWNrRnVu
Y3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgbmFtZSk7CisgICAgfQorCiAgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgCiAgICAgLy8gSW50ZXJuYWxGdW5j
dGlvbiBtaXNoLW1hc2hlcyBjb25zdHJ1Y3RvciBhbmQgZnVuY3Rpb24gYmVoYXZpb3IgLS0gd2Ug
c2hvdWxkIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsxMTYsMjMgQEAgc3RydWN0
IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgIAogdGVtcGxhdGUgPGNsYXNz
IEJhc2U+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IDogcHVibGljIEJhc2UgewotcHVibGljOgor
cHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsKICAgICBKU0NhbGxiYWNr
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVyZSopOworICAgIC8vIFdl
J2QgbGlrZSB0byB1c2UgdGhlIHBsYWNlbWVudCB2ZXJzaW9uIG9mIG9wZXJhdG9yIG5ldyBkZWZp
bmVkIGluIEpTQ2VsbCwgYnV0IAorICAgIC8vIHdlIGNhbid0IGJlY2F1c2UgQmFzZSBpcyBhIHRl
bXBsYXRlIGFyZ3VtZW50LCBzbyB3ZSBqdXN0IGR1cGxpY2F0ZSB0aGUgc2FtZSAKKyAgICAvLyBm
dW5jdGlvbmFsaXR5IGhlcmUuCisgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCog
cHRyKSB7IHJldHVybiBwdHI7IH0KKworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrT2Jq
ZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBjbGFzc1JlZiwgdm9pZCogZGF0YSkK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrT2JqZWN0
PigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0aWMgSlNDYWxsYmFja09i
amVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDbGFzc1JlZiBjbGFzc1Jl
ZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNDYWxsYmFja09i
amVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICB2b2lk
IHNldFByaXZhdGUodm9pZCogZGF0YSk7CiAgICAgdm9pZCogZ2V0UHJpdmF0ZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVu
Y3Rpb25zLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MCw3ICs1NjAs
NyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRpY0Z1CiAgICAgICAgICAg
ICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBzdGF0aWNGdW5jdGlvbnMtPmdldChw
cm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+Y2FsbEFzRnVuY3Rpb24p
IHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBv
ID0gbmV3IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgYXNHbG9iYWxPYmplY3QodGhp
c09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlvbiwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0NhbGxiYWNrRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgw
KSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0
aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIG8sIGVu
dHJ5LT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NsYXNzUmVmLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2xhc3NSZWYuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDbGFzc1Jl
Zi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBKU09iamVjdCogT3BhcXVl
SlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAKICAgICBpZiAoIWpzQ2xhc3NEYXRhLmNhY2hlZFBy
b3RvdHlwZSkgewogICAgICAgICAvLyBSZWN1cnNpdmUsIGJ1dCBzaG91bGQgYmUgZ29vZCBlbm91
Z2ggZm9yIG91ciBwdXJwb3NlcwotICAgICAgICBqc0NsYXNzRGF0YS5jYWNoZWRQcm90b3R5cGUu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3IChleGVjKSBKU0NhbGxiYWNrT2JqZWN0PEpTT2Jq
ZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlKCksIHBy
b3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8gc2V0IGpzQ2xhc3NEYXRhIGFzIHRo
ZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBjbGVhciBvdXIgcmVmZXJlbmNlIG9u
IGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFByb3RvdHlwZS5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVj
dD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwgcHJvdG90eXBlQ2xh
c3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEgYXMgdGhlIG9iamVjdCdz
IHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVuY2Ugb24gZGVzdHJ1Y3Rp
b24KICAgICAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgICAgICAg
ICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBwcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlND
b250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNH
bG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogICAgICAgICByZXR1cm4gSlNH
bG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
KSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xv
YmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9iamVjdD4oKmdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6
Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFsT2JqZWN0Pjo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxsYmFja09iamVjdDxKU0ds
b2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkpKTsKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5wcm90b3R5cGUoZXhlYyk7CiAgICAg
aWYgKCFwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0
UmVmLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
T2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU09iamVjdFJl
ZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAgICAgaWYgKCFqc0NsYXNzKQogICAgICAg
ICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykpOwogCi0gICAgSlNDYWxs
YmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBuZXcgKGV4ZWMp
IEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0PihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJh
Y2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CisgICAgSlNDYWxsYmFja09iamVj
dDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpT
T2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1
Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBq
c0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgIG9iamVjdC0+c2V0UHJvdG90eXBlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKIApAQCAtOTUsNyArOTUsNyBAQCBKU09iamVj
dFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsCiAKICAgICBJZGVudGlmaWVyIG5hbWVJ
RCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCkpIDogSWRlbnRp
ZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCi0gICAgcmV0dXJuIHRvUmVmKG5ldyAoZXhl
YykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Y2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAgIHJldHVybiB0b1JlZihKU0NhbGxiYWNrRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxBc0Z1
bmN0aW9uLCBuYW1lSUQpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0
b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBKU09iamVjdENhbGxBc0Nv
bnN0cnVjdG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0xMDcsNyArMTA3LDcgQEAg
SlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDbwogICAgIGlmICghanNQcm90
b3R5cGUpCiAgICAgICAgIGpzUHJvdG90eXBlID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKTsKIAotICAgIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvciogY29uc3Ry
dWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tDb25zdHJ1
Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rvcik7CisgICAgSlNDYWxs
YmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCksIGpzQ2xhc3MsIGNhbGxB
c0NvbnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQcm90b3R5cGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0
b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJ
KHdvcmtpbmcgY29weSkKQEAgLTMsMjQgKzMsMjQgQEAgRVhQT1JUUwogICAgID8/MENTdHJpbmdA
V1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCRElAWgogICAgID8/MENv
bGxhdG9yQFdURkBAUUFFQFBCREBaCi0gICAgPz8wRGF0ZUluc3RhbmNlQEpTQ0BAUUFFQFBBVkV4
ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQE5AWgorICAgID8/MERhdGVJbnN0YW5jZUBKU0NAQElB
RUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBOQFoKICAgICA/PzBEZWZhdWx0R0NBY3Rp
dml0eUNhbGxiYWNrQEpTQ0BAUUFFQFBBVkhlYXBAMUBAWgogICAgID8/MERyb3BBbGxMb2Nrc0BK
U0xvY2tASlNDQEBRQUVAVzRKU0xvY2tCZWhhdmlvckAyQEBaCiAgICAgPz8wRHluYW1pY0dsb2Jh
bE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0
QDFAQFogIAogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVAUEFWSlNHbG9iYWxEYXRh
QDFAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZJZGVudGlmaWVyQDFAQFoK
LSAgICA/PzBKU0FycmF5QEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAx
QEBaCi0gICAgPz8wSlNBcnJheUBKU0NAQFFBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1
cmVAMUBBQlZBcmdMaXN0QDFAQFoKKyAgICA/PzBKU0FycmF5QEpTQ0BASUFFQEFBVkpTR2xvYmFs
RGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCisgICAgPz8wSlNBcnJheUBKU0NAQElBRUBBQVZKU0ds
b2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZBcmdMaXN0QDFAQFoKICAgICA/PzBKU0J5dGVB
cnJheUBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBQQVZCeXRlQXJyYXlA
V1RGQEBAWgotICAgID8/MEpTRnVuY3Rpb25ASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAUEFWSlNH
bG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBIQUJWSWRlbnRpZmllckAxQFA2SV9KMEBaQFoK
KyAgICA/PzBKU0Z1bmN0aW9uQEpTQ0BAQUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVkpTR2xvYmFsT2Jq
ZWN0QDFAUEFWU3RydWN0dXJlQDFASEFCVklkZW50aWZpZXJAMUBQNklfSjBAWkBaCiAgICAgPz8w
SlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQEBaCiAgICAgPz8wSlNPYmplY3RXaXRoR2xv
YmFsT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFA
UEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBKU09iamVjdFdpdGhHbG9iYWxPYmplY3RASlNDQEBJ
QUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBAWgogICAgID8/ME1ENUBXVEZA
QFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAgPz8wUmVmQ291bnRlZExlYWtD
b3VudGVyQFdURkBAUUFFQFBCREBaCi0gICAgPz8wUmVnRXhwT2JqZWN0QEpTQ0BAUUFFQFBBVkpT
R2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAUEFWUmVnRXhwQDFAQFoKKyAgICA/PzBSZWdF
eHBPYmplY3RASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBQQVZS
ZWdFeHBAMUBAWgogICAgID8/MFNIQTFAV1RGQEBRQUVAWFoKLSAgICA/PzBTdHJpbmdPYmplY3RA
SlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAUEFWU3RydWN0dXJlQDFAQUJWVVN0cmluZ0AxQEBaCisg
ICAgPz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAx
QEFCVlVTdHJpbmdAMUBAWgogICAgID8/MFN0cnVjdHVyZUBKU0NAQEFBRUBBQVZKU0dsb2JhbERh
dGFAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFASVBCVUNsYXNzSW5mb0AxQEBaCiAgICAgPz8w
VGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQkRA
WgpAQCAtNDAsNyArNDAsNiBAQCBFWFBPUlRTCiAgICAgPz8xVGhyZWFkQ29uZGl0aW9uQFdURkBA
UUFFQFhaCiAgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgogICAgID8/MVdlYWtIYW5k
bGVPd25lckBKU0NAQFVBRUBYWgotICAgID8/MkpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FQQVhJUEFW
SlNHbG9iYWxEYXRhQDFAQFoKICAgICA/PzhKU0NAQFlBX05BQlZVU3RyaW5nQDBAMEBaCiAgICAg
Pz84V1RGQEBZQV9OQUJWQ1N0cmluZ0AwQDBAWgogICAgID9hYnNvbHV0ZVRpbWVUb1dhaXRUaW1l
b3V0SW50ZXJ2YWxAV1RGQEBZQUtOQFoKQEAgLTk5LDcgKzk4LDcgQEAgRVhQT1JUUwogICAgID9j
cmVhdGVAQnl0ZUFycmF5QFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVkJ5dGVBcnJheUBXVEZAQEAy
QElAWgogICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/JFBhc3NSZWZQdHJAVkpT
R2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tUeXBlQDJAQFoKICAgICA/Y3JlYXRl
QE9wYXF1ZUpTU3RyaW5nQEBTQT9BVj8kUGFzc1JlZlB0ckBVT3BhcXVlSlNTdHJpbmdAQEBXVEZA
QEFCVlVTdHJpbmdASlNDQEBAWgotICAgID9jcmVhdGVAUmVnRXhwQEpTQ0BAU0FQQVYxMkBQQVZK
U0dsb2JhbERhdGFAMkBBQlZVU3RyaW5nQDJAVzRSZWdFeHBGbGFnc0AyQEBaCisgICAgP2NyZWF0
ZUBSZWdFeHBASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQEFCVlVTdHJpbmdAMkBXNFJl
Z0V4cEZsYWdzQDJAQFoKICAgICA/Y3JlYXRlRW1wdHlTdHJpbmdAU21hbGxTdHJpbmdzQEpTQ0BA
QUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZUVycm9yQEpTQ0BAWUFQQVZKU09i
amVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlVTdHJpbmdAMUBAWgogICAgID9jcmVhdGVJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbkBKU0NAQFlBUEFWSlNPYmplY3RAMUBQQVZKU0dsb2JhbERh
dGFAMUBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzUsNyArMTczNSw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKICAgICBBU1NFUlQoY29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxTY29wZUNoYWluKCkpOwog
ICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKS5q
c1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoY2FsbEZyYW1l
KSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpT
QWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUsIHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAg
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3RlcigpKSA9IEpTVmFsdWUoYWN0
aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyArMjQ2LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CiAgICAgICAgIGdsb2JhbE9iamVjdC0+
cmVtb3ZlRGlyZWN0KCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVudCgpKTsgLy8gTmV3bHkg
ZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9wZXJ0aWVzLgogCi0gICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbWFrZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwg
c2NvcGVDaGFpbik7CiAgICAgICAgIGludCBpbmRleCA9IGFkZEdsb2JhbFZhcihmdW5jdGlvbi0+
aWRlbnQoKSwgZmFsc2UpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoaW5kZXgp
LnNldCgqbV9nbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDcgKzQ3
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbWFr
ZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9k
eSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3Jl
YXRlKGdsb2JhbERhdGEsIGJvZHktPmlkZW50KCksIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2Vz
QXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJv
ZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYm9keS0+aWRlbnQoKSwgYm9keS0+
c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5
LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50
aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAog
ewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhwKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCks
IG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3MudXN0cmluZygpKSkpOwor
ICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0
ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy51c3RyaW5nKCkpKSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlYwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVTeW50YXhFcnJvcihj
YWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4i
KTsKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgIH0KLSAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKG5ldyAoZ2xvYmFsRGF0YSkgUmVnRXhwT2Jq
ZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKS0+Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKSk7CisgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShSZWdFeHBPYmplY3Q6OmNyZWF0
ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1l
LT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkp
OwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19yZWdleHApOwogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zMzY1LDcgKzMzNjUsNyBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9
IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1
bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIp
ID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3RlcikpID0gSlNWYWx1
ZShhcmd1bWVudHMpOwogICAgICAgICB9CkBAIC00NDk1LDcgKzQ0OTUsNyBAQCBza2lwX2lkX2N1
c3RvbV9zZWxmOgogCiAgICAgICAgIGludCBhY3RpdmF0aW9uUmVnID0gdlBDWzFdLnUub3BlcmFu
ZDsKICAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJlZykuanNWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKGdsb2JhbERhdGEp
IEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAgICAgIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGFjdGl2YXRpb25SZWcpID0gSlNW
YWx1ZShhY3RpdmF0aW9uKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihj
YWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgICAgIH0KQEAg
LTQ2MDUsNyArNDYwNSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIGludCBkc3Qg
PSB2UENbMV0udS5vcGVyYW5kOwogCiAgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGRzdCkuanNW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoZ2xvYmFs
RGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3Vt
ZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxGcmFtZSk7CiAgICAgICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUoYXJndW1lbnRzKTsKICAg
ICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgIH0KQEAgLTUwNjcsMTMgKzUw
NjcsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1bWVudHMoQwogICAgICAg
ICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgaWYgKEpTVmFsdWUgYXJndW1lbnRzID0gZnVu
Y3Rpb25DYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpLmpzVmFsdWUoKSkK
ICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgICAgIEpTVmFsdWUgYXJndW1lbnRz
ID0gSlNWYWx1ZShuZXcgKGNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZyYW1lKSk7
CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShBcmd1bWVudHM6OmNyZWF0ZShj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUpKTsKICAgICAgICAgZnVu
Y3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRzOwogICAgICAg
ICBmdW5jdGlvbkNhbGxGcmFtZS0+cihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRz
OwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KIAotICAgIEFyZ3VtZW50cyogYXJn
dW1lbnRzID0gbmV3IChmdW5jdGlvbkNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGZ1bmN0
aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uQ2FsbEZyYW1lKTsKICAgICBhcmd1
bWVudHMtPmNvcHlSZWdpc3RlcnMoZnVuY3Rpb25DYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAg
ICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYyLDcgKzIwNjIsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3
IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJs
ZSgpKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oc3RhY2tGcmFt
ZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiAgICAgcmV0dXJu
IGFjdGl2YXRpb247CiB9CkBAIC0yMTEwLDcgKzIxMTAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
TihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcgKHN0YWNrRnJhbWUuZ2xv
YmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMq
IGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0
YWNrRnJhbWUuY2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
YXJndW1lbnRzKSk7CiB9CiAKQEAgLTIxMTgsNyArMjExOCw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5ldyAoc3RhY2tGcmFtZS5n
bG9iYWxEYXRhKSBBcmd1bWVudHMoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIEFyZ3VtZW50czo6Tm9Q
YXJhbWV0ZXJzKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRl
KCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBBcmd1bWVudHM6
Ok5vUGFyYW1ldGVycyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGFyZ3Vt
ZW50cykpOwogfQogCkBAIC0zMTI4LDcgKzMxMjgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihK
U09iamVjdCosIG9wX25ld19yCiAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogICAgIH0K
IAotICAgIHJldHVybiBuZXcgKHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgUmVnRXhwT2JqZWN0KHN0
YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAp
OworICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSgqc3RhY2tGcmFtZS5nbG9iYWxEYXRh
LCBzdGFja0ZyYW1lLmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
RXhwKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2JpdG9y
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJKHJldmlz
aW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDE0ICs1OSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICBwdWJsaWM6
CisgICAgICAgIGVudW0gTm9QYXJhbWV0ZXJzVHlwZSB7IE5vUGFyYW1ldGVycyB9OworICAgICAg
ICAKKyAgICAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50
cyhjYWxsRnJhbWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgQXJndW1l
bnRzKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgTm9QYXJhbWV0ZXJzVHlwZSBub1BhcmFtcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1l
bnRzKGNhbGxGcmFtZSwgbm9QYXJhbXMpOworICAgICAgICB9CisKICAgICAgICAgLy8gVXNlIGFu
IGVudW0gYmVjYXVzZSBvdGhlcndpc2UgZ2NjIGluc2lzdHMgb24gZG9pbmcgYSBtZW1vcnkKICAg
ICAgICAgLy8gcmVhZC4KICAgICAgICAgZW51bSB7IE1heEFyZ3VtZW50cyA9IDB4MTAwMDAgfTsK
LQotICAgICAgICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQorICAg
IAorICAgIHByaXZhdGU6CiAgICAgICAgIEFyZ3VtZW50cyhDYWxsRnJhbWUqKTsKICAgICAgICAg
QXJndW1lbnRzKENhbGxGcmFtZSosIE5vUGFyYW1ldGVyc1R5cGUpOworCisgICAgcHVibGljOgog
ICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSwxMSArNzksMTEgQEAgc3RhdGljIGlubGluZSBKU09iamVjdCogY29uc3RydWN0QXJyYXlX
aQogICAgICAgICB1aW50MzJfdCBuID0gYXJncy5hdCgwKS50b1VJbnQzMihleGVjKTsKICAgICAg
ICAgaWYgKG4gIT0gYXJncy5hdCgwKS50b051bWJlcihleGVjKSkKICAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5IHNpemUgaXMg
bm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZSgpLCBuLCBDcmVhdGVJbml0aWFsaXplZCk7CisgICAgICAgIHJldHVybiBKU0Fy
cmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKICAgICB9CiAKICAgICAvLyBvdGhlcndpc2Ug
dGhlIGFycmF5IGlzIGNvbnN0cnVjdGVkIHdpdGggdGhlIGFyZ3VtZW50cyBpbiBpdAotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGFyZ3MpOwog
fQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQXJy
YXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5Q29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQXJy
YXlQcm90b3R5cGU7CiAKICAgICBjbGFzcyBBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBBcnJheUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQXJyYXlQ
cm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQXJyYXlD
b25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEFycmF5UHJvdG90eXBlKiBhcnJQcm90b3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxBcnJh
eUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgQXJyYXlDb25zdHJ1Y3RvcihleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgYXJyUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgyLDcgKzU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGRlbGV0ZURvdWJsZSk7CiAgICAgfQogCi0gICAgSlNBcnJheSogcmVzT2JqID0gbmV3
IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3VudCwgQ3JlYXRlQ29tcGFjdCk7Cisg
ICAgSlNBcnJheSogcmVzT2JqID0gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpLCBkZWxldGVDb3Vu
dCwgQ3JlYXRlQ29tcGFjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSByZXNPYmo7CiAgICAgSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgaysrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDkgKzI3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFy
cmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhw
bGljaXQgQXJyYXlQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBw
cml2YXRlOgorICAgICAgICBBcnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQXJyYXlQcm90b3R5cGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8QXJyYXlQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBBcnJheVByb3RvdHlwZShnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Qm9vbGVhbkNvbnN0cnVjdG9yKEUKIC8vIEVDTUEgMTUu
Ni4yCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gbmV3IChleGVjKSBCb29s
ZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAg
Qm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCkt
PmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4
ZWMtPmdsb2JhbERhdGEoKSwganNCb29sZWFuKGFyZ3MuYXQoMCkudG9Cb29sZWFuKGV4ZWMpKSk7
CiAgICAgcmV0dXJuIG9iajsKIH0KQEAgLTcxLDcgKzcxLDcgQEAgQ2FsbFR5cGUgQm9vbGVhbkNv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YQogCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBpbW1lZGlhdGVCb29sZWFuVmFsdWUpCiB7Ci0gICAgQm9vbGVhbk9iamVj
dCogb2JqID0gbmV3IChleGVjKSBCb29sZWFuT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOworICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9i
amVjdC0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmotPnNldEludGVybmFsVmFs
dWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpbW1lZGlhdGVCb29sZWFuVmFsdWUpOwogICAgIHJldHVy
biBvYmo7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
OCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQm9vbGVhblByb3RvdHlwZTsK
IAogICAgIGNsYXNzIEJvb2xlYW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgQm9vbGVhblByb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuQ29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCb29sZWFuUHJvdG90eXBlKiBib29sUHJvdG90eXBl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8Qm9vbGVh
bkNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgQm9vbGVhbkNvbnN0cnVjdG9yKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlLCBib29sUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE1
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xlYW5PYmplY3QgOiBwdWJsaWMg
SlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEJvb2xlYW5P
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgcHJvdGVjdGVkOgorICAgICAg
ICBCb29sZWFuT2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgQm9vbGVhbk9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBC
b29sZWFuT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKICAgICAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVh
blByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJp
dmF0ZToKICAgICAgICAgQm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQm9vbGVhblBy
b3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgQm9v
bGVhblByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBEYXRl
SW5zdGFuY2UoZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAg
ICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5kYXRlU3Ry
dWN0dXJlKCksIHZhbHVlKTsKIH0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdFdpdGhEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIERhdGVQcm90b3R5cGU7CiAKICAgICBjbGFzcyBEYXRlQ29uc3RydWN0
b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6
CiAgICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSosIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgRGF0ZUNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGF0ZVByb3RvdHlw
ZSogZGF0ZVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPERhdGVDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIERhdGVDb25zdHJ1Y3Rv
cihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZGF0ZVByb3RvdHlwZSk7CisgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwyMCBAQCBuYW1lc3BhY2UgV1RGIHsKIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgRGF0ZUluc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVj
dCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAgRGF0ZUluc3RhbmNlKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGRvdWJsZSk7Ci0gICAgICAgIGV4cGxpY2l0IERhdGVJbnN0
YW5jZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKLQorICAgICAgICBEYXRlSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIERhdGVJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGRvdWJsZSBkYXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8RGF0ZUluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRGF0ZUluc3RhbmNlKGV4
ZWMsIHN0cnVjdHVyZSwgZGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIERhdGVJbnN0
YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlSW5zdGFuY2U+
KCpleGVjLT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3RydWN0dXJlKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgZG91YmxlIGludGVybmFsTnVtYmVyKCkgY29uc3QgeyByZXR1
cm4gaW50ZXJuYWxWYWx1ZSgpLnVuY2hlY2tlZEdldE51bWJlcigpOyB9CiAKICAgICAgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBP
YmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBEYXRlUHJvdG90eXBlIDogcHVibGljIERhdGVJ
bnN0YW5jZSB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIERhdGVQcm90b3R5
cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIERhdGVQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RGF0ZVByb3RvdHlw
ZT4oKmV4ZWMtPmhlYXAoKSkpIERhdGVQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDQzICs0
Miw0MyBAQCBzdGF0aWMgY29uc3QgY2hhciogc291cmNlVVJMUHJvcGVydHlOYW1lCiBKU09iamVj
dCogY3JlYXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmlu
ZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1
cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xv
YmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJ
bnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlRXZhbEVy
cm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2Up
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+
ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAg
cmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwg
Z2xvYmFsT2JqZWN0LT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBt
ZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1l
c3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9i
YWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yYW5nZUVycm9yQ29uc3RydWN0
b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFu
Y2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yYW5n
ZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpT
T2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5
KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xv
YmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVj
dCogY3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VVN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3ludGF4RXJyb3JDb25zdHJ1Y3Rvcigp
LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVR5cGVF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdl
KQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvcklu
c3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3Qt
PnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAg
IHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVz
c2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3Io
KS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5VUklFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVj
dCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQpA
QCAtMTY2LDEyICsxNjYsMTggQEAgSlNPYmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRl
KiBleAogfQogCiBjbGFzcyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24gOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcml2YXRlOgogICAgIFN0cmljdE1vZGVUeXBlRXJy
b3JGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICA6
IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIp
CiAgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCiAgICAgewogICAgIH0KKworcHVibGljOgor
ICAgIHN0YXRpYyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIFN0
cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
bWVzc2FnZSk7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7CkBA
IC0yMDUsNyArMjExLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChTdHJpY3RNb2RlVHlw
ZQogCiBKU1ZhbHVlIGNyZWF0ZVR5cGVFcnJvckZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpY3RNb2Rl
VHlwZUVycm9yRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbWVz
c2FnZSk7CisgICAgcmV0dXJuIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsy
OSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZTsKIAogICAg
IGNsYXNzIEVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAg
cHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBFcnJvclByb3RvdHlwZSopOwogCisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVycm9yUHJvdG90eXBlKiBlcnJQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgp
KSkgRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZXJyUHJv
dG90eXBlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAg
ICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lv
biA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzMiArMjUsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBFcnJvckluc3RhbmNlOjpzX2luZm8gPSB7ICJFcnJvciIsICZKU05v
bkZpbmFsT2JqZWN0OjpzX2luZm8sIDAsIDAgfTsKIAotRXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0
YW5jZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
IDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorRXJyb3JJbnN0YW5j
ZTo6RXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCiAg
ICAgLCBtX2FwcGVuZFNvdXJjZVRvTWVzc2FnZShmYWxzZSkKIHsKICAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwotICAgIHB1dERpcmVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cHJv
cGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcoZ2xvYmFsRGF0YSwgIiIpLCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1lcy0+bWVz
c2FnZSwganNTdHJpbmcoJmdsb2JhbERhdGEsICIiKSwgRG9udEVudW0pOwogfQogCi1FcnJvcklu
c3RhbmNlOjpFcnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCi0gICAgOiBKU05vbkZpbmFsT2Jq
ZWN0KCpnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVT
dHJpbmcmIG1lc3NhZ2UpCisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVj
dHVyZSkKICAgICAsIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlKGZhbHNlKQogewogICAgIEFTU0VS
VChpbmhlcml0cygmc19pbmZvKSk7Ci0gICAgcHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyhnbG9iYWxEYXRhLCBtZXNzYWdl
KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3Bl
cnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKCZnbG9iYWxEYXRhLCBtZXNzYWdlKSwgRG9udEVu
dW0pOwogfQogCi1FcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpjcmVhdGUoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbWVz
c2FnZSkKK0Vycm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdl
KQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEVycm9ySW5zdGFuY2UoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXJy
b3JJbnN0YW5jZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUsIG1lc3NhZ2UpOwogfQogCiBFcnJvckluc3RhbmNlKiBFcnJvckluc3RhbmNlOjpj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNz
YWdlKQogewogICAgIGlmIChtZXNzYWdlLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsK
LSAgICByZXR1cm4gbmV3IChleGVjKSBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgbWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPigqZXhlYy0+aGVhcCgpKSkgRXJyb3JJbnN0YW5j
ZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEVycm9ySW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgU3RydWN0dXJlKiwg
Y29uc3QgVVN0cmluZyYpOworICAgICAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKICAgICAgICAgc3RhdGlj
IEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIG1l
c3NhZ2UpOwogCiAKQEAgLTQ1LDggKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0Vycm9ySW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRh
KiwgU3RydWN0dXJlKik7Ci0gICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2UoSlNHbG9iYWxE
YXRhKiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOworICAgICAgICBleHBsaWNpdCBFcnJv
ckluc3RhbmNlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOworICAgICAgICBleHBsaWNpdCBF
cnJvckluc3RhbmNlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsK
IAogICAgICAgICBib29sIG1fYXBwZW5kU291cmNlVG9NZXNzYWdlOwogICAgIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBjb25zdCBDbGFzc0lu
Zm8gRXJyb3JQcm90b3R5cGU6OnNfaW5mbyA9CiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEVy
cm9yUHJvdG90eXBlKTsKIAogRXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgOiBFcnJvckluc3RhbmNlKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkK
KyAgICA6IEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCiB7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubmFtZSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJFcnJvciIpLCBE
b250RW51bSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFz
cyBFcnJvclByb3RvdHlwZSA6IHB1YmxpYyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEVycm9y
UHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEVycm9yUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgRXJy
b3JQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMCArNDIsMTYgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBJbnRl
cnJ1cHRlZEV4ZWN1dGlvbkVycm9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHJpdmF0
ZToKKyAgICBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuaW50
ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCiBw
dWJsaWM6Ci0gICAgSW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi0gICAgICAgIDogSlNOb25GaW5hbE9iamVjdCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+aW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICBzdGF0aWMg
SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKICAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxJbnRlcnJ1cHRlZEV4
ZWN1dGlvbkVycm9yPihnbG9iYWxEYXRhLmhlYXApKSBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
KGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZpcnR1YWwgQ29tcGxUeXBlIGV4Y2VwdGlvblR5
cGUoKSBjb25zdCB7IHJldHVybiBJbnRlcnJ1cHRlZDsgfQpAQCAtNTUsMTQgKzYxLDIwIEBAIHB1
YmxpYzoKIAogSlNPYmplY3QqIGNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOworICAgIHJldHVybiBJbnRlcnJ1
cHRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKmdsb2JhbERhdGEpOwogfQogCiBjbGFzcyBUZXJt
aW5hdGVkRXhlY3V0aW9uRXJyb3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRl
OgorICAgIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvclN0cnVjdHVyZS5nZXQoKSkKKyAgICB7CisgICAgfQorCiBwdWJs
aWM6Ci0gICAgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKLSAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT50
ZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgc3RhdGljIFRlcm1p
bmF0ZWRFeGVjdXRpb25FcnJvciogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxUZXJtaW5hdGVkRXhlY3V0aW9u
RXJyb3I+KGdsb2JhbERhdGEuaGVhcCkpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxE
YXRhKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIENvbXBsVHlwZSBleGNlcHRpb25UeXBlKCkgY29u
c3QgeyByZXR1cm4gVGVybWluYXRlZDsgfQpAQCAtNzIsNyArODQsNyBAQCBwdWJsaWM6CiAKIEpT
T2JqZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIFRlcm1pbmF0ZWRFeGVjdXRpb25F
cnJvcjo6Y3JlYXRlKCpnbG9iYWxEYXRhKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
OCArOTAsOCBAQCBQcm9ncmFtRXhlY3V0YWJsZTo6flByb2dyYW1FeGVjdXRhYmxlKCkKIAogY29u
c3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRnVuY3Rpb25FeGVj
dXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwogCi1GdW5jdGlvbkV4
ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNv
bnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3Jj
ZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpblN0
cmljdENvbnRleHQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKLSAgICA6IFNjcmlwdEV4
ZWN1dGFibGUoZ2xvYmFsRGF0YS0+ZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBn
bG9iYWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4dCkKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3Vt
ZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGluU3RyaWN0Q29udGV4
dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgIDogU2NyaXB0RXhlY3V0YWJsZShn
bG9iYWxEYXRhLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgZ2xvYmFsRGF0YSwg
c291cmNlLCBpblN0cmljdENvbnRleHQpCiAgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKDAp
CiAgICAgLCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyhmb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgLCBt
X3BhcmFtZXRlcnMocGFyYW1ldGVycykKQEAgLTQ4MSw3ICs0ODEsNyBAQCBGdW5jdGlvbkV4ZWN1
dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9
IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOwogICAgIEFTU0VS
VChib2R5KTsKIAotICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJn
dW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNTdHJpY3RNb2RlKCksIGJvZHkt
PmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICByZXR1cm4gRnVuY3Rpb25FeGVjdXRh
YmxlOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJj
ZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNT
dHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKIH0KIAogVVN0
cmluZyBGdW5jdGlvbkV4ZWN1dGFibGU6OnBhcmFtU3RyaW5nKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDkxMDI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw4ICs1Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKICAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQgPSAtMTsKLSAg
ICAKLSAgICBwdWJsaWM6CisKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEV4ZWN1dGFibGVCYXNl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1Q
YXJhbWV0ZXJzKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQog
ICAgICAgICAgICAgLCBtX251bVBhcmFtZXRlcnNGb3JDYWxsKG51bVBhcmFtZXRlcnMpCkBAIC02
NCw2ICs2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGZpbmFsaXplci5sZWFr
SGFuZGxlKCk7CiAjZW5kaWYKICAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBFeGVjdXRhYmxlQmFzZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBudW1QYXJhbWV0ZXJzKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXhlY3V0YWJsZUJhc2U+KGdsb2Jh
bERhdGEuaGVhcCkpIEV4ZWN1dGFibGVCYXNlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgbnVtUGFy
YW1ldGVycyk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29u
c3QKICAgICAgICAgewpAQCAtMTY2LDEzICsxNzIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFjYWxsVGh1bmspCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIE5hdGl2ZUV4ZWN1dGFibGUo
Z2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29kZSgpLCBjb25zdHJ1Y3Rvcik7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShn
bG9iYWxEYXRhLCBKSVRDb2RlOjpIb3N0RnVuY3Rpb24oY2FsbFRodW5rKSwgZnVuY3Rpb24sIEpJ
VENvZGU6Okhvc3RGdW5jdGlvbihjb25zdHJ1Y3RUaHVuayksIGNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBKSVRDb2RlKCksIGZ1
bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVF
eGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGU6Okhvc3RGdW5jdGlvbihjYWxsVGh1bmspLCBm
dW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNvbnN0cnVjdFRodW5rKSwgY29uc3RydWN0
b3IpOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlv
biwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5h
dGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFs
RGF0YSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTIx
MywxMyArMjE5LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0
YWJsZSA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBTY3Jp
cHRFeGVjdXRhYmxlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKLSAg
ICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoKmdsb2JhbERhdGEsIHN0cnVjdHVyZSwgTlVNX1BB
UkFNRVRFUlNfTk9UX0NPTVBJTEVEKQorICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkKKyAgICAgICAgICAgIDogRXhlY3V0YWJs
ZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQp
CiAgICAgICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgICwgbV9mZWF0dXJl
cyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVGZWF0dXJlIDogMCkKICAgICAgICAgewog
I2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCi0gICAgICAgICAgICBpZiAoU2FtcGxpbmdU
b29sKiBzYW1wbGVyID0gZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkKKyAgICAg
ICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9iYWxEYXRhLmludGVycHJldGVy
LT5zYW1wbGVyKCkpCiAgICAgICAgICAgICAgICAgc2FtcGxlci0+bm90aWZ5T2ZTY29wZSgqZ2xv
YmFsRGF0YSwgdGhpcyk7CiAjZWxzZQogICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbERh
dGEpOwpAQCAtMjkwLDcgKzI5NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAqbV9ldmFsQ29kZUJsb2NrOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEV2YWxF
eGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIHsgcmV0dXJuIG5ldyAoZXhlYykgRXZhbEV4ZWN1
dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7IH0KKyAgICAgICAgc3RhdGlj
IEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkp
KSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0KTsgCisgICAg
ICAgIH0KIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUmIGdlbmVyYXRlZEpJVENv
ZGUoKQpAQCAtMzE5LDcgKzMyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIFByb2dyYW1FeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgKGV4ZWMpIFByb2dyYW1FeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UHJvZ3JhbUV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkp
KSBQcm9ncmFtRXhlY3V0YWJsZShleGVjLCBzb3VyY2UpOwogICAgICAgICB9CiAKICAgICAgICAg
flByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC0zNzIsMTcgKzM4MSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyog
cGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxh
c3RMaW5lKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBGdW5jdGlv
bkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFt
ZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KCpleGVjLT5o
ZWFwKCkpKSBGdW5jdGlvbkV4ZWN1dGFibGUoZXhlYywgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNB
cmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RM
aW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNy
ZWF0ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9u
UGFyYW1ldGVycyogcGFyYW1ldGVycywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0
TGluZSwgaW50IGxhc3RMaW5lKQorICAgICAgICBzdGF0aWMgRnVuY3Rpb25FeGVjdXRhYmxlKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlv
blBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIGludCBmaXJz
dExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
Z2xvYmFsRGF0YSkgRnVuY3Rpb25FeGVjdXRhYmxlKGdsb2JhbERhdGEsIG5hbWUsIHNvdXJjZSwg
Zm9yY2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCwgZmlyc3RM
aW5lLCBsYXN0TGluZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8RnVu
Y3Rpb25FeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBGdW5jdGlvbkV4ZWN1dGFibGUoZ2xv
YmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlz
SW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKICAgICAgICAgfQogCiAgICAg
ICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5j
dGlvbihleGVjLCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAgICAgICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgc2NvcGVDaGFpbik7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIC8vIFJldHVybnMgZWl0aGVyIGNhbGwgb3IgY29uc3RydWN0IGJ5dGVjb2RlLiBU
aGlzIGNhbiBiZSBhcHByb3ByaWF0ZQpAQCAtNDc5LDcgKzQ4OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEqLCBjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1
bmN0aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7Cisg
ICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShKU0dsb2JhbERhdGEmLCBjb25zdCBJZGVudGlmaWVy
JiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0
aW9uUGFyYW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFy
YW1ldGVycyosIGJvb2wsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSk7CiAKICAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsOCArMTEyLDggQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFs
RQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBleGNlcHRpb24pOwogICAgIH0KIAot
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gbmV3IChleGVjKSBTY29wZUNoYWluTm9k
ZSgwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmdsb2Jh
bFRoaXNWYWx1ZSgpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uLCBzY29wZUNoYWluKTsKKyAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IFNj
b3BlQ2hhaW5Ob2RlOjpjcmVhdGUoZXhlYywgMCwgZ2xvYmFsT2JqZWN0LCAmZ2xvYmFsRGF0YSwg
Z2xvYmFsT2JqZWN0LCBleGVjLT5nbG9iYWxUaGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBmdW5jdGlvbiwgc2NvcGVDaGFpbik7CiB9CiAKIC8vIEVDTUEg
MTUuMy4yIFRoZSBGdW5jdGlvbiBDb25zdHJ1Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEw
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlOwogCiAgICAgY2xhc3MgRnVuY3Rpb25Db25zdHJ1Y3Rv
ciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgRnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CisgICAgCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgRnVuY3Rpb25Db25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEZ1bmN0
aW9uUHJvdG90eXBlKiBmdW5jUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkp
IEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGZ1bmNQ
cm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENv
bnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTAgKzQ1LDEwIEBAIEZ1bmN0
aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGUKIAogdm9pZCBGdW5jdGlvblByb3Rv
dHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBmdW5jdGlvblN0cnVjdHVyZSwgSlNGdW5jdGlv
bioqIGNhbGxGdW5jdGlvbiwgSlNGdW5jdGlvbioqIGFwcGx5RnVuY3Rpb24pCiB7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0p
OwotICAgICphcHBseUZ1bmN0aW9uID0gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBs
eSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbihleGVjLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBm
dW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOworICAgICphcHBseUZ1bmN0aW9uID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUs
IDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSk7
CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCAqYXBwbHlGdW5j
dGlvbiwgRG9udEVudW0pOwotICAgICpjYWxsRnVuY3Rpb24gPSBuZXcgKGV4ZWMpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCk7CisgICAgKmNhbGxGdW5jdGlv
biA9IEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0
dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxs
KTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICpjYWxsRnVu
Y3Rpb24sIERvbnRFbnVtKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDEwICsyNiwxNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5j
dGlvblByb3RvdHlwZSA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKLSAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRp
ZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0
dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlv
bik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBGdW5jdGlvblByb3RvdHlwZSogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxGdW5jdGlvblByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uUHJvdG90
eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1
bmN0aW9uLCBKU0Z1bmN0aW9uKiogYXBwbHlGdW5jdGlvbik7CisgICAgICAgIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG8sIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiA5MTAyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxMiArMzYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gZm9yIGEgcHJv
cGVydHkuCiAgICAgY2xhc3MgR2V0dGVyU2V0dGVyIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVQ7Ci0gICAgcHVibGljOgorCisgICAgcHJpdmF0ZTogICAgICAgIAog
ICAgICAgICBHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBKU0Nl
bGwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0dGVyU2V0dGVyU3Ry
dWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIEdldHRlclNldHRlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEdldHRlclNldHRlcj4oKmV4
ZWMtPmhlYXAoKSkpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNPYmpl
Y3QqIGdldHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fZ2V0dGVyLmdldCgpOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBUElWYWx1
ZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgICAgICAKKyAgICAgICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVyKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSAKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPigqZXhlYy0+aGVh
cCgpKSkgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdmFsdWUpOworICAgICAgICB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCkBAIC01Niw3ICs2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5l
IEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBUElWYWx1ZVdyYXBwZXIoZXhl
YywgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVj
LCB2YWx1ZSk7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgSlNWYWx1ZSBKU0FjdGl2YXRpb246OmFyZ3Vt
ZW50c0dldHRlcihFeAogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIGludCByZWFsQXJn
dW1lbnRzUmVnaXN0ZXIgPSB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVn
aXN0ZXIpOwogCi0gICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlKG5ldyAoY2FsbEZyYW1l
KSBBcmd1bWVudHMoY2FsbEZyYW1lKSk7CisgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVl
KEFyZ3VtZW50czo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUpKTsK
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJndW1lbnRz
OwogICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihyZWFsQXJndW1lbnRzUmVnaXN0ZXIpID0gYXJn
dW1lbnRzOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3Rp
dmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVyOwogICAgIAogICAgIGNsYXNzIEpTQWN0
aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBwcml2YXRlOgogICAgICAg
ICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKLSAgICBwdWJsaWM6CiAgICAgICAgIEpT
QWN0aXZhdGlvbihDYWxsRnJhbWUqLCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBKU0FjdGl2YXRpb24qIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmNFeGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
SlNBY3RpdmF0aW9uPihnbG9iYWxEYXRhLmhlYXApKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBm
dW5jRXhlYyk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gOTEwMjUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDE0ICs2MCwzMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0FycmF5
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgV2Fsa2Vy
OwogCi0gICAgcHVibGljOgotICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsK
LQorICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNBcnJheShKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUq
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNyZWF0aW9uTW9kZSk7CiAgICAgICAgIEpT
QXJyYXkoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgQXJnTGlzdCYgaW5pdGlhbFZh
bHVlcyk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgSlNBcnJheShWUHRyU3RlYWxp
bmdIYWNrVHlwZSk7CiAgICAgICAgIHZpcnR1YWwgfkpTQXJyYXkoKTsKIAorICAgICAgICBzdGF0
aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU0FycmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
aW5pdGlhbExlbmd0aCwgQXJyYXlDcmVhdGlvbk1vZGUgY3JlYXRlTW9kZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBpbml0aWFsTGVuZ3RoLCBjcmVh
dGVNb2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxWYWx1ZXMpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Y2VsbC0+fkpTQ2VsbCgpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lk
KiBhbGxvY2F0ZUNlbGwoSGVhcCYgaGVhcCkKKyAgICB7CisgICAgICAgIHJldHVybiBoZWFwLmFs
bG9jYXRlKHNpemVvZihUKSk7CisgICAgfQorICAgICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gSlNDZWxsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMjQgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmpl
Y3QgQmFzZTsKIAotICAgIHB1YmxpYzoKICAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXIm
LCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0
aXZlRXhlY3V0YWJsZSopOwogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9u
RXhlY3V0YWJsZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuYykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpl
eGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBs
ZW5ndGgsIGlkZW50LCBuYXRpdmVGdW5jKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBOYXRpdmVFeGVjdXRhYmxlKiBuYXRpdmVFeGVjKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkp
IEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQs
IG5hdGl2ZUV4ZWMpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMs
IGZ1bmNFeGVjLCBzY29wZUNoYWluKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdmly
dHVhbCB+SlNGdW5jdGlvbigpOwogCiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUoRXhlY1N0
YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoSlNPYmplY3QqIHRoaXMKICAgICBzdHJ1Y3R1
cmUoKS0+ZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpOwogCiAgICAgbV9nbG9iYWxE
YXRhID0gSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOwotICAgIG1fZ2xvYmFsU2NvcGVD
aGFpbi5zZXQoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbmV3IChtX2dsb2JhbERhdGEuZ2V0KCkpIFNj
b3BlQ2hhaW5Ob2RlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhpc1ZhbHVl
KSk7CisgICAgbV9nbG9iYWxTY29wZUNoYWluLnNldCgqbV9nbG9iYWxEYXRhLCB0aGlzLCBTY29w
ZUNoYWluTm9kZTo6Y3JlYXRlKDAsIHRoaXMsIG1fZ2xvYmFsRGF0YS5nZXQoKSwgdGhpcywgdGhp
c1ZhbHVlKSk7CiAKICAgICBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpLT5pbml0KDAsIDAs
IG1fZ2xvYmFsU2NvcGVDaGFpbi5nZXQoKSwgQ2FsbEZyYW1lOjpub0NhbGxlcigpLCAwLCAwKTsK
IApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUg
cHJvdG8KIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhl
YygpOwogCi0gICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBuZXcgKGV4ZWMpIEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsg
Ly8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlz
IGNyZWF0ZWQuCisgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsg
Ly8gVGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlz
IGNyZWF0ZWQuCiAgICAgbV9mdW5jdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0
dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSAwOwpAQCAtMTk1LDcgKzE5NSw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2Z1bmN0aW9u
UHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgdGhpcywgbV9mdW5jdGlvblN0
cnVjdHVyZS5nZXQoKSwgJmNhbGxGdW5jdGlvbiwgJmFwcGx5RnVuY3Rpb24pOwogICAgIG1fY2Fs
bEZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNhbGxGdW5jdGlvbik7CiAg
ICAgbV9hcHBseUZ1bmN0aW9uLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGFwcGx5RnVu
Y3Rpb24pOwotICAgIG1fb2JqZWN0UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRo
aXMsIG5ldyAoZXhlYykgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIHRoaXMsIE9iamVjdFByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkpKSk7CisgICAg
bV9vYmplY3RQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgT2JqZWN0UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CiAKICAgICBtX2VtcHR5T2JqZWN0
U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LT5pbmhlcml0b3JJRChleGVjLT5nbG9iYWxEYXRhKCkpKTsKQEAgLTIwNiw1NCArMjA2LDU0IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2NhbGxiYWNr
Q29uc3RydWN0b3JTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxs
YmFja0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fY2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhH
bG9iYWxPYmplY3Q+OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9hcnJheVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xv
YmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEFycmF5UHJvdG90eXBlKHRoaXMsIEFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOwogICAgIG1fYXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgSlNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJh
eVByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9hcnJheVByb3RvdHlwZS5nZXQoKSkpOwogCi0g
ICAgbV9zdHJpbmdQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChl
eGVjKSBTdHJpbmdQcm90b3R5cGUoZXhlYywgdGhpcywgU3RyaW5nUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX3N0cmluZ1Byb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBTdHJp
bmdQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwog
ICAgIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMs
IFN0cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9zdHJp
bmdQcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fYm9vbGVhblByb3RvdHlwZS5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgdGhp
cywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9ib29sZWFuUHJvdG90eXBlLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBCb29sZWFuUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX2Jvb2xlYW5PYmplY3RTdHJ1Y3R1
cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9ib29sZWFuUHJvdG90eXBlLmdldCgpKSk7CiAK
LSAgICBtX251bWJlclByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcg
KGV4ZWMpIE51bWJlclByb3RvdHlwZShleGVjLCB0aGlzLCBOdW1iZXJQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIG1fbnVtYmVyUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE51
bWJlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CiAgICAgbV9udW1iZXJPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgTnVtYmVyT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX251
bWJlclByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9kYXRlUHJvdG90eXBlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRGF0ZVByb3RvdHlwZShleGVjLCB0aGlzLCBE
YXRlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIERhdGVQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOwogICAgIG1fZGF0ZVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCB0aGlzLCBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IG1fZGF0ZVByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVn
RXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5vRmxhZ3MpOworICAgIFJlZ0V4
cCogZW1wdHlSZWdleCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiIsIE5v
RmxhZ3MpOwogICAgIAotICAgIG1fcmVnRXhwUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRh
KCksIHRoaXMsIG5ldyAoZXhlYykgUmVnRXhwUHJvdG90eXBlKGV4ZWMsIHRoaXMsIFJlZ0V4cFBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpLCBlbXB0eVJlZ2V4KSk7CisgICAgbV9yZWdFeHBQcm90b3R5cGUuc2V0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVnZXgpKTsKICAgICBtX3JlZ0V4cFN0cnVj
dHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CiAK
ICAgICBtX21ldGhvZENhbGxEdW1teS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBjb25z
dHJ1Y3RFbXB0eU9iamVjdChleGVjKSk7CiAKLSAgICBFcnJvclByb3RvdHlwZSogZXJyb3JQcm90
b3R5cGUgPSBuZXcgKGV4ZWMpIEVycm9yUHJvdG90eXBlKGV4ZWMsIHRoaXMsIEVycm9yUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpOworICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IEVycm9yUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9l
cnJvclN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBFcnJvckluc3RhbmNl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJvclByb3RvdHlwZSkpOwog
CiAgICAgLy8gQ29uc3RydWN0b3JzCiAKLSAgICBKU0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0g
bmV3IChleGVjKSBPYmplY3RDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIGZ1bmN0aW9u
Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uQ29uc3RydWN0b3IoZXhlYywgdGhpcywg
RnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpOwot
ICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQXJyYXlDb25zdHJ1Y3Rv
cihleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheVByb3RvdHlwZS5n
ZXQoKSk7Ci0gICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgU3RyaW5n
Q29uc3RydWN0b3IoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3N0cmlu
Z1Byb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBib29sZWFuQ29uc3RydWN0b3IgPSBuZXcg
KGV4ZWMpIEJvb2xlYW5Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBCb29sZWFuQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogbnVtYmVyQ29u
c3RydWN0b3IgPSBuZXcgKGV4ZWMpIE51bWJlckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIE51bWJl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2Vs
bCogZGF0ZUNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBEYXRlQ29uc3RydWN0b3IoZXhlYywgdGhp
cywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsKKyAgICBK
U0NlbGwqIG9iamVjdENvbnN0cnVjdG9yID0gT2JqZWN0Q29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KTsKKyAgICBKU0NlbGwqIGZ1bmN0aW9uQ29uc3RydWN0b3IgPSBGdW5jdGlvbkNvbnN0cnVjdG9y
OjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogYXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV9hcnJheVByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBzdHJpbmdDb25zdHJ1Y3RvciA9
IFN0cmluZ0NvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgU3RyaW5nQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBib29sZWFuQ29u
c3RydWN0b3IgPSBCb29sZWFuQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBCb29sZWFu
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2Vs
bCogbnVtYmVyQ29uc3RydWN0b3IgPSBOdW1iZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9udW1iZXJQcm90b3R5cGUuZ2V0KCkpOwor
ICAgIEpTQ2VsbCogZGF0ZUNvbnN0cnVjdG9yID0gRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgRGF0ZUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9kYXRlUHJvdG90eXBlLmdldCgpKTsK
IAotICAgIG1fcmVnRXhwQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
bmV3IChleGVjKSBSZWdFeHBDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fcmVnRXhwUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV9yZWdFeHBDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBSZWdFeHBDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90b3R5
cGUuZ2V0KCkpKTsKIAotICAgIG1fZXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIGVycm9yUHJvdG90eXBlKSk7CisgICAgbV9lcnJvckNvbnN0cnVj
dG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJyb3JQcm90b3R5cGUpKTsK
IAogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1cmUgPSBOYXRpdmVF
cnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyb3JQ
cm90b3R5cGUpOwogICAgIFN0cnVjdHVyZSogbmF0aXZlRXJyb3JTdHJ1Y3R1cmUgPSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKTsKLSAgICBtX2V2YWxFcnJvckNvbnN0cnVjdG9yLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVT
dHJ1Y3R1cmUsICJFdmFsRXJyb3IiKSk7Ci0gICAgbV9yYW5nZUVycm9yQ29uc3RydWN0b3Iuc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlw
ZVN0cnVjdHVyZSwgIlJhbmdlRXJyb3IiKSk7Ci0gICAgbV9yZWZlcmVuY2VFcnJvckNvbnN0cnVj
dG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTmF0aXZlRXJyb3JD
b25zdHJ1Y3RvcihleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQ
cm90b3R5cGVTdHJ1Y3R1cmUsICJSZWZlcmVuY2VFcnJvciIpKTsKLSAgICBtX3N5bnRheEVycm9y
Q29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlN5bnRheEVycm9yIikpOwotICAgIG1fdHlwZUVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlR5cGVFcnJvciIpKTsKLSAgICBtX1VSSUVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlVSSUVycm9yIikpOworICAgIG1fZXZhbEVy
cm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIpKTsKKyAgICBtX3JhbmdlRXJy
b3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2
ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJvciIpKTsKKyAgICBtX3JlZmVyZW5j
ZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG5hdGl2ZUVycm9yU3RydWN0dXJlLCBu
YXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJlZmVyZW5jZUVycm9yIikpOworICAgIG1f
c3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1
cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiU3ludGF4RXJyb3IiKSk7CisgICAg
bV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRp
dmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1
cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVHlwZUVycm9yIikpOworICAgIG1f
VVJJRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUs
IG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiVVJJRXJyb3IiKSk7CiAKICAgICBtX29i
amVjdFByb3RvdHlwZS0+cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5n
bG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwgb2JqZWN0Q29u
c3RydWN0b3IsIERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5wdXREaXJlY3RG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CkBA
IC0yODEsMTUgKzI4MSwxNSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoZXhlYywgIlR5cGVFcnJvciIpLCBtX3R5cGVFcnJvckNvbnN0cnVj
dG9yLmdldCgpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbihleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIG1f
VVJJRXJyb3JDb25zdHJ1Y3Rvci5nZXQoKSwgRG9udEVudW0pOwogCi0gICAgbV9ldmFsRnVuY3Rp
b24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4
ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOworICAgIG1fZXZhbEZ1bmN0aW9uLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCBtX2Z1
bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZXZhbCwgZ2xv
YmFsRnVuY0V2YWwpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMsIG1fZXZhbEZ1bmN0aW9uLmdldCgpLCBEb250RW51bSk7CiAKICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRl
bnRpZmllcihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywgdGhpcywg
TWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKKyAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk1hdGgiKSwgTWF0aE9iamVjdDo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRh
KCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4iKSwganNOYU4o
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSW5maW5pdHkiKSwganNOdW1iZXIoc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAi
dW5kZWZpbmVkIiksIGpzVW5kZWZpbmVkKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkpTT04i
KSwgbmV3IChleGVjKSBKU09OT2JqZWN0KHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSkKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhl
YywgIkpTT04iKSwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSkKICAgICB9OwogICAgIGFkZFN0YXRpY0dsb2JhbHMo
c3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0aWNHbG9iYWxzKSk7CiAKQEAgLTM5
NSwxMSArMzk1LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzaXplUmVnaXN0ZXJzKHNpegog
ICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgpLCBuZXdT
aXplKTsKIH0KIAotdm9pZCogSlNHbG9iYWxPYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5o
ZWFwLmFsbG9jYXRlKHNpemUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNH
bG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNvdW50KQogewogICAgIHJl
c2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
OTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsOCArMTIyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGJvb2wgbV9ldmFsRW5hYmxlZDsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCwgSlNHbG9iYWxEYXRhKik7Ci0KICAgICAgICAgZXhwbGljaXQgSlNH
bG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
ICZtX3N5bWJvbFRhYmxlLCAwKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDAp
CkBAIC0yODcsOCArMjg1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVzZXQo
SlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVu
a25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KTsKLQotICAgICAgICB2b2lkKiBv
cGVyYXRvciBuZXcoc2l6ZV90KTsgLy8gY2FuIG9ubHkgYmUgYWxsb2NhdGVkIHdpdGggSlNHbG9i
YWxEYXRhCiAgICAgfTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVjdChKU1Zh
bHVlKTsKQEAgLTM3OCw3ICszNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJy
YXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCkpOwor
ICAgICAgICByZXR1cm4gSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpKTsKICAgICB9CiAgICAgCiAgICAgaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjKQpAQCAtMzg4LDcgKzM4NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpbml0aWFsTGVuZ3RoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNB
cnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
aW5pdGlhbExlbmd0aCwgQ3JlYXRlSW5pdGlhbGl6ZWQpOworICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJbml0aWFsaXplZCk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKQpAQCAtNDAwLDcgKzM5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHsKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdmFsdWVzOwogICAgICAgICB2YWx1ZXMu
YXBwZW5kKHNpbmdsZUl0ZW1WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQXJy
YXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZh
bHVlcyk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7CiAgICAgfQogCiAgICAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
aW5nbGVJdGVtVmFsdWUpCkBAIC00MTAsNyArNDA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMpCiAgICAgewotICAg
ICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4gSlNBcnJh
eTo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZSgpLCB2YWx1ZXMpOwogICAgIH0KIAogICAgIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJh
eShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNywxMSArMzcsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gaW4g
Y2VydGFpbiBTcXVpcnJlbEZpc2ggYnl0ZWNvZGVzIC0tIGVmZmVjdGl2ZWx5IGl0IGp1c3Qgc2ls
ZW50bHkgY29uc3VtZXMKICAgICAvLyBhbnkgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gdGhlIHJl
c3VsdCBvZiBhIGZhaWxlZCB0b09iamVjdCBjYWxsLgogICAgIGNsYXNzIEpTTm90QW5PYmplY3Qg
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAg
ICAgICAgIEpTTm90QW5PYmplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsRGF0YSgpLm5vdEFu
T2JqZWN0U3RydWN0dXJlLmdldCgpKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNOb3RBbk9iamVjdCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PEpTTm90QW5PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAg
ICAgICB9CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHJldmlzaW9uIDkx
MDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw5ICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBT
dHJpbmdpZmllcjsKIAogICAgIGNsYXNzIEpTT05PYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgSlNPTk9i
amVjdChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgSlNPTk9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU09OT2JqZWN0PigqZXhlYy0+aGVhcCgp
KSkgSlNPTk9iamVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5m
byk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgSlNPYmplY3Q6OmRl
ZmluZUdldHRlcihFeGVjU3RhdGUqIGUKIAogICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0
ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOwor
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhl
Yyk7CiAgICAgcHV0RGlyZWN0SW50ZXJuYWwoZ2xvYmFsRGF0YSwgcHJvcGVydHlOYW1lLCBnZXR0
ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBHZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAgLy8gcHV0
RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5
LiBGb3IKQEAgLTM0Nyw3ICszNDcsNyBAQCB2b2lkIEpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIoRXhl
Y1N0YXRlKiBlCiAgICAgfQogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgR2V0dGVy
U2V0dGVyKiBnZXR0ZXJTZXR0ZXIgPSBuZXcgKGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAg
ICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKGV4ZWMp
OwogICAgIHB1dERpcmVjdEludGVybmFsKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1l
LCBnZXR0ZXJTZXR0ZXIsIGF0dHJpYnV0ZXMgfCBTZXR0ZXIsIHRydWUsIHNsb3QpOwogCiAgICAg
Ly8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHBy
b3BlcnR5LiBGb3IKQEAgLTYzMyw3ICs2MzMsNyBAQCBzdGF0aWMgYm9vbCBwdXREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiB7CiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRv
cigpIHx8IGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIGlmIChkZXNj
cmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSAmJiBvbGREZXNjcmlwdG9yLmlzQWNjZXNzb3JE
ZXNjcmlwdG9yKCkpIHsKLSAgICAgICAgICAgIEdldHRlclNldHRlciogYWNjZXNzb3IgPSBuZXcg
KGV4ZWMpIEdldHRlclNldHRlcihleGVjKTsKKyAgICAgICAgICAgIEdldHRlclNldHRlciogYWNj
ZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICAgICAgICAgIGlmIChvbGRE
ZXNjcmlwdG9yLmdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8PSBHZXR0
ZXI7CiAgICAgICAgICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcihleGVjLT5nbG9iYWxEYXRh
KCksIGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTks
NyArMzU5LDcgQEAgQ09NUElMRV9BU1NFUlQoKEpTRmluYWxPYmplY3RfaW5saW5lU3RvcgogICAg
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIEpTRmluYWxPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBKU0ZpbmFsT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0ZpbmFsT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgSlNGaW5hbE9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVy
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4
ICs2MSw4IEBAIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKICAgICAg
ICAgIW8tPnN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgIW8tPnN0
cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpICYmCiAgICAgICAgICFvLT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCiAgICAgICAg
IG51bUNhY2hlYWJsZVNsb3RzID0gby0+c3RydWN0dXJlKCktPnByb3BlcnR5U3RvcmFnZVNpemUo
KTsKLQotICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRlcmF0b3Ig
PSBuZXcgKGV4ZWMpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhlYywgcHJvcGVydHlOYW1lcy5k
YXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKKyAgICAKKyAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBqc1Byb3BlcnR5TmFtZUl0ZXJhdG9yID0gbmV3IChhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcj4oKmV4ZWMtPmhlYXAoKSkpIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IoZXhl
YywgcHJvcGVydHlOYW1lcy5kYXRhKCksIG51bUNhY2hlYWJsZVNsb3RzKTsKIAogICAgIGlmIChv
LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgIHJldHVybiBqc1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogY3JlYXRlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0Kik7CisgICAgICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIHByb3BlcnR5TmFt
ZUFycmF5RGF0YSwgc2l6ZV90IG51bUNhY2hlYWJsZVNsb3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPigqZXhl
Yy0+aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVBcnJh
eURhdGEsIG51bUNhY2hlYWJsZVNsb3QpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwx
MCArMTk5LDEwIEBAIEpTU3RyaW5nKiBKU1N0cmluZzo6c3Vic3RyaW5nRnJvbVJvcGUoRXgKICAg
ICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgIH0KICAgICBpZiAoc3Vic3RyaW5nRmliZXJDb3Vu
dCA9PSAxKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxE
YXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0pOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0
ZSgqZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJzWzBdKTsKICAgICBpZiAoc3Vic3RyaW5nRmli
ZXJDb3VudCA9PSAyKQotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVyc1sxXSk7Ci0gICAg
cmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmli
ZXJzWzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0sIHN1YnN0cmluZ0ZpYmVyc1syXSk7CisgICAgICAg
IHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0s
IHN1YnN0cmluZ0ZpYmVyc1sxXSk7CisgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdLCBzdWJzdHJpbmdG
aWJlcnNbMl0pOwogfQogCiBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNT
dGF0ZSogZXhlYywgVUNoYXIgY2hhcmFjdGVyLCBjb25zdCBVU3RyaW5nJiByZXBsYWNlbWVudCkK
QEAgLTI1NCw3ICsyNTQsNyBAQCBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4
ZWNTCiAgICAgfQogCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2Jh
bERhdGEoKTsKLSAgICByZXR1cm4gSlNWYWx1ZShuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGds
b2JhbERhdGEsIGJ1aWxkZXIucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWUoSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYnVpbGRlci5yZWxlYXNlKCkpKTsKIH0KIAogSlNTdHJp
bmcqIEpTU3RyaW5nOjpnZXRJbmRleFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSkKQEAgLTI5OCw3ICsyOTgsNyBAQCBVU3RyaW5nIEpTU3RyaW5nOjp0b1N0cmluZyhFeGVjU3Rh
dGUqIGV4CiAKIGlubGluZSBTdHJpbmdPYmplY3QqIFN0cmluZ09iamVjdDo6Y3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmlu
ZykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBzdHJpbmcpOworICAg
IHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBT
dHJpbmdPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpLCBzdHJpbmcpOwogfQogCiBKU09iamVjdCogSlNTdHJpbmc6OnRvT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gOTEw
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODAsOSArMTgwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAg
ICAgICAgVmVjdG9yPFdvcmtJdGVtLCAxNj4gbV93b3JrUXVldWU7CiAgICAgICAgIH07CisgICAg
ICAgIAorICAgICAgICBlbnVtIEhhc090aGVyT3duZXJUeXBlIHsgSGFzT3RoZXJPd25lciB9Owog
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0
IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVl
Lmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAgICAgLCBt
X2ZpYmVyQ291bnQoMCkKQEAgLTE5MSwyNSArMTk0LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHZhbHVlLmlt
cGwoKS0+Y29zdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5
cGUgeyBIYXNPdGhlck93bmVyIH07Ci0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQotICAgICAg
ICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5n
ZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBV
U3RyaW5nJiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCisgICAgICAgICAgICA6IEpTQ2VsbChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAg
ICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgwKQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIEpTU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFz
T3RoZXJPd25lclR5cGUpCi0gICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUsIEhhc090aGVyT3du
ZXJUeXBlKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLT5sZW5ndGgo
KSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgICAgICwgbV9maWJlckNv
dW50KDApCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQ
YXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERh
dGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmco
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFJvcGVJbXBsPiByb3BlKQorICAg
ICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHJvcGUtPmxlbmd0aCgpKQogICAgICAgICAg
ICAgLCBtX2ZpYmVyQ291bnQoMSkKICAgICAgICAgewpAQCAtMjE3LDggKzIxOSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3Ry
dWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAg
SlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBK
U1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5n
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcq
IHMxLCBKU1N0cmluZyogczIpCisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgoczEt
Pmxlbmd0aCgpICsgczItPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmli
ZXJDb3VudCkKICAgICAgICAgewpAQCAtMjMwLDggKzIzMiw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBz
dHJpbmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEs
IGNvbnN0IFVTdHJpbmcmIHUyKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIGNv
bnN0IFVTdHJpbmcmIHUyKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHMxLT5s
ZW5ndGgoKSArIHUyLmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJD
b3VudCkKICAgICAgICAgewpAQCAtMjQzLDggKzI0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBhIG5ldyBzdHJp
bmcgYnkgY29uY2F0ZW5hdGluZyBzMSAmIHMyLgogICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aXRoIGZpYmVyQ291bnQgPD0gMy4KLSAgICAgICAgSlNTdHJpbmcoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1
MSwgSlNTdHJpbmcqIHMyKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwg
SlNTdHJpbmcqIHMyKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHUxLmxlbmd0
aCgpICsgczItPmxlbmd0aCgpKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoZmliZXJDb3Vu
dCkKICAgICAgICAgewpAQCAtMjcxLDggKzI3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB9CiAKICAgICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBjb25zdHJ1Y3RzIGEgbmV3IHN0cmlu
ZyBieSBjb25jYXRlbmF0aW5nIHUxICYgdTIuCi0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQotICAg
ICAgICAgICAgOiBKU0NlbGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkKKyAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCisgICAgICAgICAgICA6IEpTQ2VsbChn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKICAgICAgICAgICAg
ICwgbV9sZW5ndGgodTEubGVuZ3RoKCkgKyB1Mi5sZW5ndGgoKSkKICAgICAgICAgICAgICwgbV9m
aWJlckNvdW50KDIpCiAgICAgICAgIHsKQEAgLTI4Myw4ICsyODUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgY29uc3RydWN0cyBh
IG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB1MSwgdTIgJiB1My4KLSAgICAgICAgSlNTdHJp
bmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0
cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQotICAgICAgICAgICAgOiBKU0NlbGwoKmdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgSlNTdHJp
bmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0
cmluZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQorICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1f
bGVuZ3RoKHUxLmxlbmd0aCgpICsgdTIubGVuZ3RoKCkgKyB1My5sZW5ndGgoKSkKICAgICAgICAg
ICAgICwgbV9maWJlckNvdW50KHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKQogICAgICAgICB7CkBA
IC0yOTUsNiArMjk3LDQ4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGlu
ZGV4IDw9IHNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoKTsKICAgICAgICAgfQogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGds
b2JhbERhdGEsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNP
dGhlck93bmVyVHlwZSBoYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSwgaGFzT3RoZXJPd25lclR5cGUpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUgaGFzT3RoZXJP
d25lclR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUs
IGhhc090aGVyT3duZXJUeXBlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcq
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8Um9wZUltcGw+IHJv
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0
cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBmaWJlckNvdW50LCBKU1N0cmluZyogczEsIEpTU3RyaW5nKiBzMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5n
PihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwg
czIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25z
dCBVU3RyaW5nJiB1MikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBm
aWJlckNvdW50LCBzMSwgdTIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3VudCwgY29u
c3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBKU1N0cmluZyogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1
ZSB2MiwgSlNWYWx1ZSB2MykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPEpTU3RyaW5nPigqZXhlYy0+aGVhcCgpKSkgSlNTdHJpbmcoZXhlYywgdjEsIHYy
LCB2Myk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmlu
Zz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyKTsKKyAgICAg
ICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIGNvbnN0IFVTdHJpbmcmIHUxLCBjb25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmlu
ZyYgdTMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxK
U1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdTEsIHUyLCB1
Myk7CisgICAgICAgIH0KKwogICAgICAgICB+SlNTdHJpbmcoKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQodnB0cigpID09IEpTR2xvYmFsRGF0YTo6anNTdHJpbmdWUHRyKTsKQEAgLTQ0
Miw3ICs0ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIGlmIChjIDw9IG1h
eFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAg
ICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmco
Z2xvYmFsRGF0YSwgVVN0cmluZygmYywgMSkpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihn
bG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkp
OwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJp
bmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzLCB1bnNpZ25lZCBvZmZzZXQpCkBA
IC00NTIsNyArNDk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVDaGFyIGMgPSBzLmNo
YXJhY3RlcnMoKVtvZmZzZXRdOwogICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmds
ZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKLSAgICAgICAgcmV0dXJuIGZpeHVwVlB0
cihnbG9iYWxEYXRhLCBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFVTdHJp
bmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOworICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IFVTdHJpbmcoU3RyaW5nSW1wbDo6Y3JlYXRlKHMuaW1wbCgpLCBvZmZzZXQsIDEpKSkpOwogICAg
IH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykKQEAgLTQ2MCwxMyArNTA0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBBU1NFUlQocyk7CiAgICAgICAgIEFTU0VSVChzWzBdKTsKICAg
ICAgICAgQVNTRVJUKHNbMV0pOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEs
IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1
cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMp
KTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzTm9udHJpdmlhbFN0cmluZyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHMpCiAgICAgewogICAgICAgICBB
U1NFUlQocy5sZW5ndGgoKSA+IDEpOwotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERh
dGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICBy
ZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEs
IHMpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCkBAIC00ODgsNyArNTMyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBpZiAoYyA8PSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZp
eHVwVlB0cihnbG9iYWxEYXRhLCBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEs
IHMpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc1N1
YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKQEAgLTUxNiw3ICs1NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhn
bG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2Jh
bERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJp
bmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNP
dGhlck93bmVyKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBs
KCksIG9mZnNldCwgbGVuZ3RoKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKSk7CiAgICAgfQog
CiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc093bmVkU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgVVN0cmluZyYgcykKQEAgLTUyOSw3ICs1NzMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGlmIChjIDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3Rl
clN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZml4dXBW
UHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcywg
SlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVwVlB0cihnbG9i
YWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzLCBKU1N0cmluZzo6SGFzT3Ro
ZXJPd25lcikpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNFbXB0eVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEo
KSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0
b09iamVjdFNsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsK
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMp
KTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVy
biBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjp0
b1RoaXNPYmplY3RTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC05MCw3ICs5MCw3
IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplT2JqZWN0KEV4ZWMKIAogICAgIEFTU0VS
VChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFu
T2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU05vdEFu
T2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFuT2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9
CiAKIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKQEAgLTEwMyw3ICsxMDMsNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6
ZVByb3RvdHlwZShFCiAKICAgICBBU1NFUlQoaXNVbmRlZmluZWRPck51bGwoKSk7CiAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGV4ZWMsICp0aGlzKSk7Ci0gICAg
cmV0dXJuIG5ldyAoZXhlYykgSlNOb3RBbk9iamVjdChleGVjKTsKKyAgICByZXR1cm4gSlNOb3RB
bk9iamVjdDo6Y3JlYXRlKGV4ZWMpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwLDEwICs4MCwxMCBAQCB2b2lkIHNldFVwU3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSog
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0dsb2JhbE9iamVjdCh0
aGlzT2JqLT5nZXRBbm9ueW1vdXNWYWx1ZSgwKS5hc0NlbGwoKSk7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgaWYgKGVudHJ5LT5nZW5lcmF0b3IoKSkKLSAgICAgICAgICAgIGZ1bmN0aW9uID0g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5m
dW5jdGlvblN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1l
LCBleGVjLT5nbG9iYWxEYXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBl
bnRyeS0+Z2VuZXJhdG9yKCkpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6
Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVy
ZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBleGVjLT5nbG9iYWxE
YXRhKCkuZ2V0SG9zdEZ1bmN0aW9uKGVudHJ5LT5mdW5jdGlvbigpLCBlbnRyeS0+Z2VuZXJhdG9y
KCkpKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICBmdW5jdGlvbiA9IG5ldyAo
ZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50
cnktPmZ1bmN0aW9uKCkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCks
IGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGVudHJ5LT5mdW5jdGlvbigp
KTsKIAogICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3RGdW5jdGlvbihleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgZnVuY3Rpb24sIGVudHJ5LT5hdHRyaWJ1dGVzKCkpOwogICAgICAg
ICBsb2NhdGlvbiA9IHRoaXNPYmotPmdldERpcmVjdExvY2F0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
dGhPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXRoT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWF0aE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiwxNCBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNYXRoT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0
aEdsb2JhbE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE1hdGhP
YmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE1hdGhPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TWF0aE9iamVjdD4o
KmV4ZWMtPmhlYXAoKSkpIE1hdGhPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdAogewogICAgIEFTU0VSVChpbmhlcml0
cygmc19pbmZvKSk7CiAKLSAgICBOYXRpdmVFcnJvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3
IChleGVjKSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2UsIHRoaXMpOworICAgIE5hdGl2ZUVycm9yUHJvdG90
eXBlKiBwcm90b3R5cGUgPSBOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhpcyk7CiAKICAg
ICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcigxKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBF
Q01BIDE1LjExLjcuNQogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
IHwgRG9udEVudW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDkgKzMwLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5h
dGl2ZUVycm9yUHJvdG90eXBlOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciA6
IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAg
ICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSosIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBVU3RyaW5n
Jik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvckNvbnN0cnVjdG9y
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0
IFVTdHJpbmcmIG5hbWVBbmRNZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkp
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZVN0cnVjdHVyZSwgbmFtZUFuZE1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNyw4ICsyNywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOwogCiAgICAgY2xhc3MgTmF0aXZlRXJyb3JQcm90b3R5cGUgOiBwdWJs
aWMgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgTmF0aXZlRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJiwgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvciopOwor
ICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UsIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXJyb3JQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkp
KSBOYXRpdmVFcnJvclByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgbmFt
ZUFuZE1lc3NhZ2UsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgfQogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw3ICsxMDQsNyBAQCBzdGF0aWMgSlNWYWx1ZSBudW1iZXJDb25zdHJ1Y3Rvck1pblZhbHVl
CiAvLyBFQ01BIDE1LjcuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aE51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBOdW1i
ZXJPYmplY3QqIG9iamVjdCA9IG5ldyAoZXhlYykgTnVtYmVyT2JqZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCkt
Pm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51
bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNJbnRlcm5hbEZ1bmN0aW9u
KGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgp
KTsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50
KDApLnRvTnVtYmVyKGV4ZWMpIDogMDsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc051bWJlcihuKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDgg
KzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE51bWJlclByb3RvdHlwZTsKIAog
ICAgIGNsYXNzIE51bWJlckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewot
ICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBOdW1iZXJDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE51bWJlclByb3RvdHlwZSopOwor
ICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJDb25zdHJ1Y3Rvciog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE51bWJlclByb3RvdHlwZSogbnVtUHJvdG90eXBlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TnVtYmVyQ29uc3RydWN0
b3I+KCpleGVjLT5oZWFwKCkpKSBOdW1iZXJDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgbnVtUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNw
cAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIEpTVmFsdWUgTnVt
YmVyT2JqZWN0OjpnZXRKU051bWJlcigpCiAKIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBu
dW1iZXIpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9i
amVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+bnVtYmVyT2JqZWN0U3RydWN0
dXJlKCkpOworICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgp
KTsKICAgICBvYmplY3QtPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBudW1i
ZXIpOwogICAgIHJldHVybiBvYmplY3Q7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OCArMjYsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyT2JqZWN0IDog
cHVibGljIEpTV3JhcHBlck9iamVjdCB7CisgICAgcHJvdGVjdGVkOgorICAgICAgICBOdW1iZXJP
YmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisKICAgICBwdWJsaWM6Ci0gICAgICAg
IGV4cGxpY2l0IE51bWJlck9iamVjdChKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICAg
ICAgc3RhdGljIE51bWJlck9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxOdW1iZXJPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIE51bWJlck9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL051bWJlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw5ICsyNiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOdW1iZXJQcm90
b3R5cGUgOiBwdWJsaWMgTnVtYmVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToK
ICAgICAgICAgTnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBOdW1iZXJQcm90b3R5cGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChh
bGxvY2F0ZUNlbGw8TnVtYmVyUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgTnVtYmVyUHJvdG90
eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBl
OwogCiAgICAgY2xhc3MgT2JqZWN0Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlv
biB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE9iamVjdENvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgT2JqZWN0UHJvdG90eXBl
Kik7CisgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgT2JqZWN0Q29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBPYmplY3RQcm90b3R5cGUqIG9ialByb3RvdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE9iamVjdENvbnN0cnVj
dG9yPigqZXhlYy0+aGVhcCgpKSkgT2JqZWN0Q29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUsIG9ialByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5
cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
YmplY3RQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgT2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RQcm90
b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIE9iamVjdFByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmplY3RQ
cm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBPYmplY3RQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5MTAyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlmIChm
aWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291
bnQsIHMxLCBzMik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgZmliZXJDb3VudCwgczEsIHMyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxk
ZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVp
bGRlci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAgICAgICAg
cm9wZUJ1aWxkZXIuYXBwZW5kKHMyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7
CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKQEAgLTc0LDE0ICs3NCwxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4
ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8PSBKU1N0cmluZzo6
c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOworICAgICAgICAg
ICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHUxLCBz
Mik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKGZpYmVyQ291
bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRPZk1lbW9yeSgpKSkK
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAgICAgICAg
IHJvcGVCdWlsZGVyLmFwcGVuZCh1MSk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMik7
Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJv
cGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzMSwgY29u
c3QgVVN0cmluZyYgdTIpCkBAIC05OSwxNCArOTksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKICAg
ICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0
YSwgZmliZXJDb3VudCwgczEsIHUyKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgdTIpOwogCiAgICAgICAgIEpTU3RyaW5n
OjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElL
RUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczEp
OwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQodTIpOwotICAgICAgICByZXR1cm4gbmV3IChn
bG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIu
cmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmluZyYgdTIpCkBA
IC0xMjEsNyArMTIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERh
dGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHUxLCB1Mik7CisgICAgICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCB1MSwgdTIpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHUxLCBj
b25zdCBVU3RyaW5nJiB1MiwgY29uc3QgVVN0cmluZyYgdTMpCkBAIC0xNDIsNyArMTQyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIHUxLCB1MiwgdTMpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgdTEsIHUyLCB1Myk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIHN0cmluZ3MsIHVuc2lnbmVkIGNv
dW50KQpAQCAtMTYwLDcgKzE2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgICAgIGlmIChm
aWJlckNvdW50ID09IDMpCi0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhleGVjLCBzdHJpbmdzWzBdLmpzVmFsdWUoKSwgc3RyaW5nc1sxXS5qc1ZhbHVlKCksIHN0
cmluZ3NbMl0uanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRl
KGV4ZWMsIHN0cmluZ3NbMF0uanNWYWx1ZSgpLCBzdHJpbmdzWzFdLmpzVmFsdWUoKSwgc3RyaW5n
c1syXS5qc1ZhbHVlKCkpOwogCiAgICAgICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVp
bGRlcihmaWJlckNvdW50KTsKICAgICAgICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0
T2ZNZW1vcnkoKSkpCkBAIC0xODUsNyArMTg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGlmIChvdmVyZmxvdykKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYyk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFs
RGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpj
cmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CiAgICAgfQogCiAgICAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0
aGlzVmFsdWUpCkBAIC0yMzIsNyArMjMyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCiAgICAgICAgIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIHJldHVybiBu
ZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCByb3BlQnVp
bGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIC8vIEVDTUEgMTEuOS4zCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsOCArNzYsOCBAQCBzdHJ1Y3QgUmVnRXhwUmVwcmVzZW50YXRpb24gewogICAgIE93blB0
cjxZYXJyOjpCeXRlY29kZVBhdHRlcm4+IG1fcmVnRXhwQnl0ZWNvZGU7CiB9OwogCi1SZWdFeHA6
OlJlZ0V4cChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5T
dHJpbmcsIFJlZ0V4cEZsYWdzIGZsYWdzKQotICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCkpCitSZWdFeHA6OlJlZ0V4cChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZsYWdz
IGZsYWdzKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucmVnRXhwU3RydWN0
dXJlLmdldCgpKQogICAgICwgbV9zdGF0ZShOb3RDb21waWxlZCkKICAgICAsIG1fcGF0dGVyblN0
cmluZyhwYXR0ZXJuU3RyaW5nKQogICAgICwgbV9mbGFncyhmbGFncykKQEAgLTk5LDkgKzk5LDE0
IEBAIFJlZ0V4cDo6flJlZ0V4cCgpCiB7CiB9CiAKLVJlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdF
eHBGbGFncyBmbGFncykKK1JlZ0V4cCogUmVnRXhwOjpjcmVhdGVXaXRob3V0Q2FjaGluZyhKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4
cEZsYWdzIGZsYWdzKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5yZWdFeHBDYWNoZSgpLT5s
b29rdXBPckNyZWF0ZShwYXR0ZXJuU3RyaW5nLCBmbGFncyk7CisgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPFJlZ0V4cD4oZ2xvYmFsRGF0YS5oZWFwKSkgUmVnRXhwKGdsb2JhbERhdGEsIHBh
dHRlcm5TdHJpbmcsIGZsYWdzKTsKK30KKworUmVnRXhwKiBSZWdFeHA6OmNyZWF0ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIFJlZ0V4cEZs
YWdzIGZsYWdzKQoreworICAgIHJldHVybiBnbG9iYWxEYXRhLnJlZ0V4cENhY2hlKCktPmxvb2t1
cE9yQ3JlYXRlKHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKIH0KIAogdm9pZCBSZWdFeHA6OmNvbXBp
bGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdFeHAgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBjb25zdCBV
U3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7CisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBSZWdFeHBGbGFncyk7
CiAgICAgICAgIH5SZWdFeHAoKTsKIAogICAgICAgICBib29sIGdsb2JhbCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmxhZ3MgJiBGbGFnR2xvYmFsOyB9CkBAIC03NSw3ICs3NSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlZ0V4cENhY2hlOwot
ICAgICAgICBSZWdFeHAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBw
YXR0ZXJuLCBSZWdFeHBGbGFncyk7CisgICAgICAgIFJlZ0V4cChKU0dsb2JhbERhdGEmLCBjb25z
dCBVU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOworCisgICAgICAgIHN0YXRpYyBSZWdFeHAqIGNyZWF0
ZVdpdGhvdXRDYWNoaW5nKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFVTdHJpbmcmLCBSZWdFeHBGbGFn
cyk7CiAKICAgICAgICAgZW51bSBSZWdFeHBTdGF0ZSB7CiAgICAgICAgICAgICBQYXJzZUVycm9y
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNw
cAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgUmVnRXhwKiBSZWdF
eHBDYWNoZTo6bG9va3VwT3JDcmVhdGUoY29ucwogICAgIFJlZ0V4cENhY2hlTWFwOjppdGVyYXRv
ciByZXN1bHQgPSBtX3dlYWtDYWNoZS5maW5kKGtleSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3dl
YWtDYWNoZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kLmdldCgpOwotICAg
IFJlZ0V4cCogcmVnRXhwID0gbmV3IChtX2dsb2JhbERhdGEpIFJlZ0V4cChtX2dsb2JhbERhdGEs
IHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3Jl
YXRlV2l0aG91dENhY2hpbmcoKm1fZ2xvYmFsRGF0YSwgcGF0dGVyblN0cmluZywgZmxhZ3MpOwog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBtX2dsb2JhbERhdGEtPmFkZFJlZ0V4cFRv
VHJhY2UocmVnRXhwKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJlZ0V4cE1hdGNoZXNBcnJheTo6Zmls
bEFycmF5SW5zdGFuCiAKIEpTT2JqZWN0KiBSZWdFeHBDb25zdHJ1Y3Rvcjo6YXJyYXlPZk1hdGNo
ZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJlZ0V4
cE1hdGNoZXNBcnJheShleGVjLCBkLmdldCgpKTsKKyAgICByZXR1cm4gUmVnRXhwTWF0Y2hlc0Fy
cmF5OjpjcmVhdGUoZXhlYywgZC5nZXQoKSk7CiB9CiAKIEpTVmFsdWUgUmVnRXhwQ29uc3RydWN0
b3I6OmdldEJhY2tyZWYoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKSBjb25zdApAQCAtMzA0
LDcgKzMwNCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAg
ICAgICAgLy8gSWYgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIHRoaXMganVzdCByZXR1cm5zIHRoZSBm
aXJzdCBhcmd1bWVudCAoc2VlIDE1LjEwLjMuMSkuCiAgICAgICAgIGlmIChjYWxsQXNDb25zdHJ1
Y3RvcikgewogICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBzdGF0aWNfY2FzdDxSZWdFeHBP
YmplY3QqPihhc09iamVjdChhcmcwKSktPnJlZ0V4cCgpOwotICAgICAgICAgICAgcmV0dXJuIG5l
dyAoZXhlYykgUmVnRXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBT
dHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNy
ZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KGFyZzApOwogICAg
IH0KQEAgLTMyMiwxMCArMzIyLDEwIEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0
YXRlKiBleGUKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRh
eEVycm9yKGV4ZWMsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rv
ci4iKSk7CiAgICAgfQogCi0gICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBS
ZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICBp
ZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7Ci0gICAgcmV0
dXJuIG5ldyAoZXhlYykgUmVnRXhwT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKKyAgICByZXR1cm4gUmVn
RXhwT2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBnbG9i
YWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwogfQogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoUmVnRXhwQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDkgKzU2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICAgICBjbGFzcyBSZWdFeHBD
b25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAg
cHJpdmF0ZToKICAgICAgICAgUmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHBQcm90b3R5cGUqKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cENvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVnRXhw
UHJvdG90eXBlKiByZWdFeHBQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkpIFJl
Z0V4cENvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHBQcm90
b3R5cGUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw4ICsyNSwxNCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBSZWdF
eHBNYXRjaGVzQXJyYXkgOiBwdWJsaWMgSlNBcnJheSB7Ci0gICAgcHVibGljOgorICAgIHByaXZh
dGU6CiAgICAgICAgIFJlZ0V4cE1hdGNoZXNBcnJheShFeGVjU3RhdGUqLCBSZWdFeHBDb25zdHJ1
Y3RvclByaXZhdGUqKTsKKworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE1hdGNo
ZXNBcnJheSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRl
KiBjdG9yUHJpdmF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFJlZ0V4cE1hdGNoZXNBcnJheT4oKmV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE1hdGNoZXNB
cnJheShleGVjLCBjdG9yUHJpdmF0ZSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+UmVn
RXhwTWF0Y2hlc0FycmF5KCk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDEwICsyNywyMiBAQAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCiAgICAgY2xhc3MgUmVn
RXhwT2JqZWN0IDogcHVibGljIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCB7CisgICAgcHJvdGVj
dGVkOgorICAgICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBS
ZWdFeHAqKTsKKwogICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlZ0V4cE9iamVjdCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8UmVnRXhwT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgUmVn
RXhwT2JqZWN0KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCByZWdFeHApOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgUmVnRXhwT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cE9i
amVjdChnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgdHlwZWRlZiBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgQmFzZTsKIAotICAg
ICAgICBSZWdFeHBPYmplY3QoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsK
ICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRSZWdF
eHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBSZWdFeHAqIHIpIHsgZC0+cmVnRXhwLnNldChn
bG9iYWxEYXRhLCB0aGlzLCByKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4
cFByb3RvCiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywg
IkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKICAgICAg
ICAgfQotICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgIH0KIAogICAgIGlmICghcmVnRXhw
LT5pc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcs
MTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwUHJvdG90eXBlIDogcHVi
bGljIFJlZ0V4cE9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByb3RlY3RlZDoKICAgICAgICAg
UmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
UmVnRXhwKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBQcm90b3R5cGUq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFJlZ0V4cFByb3RvdHlwZT4oKmV4ZWMtPmhlYXAo
KSkpIFJlZ0V4cFByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhw
KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CiAKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVDaGFpbi5oCShyZXZpc2lvbiA5MTAyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTbG90VmlzaXRvcjsK
ICAgICAKICAgICBjbGFzcyBTY29wZUNoYWluTm9kZSA6IHB1YmxpYyBKU0NlbGwgewotICAgIHB1
YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBTY29wZUNoYWluTm9kZShTY29wZUNoYWluTm9k
ZSogbmV4dCwgSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZ2xvYmFsVGhpcykKICAgICAgICAg
ICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zY29wZUNoYWluTm9kZVN0cnVj
dHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQpAQCAtNDcs
NiArNDcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2Jq
ZWN0KTsKICAgICAgICAgfQogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgU2NvcGVDaGFp
bk5vZGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBuZXh0LCBKU09i
amVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2NvcGVDaGFpbk5vZGU+KCpleGVjLT5oZWFwKCkp
KSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmplY3QsIGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwg
Z2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2RlKiBj
cmVhdGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGds
b2JhbFRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxTY29wZUNoYWluTm9kZT4oZ2xvYmFsRGF0YS0+aGVhcCkpIFNjb3BlQ2hhaW5Ob2RlKG5leHQs
IG9iamVjdCwgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxUaGlzKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG5leHQ7CiAgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gb2JqZWN0OwpAQCAtNzYsNyArODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBp
bmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwdXNoKEpTT2JqZWN0KiBvKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG8pOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRh
KSBTY29wZUNoYWluTm9kZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QuZ2V0KCks
IGdsb2JhbFRoaXMuZ2V0KCkpOworICAgICAgICByZXR1cm4gU2NvcGVDaGFpbk5vZGU6OmNyZWF0
ZSh0aGlzLCBvLCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QuZ2V0KCksIGdsb2JhbFRoaXMuZ2V0
KCkpOwogICAgIH0KIAogICAgIGlubGluZSBTY29wZUNoYWluTm9kZSogU2NvcGVDaGFpbk5vZGU6
OnBvcCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHVu
c2lnbmVkIFNtYWxsU3RyaW5nczo6Y291bnQoKSBjb25zdAogdm9pZCBTbWFsbFN0cmluZ3M6OmNy
ZWF0ZUVtcHR5U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQo
IW1fZW1wdHlTdHJpbmcpOwotICAgIG1fZW1wdHlTdHJpbmcgPSBuZXcgKGdsb2JhbERhdGEpIEpT
U3RyaW5nKGdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CisgICAgbV9l
bXB0eVN0cmluZyA9IEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsICIiLCBKU1N0cmluZzo6
SGFzT3RoZXJPd25lcik7CiB9CiAKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjaGFyIGNoYXJh
Y3RlcikKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xl
Q2hhcmFjdGVyCiAgICAgaWYgKCFtX3N0b3JhZ2UpCiAgICAgICAgIG1fc3RvcmFnZSA9IGFkb3B0
UHRyKG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdlKTsKICAgICBBU1NFUlQoIW1fc2luZ2xlQ2hhcmFj
dGVyU3RyaW5nc1tjaGFyYWN0ZXJdKTsKLSAgICBtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hh
cmFjdGVyXSA9IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPihtX3N0b3JhZ2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090
aGVyT3duZXIpOworICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tjaGFyYWN0ZXJdID0gSlNT
dHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPihtX3N0b3Jh
Z2UtPnJlcChjaGFyYWN0ZXIpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOwogfQogCiBTdHJp
bmdJbXBsKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNpZ25lZCBj
aGFyIGNoYXJhY3RlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw4ICs4Nyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChleGVjKSBT
dHJpbmdPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChleGVjKSBTdHJpbmdPYmplY3QoZXhl
YywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSwgZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJp
bmdPYmplY3Q6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVy
ZSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTdHJpbmdPYmplY3Q6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpLCBleGVjLT5hcmd1bWVu
dCgwKS50b1N0cmluZyhleGVjKSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIFN0cmluZ0NvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlOwogCiAgICAgY2xhc3MgU3RyaW5n
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAg
IHByaXZhdGU6CiAgICAgICAgIFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgU3RydWN0dXJlKiwgU3RyaW5nUHJvdG90eXBlKik7CisgICAgICAgIAorICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ0NvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ICwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cmluZ1Byb3RvdHlwZSogc3RyUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nQ29uc3RydWN0b3I+KCpleGVjLT5oZWFw
KCkpKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc3Ry
UHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdP
YmplY3QuaAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3LDIxIEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0cmluZ09iamVjdCA6IHB1YmxpYyBKU1dyYXBwZXJP
YmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFN0cmluZ09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKICAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIGNvbnN0IFVTdHJpbmcmKTsKLQorICAgICAgICAgICAgICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ09iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdP
YmplY3QoZXhlYywgc3RydWN0dXJlKTsgIAorICAgICAgICB9CisgICAgICAgIHN0YXRpYyBTdHJp
bmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBVU3RyaW5nJiBzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxTdHJpbmdPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdPYmplY3QoZXhl
Yywgc3RydWN0dXJlLCBzdHIpOyAgCisgICAgICAgIH0KICAgICAgICAgc3RhdGljIFN0cmluZ09i
amVjdCogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAg
ICAgICAgCiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0cmluZyYgc3RyaW5nKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBTdHJpbmdPYmplY3RUaGF0TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZChleGVjLAorICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkPigqZXhlYy0+aGVh
cCgpKSkgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywKICAgICAg
ICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnN0cmluZ1Byb3RvdHlwZSgpKSwgc3RyaW5nKTsKICAgICAgICAg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDcgKzYxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgICog
IElmIHJlZ2V4cCBpcyBub3QgYW4gb2JqZWN0IHdob3NlIFtbQ2xhc3NdXSBwcm9wZXJ0eSBpcyAi
UmVnRXhwIiwgaXQgaXMKICAgICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0
aGUgZXhwcmVzc2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgICAqLwotICAgICAgICBy
ZWcgPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVj
KSwgTm9GbGFncyk7CisgICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOwogICAgIH0KICAgICBSZWdFeHBDb25z
dHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cENvbnN0cnVjdG9yKCk7CiAgICAgaW50IHBvczsKQEAgLTY2NCw3ICs2NjQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgICAqICBJZiBy
ZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4
cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNlZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4
cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgogICAgICAgICAgKi8KLSAgICAgICAgcmVnID0g
UmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5v
RmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCks
IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0
b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdF
eHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkocmV2aXNpb24gOTEwMjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsOSArMjgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgT2JqZWN0
UHJvdG90eXBlOwogCiAgICAgY2xhc3MgU3RyaW5nUHJvdG90eXBlIDogcHVibGljIFN0cmluZ09i
amVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIFN0cmluZ1Byb3RvdHlw
ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgU3RyaW5nUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ1Byb3Rv
dHlwZT4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ1Byb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIH0KKwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0dXJlKTsKICAg
ICAgICAgICAgIEFTU0VSVChjbGFzc0luZm8pOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmds
b2JhbERhdGEpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIHR5cGVJbmZvLCBhbm9u
eW1vdXNTbG90Q291bnQsIGNsYXNzSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0
YSwgcHJvdG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3VzU2xvdENvdW50LCBjbGFzc0luZm8pOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQVNTRVJUKCFnbG9iYWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5o
ZWFwKSkgU3RydWN0dXJlKGdsb2JhbERhdGEpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpAQCAtMTcwLDcg
KzE3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbERhdGEuc3RydWN0dXJlU3RydWN0
dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xv
YmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxTdHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB0eXBlZGVmIGVudW0geyAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAko
cmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDaGFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogCiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlQ2hhaW4qIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogaGVhZCkgeyByZXR1cm4gbmV3ICgmZ2xvYmFsRGF0YSkgU3RydWN0dXJlQ2hhaW4oZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVyZS5nZXQoKSwgaGVhZCk7
IH0KKyAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0
cnVjdHVyZUNoYWluPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1Y3R1cmVDaGFpbihnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLnN0cnVjdHVyZUNoYWluU3RydWN0dXJlLmdldCgpLCBoZWFkKTsgfQogICAg
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaGVhZCgpIHsgcmV0dXJuIG1fdmVjdG9yLmdl
dCgpOyB9CiAgICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDExLTA3LTE0ICBNYXJrIEhhaG5lbmJl
cmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDY2CisgICAgICAgIFJlZmFjdG9yIEpTQyB0byByZXBs
YWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3RhdGljIGNyZWF0ZSBtZXRob2QKKworICAg
ICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJlZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3Zl
IHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRv
IGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJlcGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qg
d2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9yIGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhl
YXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVjdC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBv
bmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMgb2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdp
dGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNoZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUK
KyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ugd2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBE
T00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAgICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhh
cyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZyb20gSlNDZWxsLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBwbGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRh
cmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNE
YXRlT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Om9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNh
Y2hpbmdTdGF0aWNCYWNrRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2Fj
aGluZ1N0YXRpY0ZvcndhcmRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25D
YWNoaW5nU3RhdGljR29GdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljUmVw
bGFjZUZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNS
ZWxvYWRGdW5jdGlvbkdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGlj
QXNzaWduRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZFRlcm1pbmFsKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKKwogMjAxMS0wNy0xNCAg
SmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29tPgogCiAgICAgICAgIENoYXJhY3RlciByZWZl
cmVuY2UgcGFyc2VyIGZvciBuZXcgWE1MIHBhcnNlcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Niw3ICsxNTYsNyBAQCBKU1ZhbHVlIGpzRGF0ZU9yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGRvCiB7
CiAgICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKKyAgICByZXR1cm4gRGF0ZUluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0
dXJlKCksIHZhbHVlKTsKIH0KIAogZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKQEAgLTMwNyw3ICszMDcsNyBAQCBGcmFtZSogdG9EeW5hbWljRnJhbWUo
RXhlY1N0YXRlKiBleGVjKQogCiBKU1ZhbHVlIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CisgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwg
cHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk7CiB9CiAKIFN0cnVjdHVyZSog
Z2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6dmlzaXRDaGlsZHJlbihTbG90
VmlzaQogdGVtcGxhdGU8TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+
CiBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
bmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZSwgbmF0aXZlRnVuY3Rpb24pOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLCBu
YXRpdmVGdW5jdGlvbik7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIGNoaWxkRnJhbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAJKHJldmlzaW9uIDkxMDI1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTcgKzQwLDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0JhY2tG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlw
ZUZ1bmN0aW9uQmFjayk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVu
Y3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5j
dGlvbkJhY2spOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25Gb3J3YXJkKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1
bmN0aW9uRm9yd2FyZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNHb0Z1
bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBl
RnVuY3Rpb25Hbyk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlv
bkdvKTsKIH0KIAogYm9vbCBKU0hpc3Rvcnk6OmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRp
Y1JlcGxhY2VGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0
aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRp
b25Qcm90b3R5cGVGdW5jdGlvblJlcGxhY2UpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlv
blByb3RvdHlwZUZ1bmN0aW9uUmVwbGFjZSk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hp
bmdTdGF0aWNSZWxvYWRGdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBK
U0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpz
TG9jYXRpb25Qcm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0xv
Y2F0aW9uUHJvdG90eXBlRnVuY3Rpb25SZWxvYWQpOwogfQogCiBzdGF0aWMgSlNWYWx1ZSBub25D
YWNoaW5nU3RhdGljQXNzaWduRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhl
YykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1l
LCBqc0xvY2F0aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pOworICAgIHJldHVybiBKU0Z1bmN0
aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwg
anNMb2NhdGlvblByb3RvdHlwZUZ1bmN0aW9uQXNzaWduKTsKIH0KIAogYm9vbCBKU0xvY2F0aW9u
OjpnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShy
ZXZpc2lvbiA5MTAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODYsNyArMTA4Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBkb3VibGUgZDsKICAgICAgICAgICAgIGlmICghcmVhZChkKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAo
bV9leGVjKSBEYXRlSW5zdGFuY2UobV9leGVjLCBtX2dsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVy
ZSgpLCBkKTsKKyAgICAgICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShtX2V4ZWMs
IG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQpOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgRmlsZVRhZzogewogICAgICAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGU7CkBAIC0xMTY2
LDggKzExNjYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAgICAgICAgICAgICBSZWdFeHBGbGFncyByZUZsYWdzID0gcmVnRXhwRmxhZ3MoZmxhZ3MtPnVz
dHJpbmcoKSk7CiAgICAgICAgICAgICBBU1NFUlQocmVGbGFncyAhPSBJbnZhbGlkRmxhZ3MpOwot
ICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZSgmbV9leGVjLT5nbG9i
YWxEYXRhKCksIHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IChtX2V4ZWMpIFJlZ0V4cE9iamVjdChtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgbV9nbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKKyAgICAgICAg
ICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUobV9leGVjLT5nbG9iYWxEYXRhKCks
IHBhdHRlcm4tPnVzdHJpbmcoKSwgcmVGbGFncyk7CisgICAgICAgICAgICByZXR1cm4gUmVnRXhw
T2JqZWN0OjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbV9n
bG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOyAKICAgICAgICAgfQogICAg
ICAgICBjYXNlIE9iamVjdFJlZmVyZW5jZVRhZzogewogICAgICAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2
aXNpb24gOTEwMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3Myw5ICs4NzMsOSBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFu
dFRvVmFsdWUoRXhlY1N0YXRlCiAgICAgICAgICAgICBVU3RyaW5nIHBhdHRlcm4oKFVDaGFyKily
ZS5wYXR0ZXJuKCkudXRmMTYoKSwgcmUucGF0dGVybigpLmxlbmd0aCgpKTsKICAgICAgICAgICAg
IFJlZ0V4cEZsYWdzIGZsYWdzID0gKHJlLmNhc2VTZW5zaXRpdml0eSgpID09IFF0OjpDYXNlSW5z
ZW5zaXRpdmUpID8gRmxhZ0lnbm9yZUNhc2UgOiBOb0ZsYWdzOwogCi0gICAgICAgICAgICBKU0M6
OlJlZ0V4cCogcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgICAgICBKU0M6OlJlZ0V4cCogcmVnRXhwID0gSlND
OjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKICAg
ICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IChleGVjKSBSZWdFeHBPYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAg
ICAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3Ry
dWN0dXJlKCksIHJlZ0V4cCk7CiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAg
IH0KICAgICB9CkBAIC05MDgsNyArOTA4LDcgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1Zh
bHVlKEV4ZWNTdGF0ZQogICAgICAgICBkdC5pc0RTVCA9IC0xOwogICAgICAgICBkb3VibGUgbXMg
PSBncmVnb3JpYW5EYXRlVGltZVRvTVMoZXhlYywgZHQsIHRpbWUubXNlYygpLCAvKmlucHV0SXNV
VEMqLyBmYWxzZSk7CiAKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgRGF0ZUluc3RhbmNlKGV4
ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB0cnVuYyht
cykpOworICAgICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7CiAgICAgfQog
CiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101166</attachid>
            <date>2011-07-18 09:04:12 -0700</date>
            <delta_ts>2011-07-18 10:29:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64466-20110718090412.patch</filename>
            <type>text/plain</type>
            <size>168471</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUyIEBA
CisyMDExLTA3LTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3IgSlNDIHRvIHJlcGxhY2UgSlNDZWxsOjpvcGVyYXRvciBuZXcgd2l0
aCBzdGF0aWMgY3JlYXRlIG1ldGhvZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjQ0NjYKKworICAgICAgICBGaXJzdCBzdGVwIGluIGEgbG9uZ2VyIHJl
ZmFjdG9yaW5nIHByb2Nlc3MgdG8gcmVtb3ZlIHRoZSB1c2Ugb2YKKyAgICAgICAgb3BlcmF0b3Ig
bmV3IG92ZXJsb2FkaW5nIGluIG9yZGVyIHRvIGFsbG9jYXRlIEdDIG9iamVjdHMgYW5kIHRvIHJl
cGxhY2UKKyAgICAgICAgdGhpcyBtZXRob2Qgd2l0aCBzdGF0aWMgY3JlYXRlIG1ldGhvZHMgZm9y
IGVhY2ggaW5kaXZpZHVhbCB0eXBlIG9mIGhlYXAtYWxsb2NhdGVkCisgICAgICAgIEpTIG9iamVj
dC4gIFRoaXMgcGFydGljdWxhciBwYXRjaCBvbmx5IGRlYWxzIHdpdGggcmVwbGFjaW5nIHVzZXMg
b2YKKyAgICAgICAgb3BlcmF0b3IgbmV3IHdpdGhpbiBKU0MgcHJvcGVyLiAgRnV0dXJlIHBhdGNo
ZXMgd2lsbCByZW1vdmUgaXQgZnJvbSB0aGUKKyAgICAgICAgcGFydHMgdGhhdCBpbnRlcmZhY2Ug
d2l0aCB0aGUgRE9NLiAgRHVlIHRvIHRoZSBET00ncyBjb250aW51ZWQgZGVwZW5kZW5jZQorICAg
ICAgICBvbiBpdCwgb3BlcmF0b3IgbmV3IGhhcyBub3QgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGZy
b20gSlNDZWxsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50IChvbGl2ZXJAYXBw
bGUuY29tKSBhbmQgRGFyaW4gQWRsZXIgKGRhcmluQGFwcGxlLmNvbSkuCisKKyAgICAgICAgKiBB
UEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmg6Cisg
ICAgICAgIChKU0M6OkpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBBUEkv
SlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpvcGVy
YXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpjcmVhdGUpOgorICAg
ICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg6CisgICAgICAgIChKU0M6Ojo6
c3RhdGljRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAqIEFQSS9KU0NsYXNzUmVmLmNwcDoKKyAg
ICAgICAgKE9wYXF1ZUpTQ2xhc3M6OnByb3RvdHlwZSk6CisgICAgICAgICogQVBJL0pTQ29udGV4
dFJlZi5jcHA6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpTT2Jq
ZWN0TWFrZSk6CisgICAgICAgIChKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayk6Cisg
ICAgICAgIChKU09iamVjdE1ha2VDb25zdHJ1Y3Rvcik6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWY6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKToKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bWFrZUZ1
bmN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpyZXRyaWV2ZUFyZ3VtZW50cyk6Cisg
ICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVO
Q1RJT04pOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmNyZWF0
ZSk6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5j
dGlvblJ1bik6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50
cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkFy
Z3VtZW50czo6Y3JlYXRlTm9QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5Q29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsp
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjpB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgICog
cnVudGltZS9BcnJheVByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4pOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0Jvb2xlYW5PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Qm9vbGVhbk9i
amVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6Qm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdERhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OkRhdGVDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVJbnN0YW5jZS5oOgorICAg
ICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9EYXRl
UHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkRhdGVQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9FcnJvci5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUVycm9yKToKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlRXZhbEVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmFuZ2VF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlU3ludGF4RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVUeXBlRXJyb3IpOgor
ICAgICAgICAoSlNDOjpjcmVhdGVVUklFcnJvcik6CisgICAgICAgIChKU0M6OlN0cmljdE1vZGVU
eXBlRXJyb3JGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVHlwZUVycm9y
RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90
b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50ZXJydXB0ZWRFeGVjdXRpb25FcnJvcjo6SW50ZXJydXB0ZWRFeGVj
dXRpb25FcnJvcik6CisgICAgICAgIChKU0M6OkludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUludGVycnVwdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KToKKyAgICAgICAgKEpTQzo6VGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpUZXJtaW5hdGVkRXhlY3V0aW9uRXJyb3I6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZVRlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZSk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRh
YmxlLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVj
dXRhYmxlOjpTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6bWFrZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxF
bmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvblByb3Rv
dHlwZTo6YWRkRnVuY3Rpb25Qcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6CisgICAgICAgIChKU0M6OkdldHRlclNl
dHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmg6Cisg
ICAgICAgIChKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpq
c0FQSVZhbHVlV3JhcHBlcik6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uY3BwOgor
ICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmFyZ3VtZW50c0dldHRlcik6CisgICAgICAgICog
cnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5
OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6YWxsb2NhdGVDZWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAg
ICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAg
ICAgIChKU0M6OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKiBydW50aW1lL0pTTm90QW5PYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTT05PYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmRlZmluZUdldHRlcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZpbmVTZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpwdXREZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRl
KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJp
bmc6OnN1YnN0cmluZ0Zyb21Sb3BlKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnJlcGxhY2VD
aGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpTdHJpbmdPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
ICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6SlNTdHJp
bmcpOgorICAgICAgICAoSlNDOjpSb3BlQnVpbGRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
Um9wZUJ1aWxkZXI6OmNyZWF0ZUhhc090aGVyT3duZXIpOgorICAgICAgICAoSlNDOjpqc1Npbmds
ZUNoYXJhY3RlclN0cmluZyk6CisgICAgICAgIChKU0M6OmpzU2luZ2xlQ2hhcmFjdGVyU3Vic3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6anNOb250cml2aWFsU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
anNTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1N1YnN0cmluZyk6CisgICAgICAgIChKU0M6Ompz
T3duZWRTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OnRvT2JqZWN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpz
eW50aGVzaXplT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6c3ludGhlc2l6ZVByb3Rv
dHlwZSk6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRV
cFN0YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OYXRp
dmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9OYXRpdmVF
cnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oOgorICAg
ICAgICAoSlNDOjpOYXRpdmVFcnJvclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50
aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aE51
bWJlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmg6
CisgICAgICAgIChKU0M6Ok51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvTnVtYmVyT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TnVtYmVyKToK
KyAgICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5oOgorICAgICAgICAoSlNDOjpOdW1iZXJP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaDoKKyAg
ICAgICAgKEpTQzo6TnVtYmVyUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6T2JqZWN0Q29uc3RydWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUuaDoKKyAgICAgICAgKEpT
Qzo6T2JqZWN0UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9u
cy5oOgorICAgICAgICAoSlNDOjpqc1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHAu
Y3BwOgorICAgICAgICAoSlNDOjpSZWdFeHA6OlJlZ0V4cCk6CisgICAgICAgIChKU0M6OlJlZ0V4
cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9SZWdFeHAuaDoKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENh
Y2hlLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ2FjaGU6Omxvb2t1cE9yQ3JlYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVn
RXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
UmVnRXhwKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmg6CisgICAgICAg
IChKU0M6OlJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvUmVn
RXhwTWF0Y2hlc0FycmF5Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE1hdGNoZXNBcnJheTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAoSlNDOjpS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNDb21waWxlKToKKyAgICAgICAgKiBy
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5oOgorICAgICAgICAoSlNDOjpSZWdFeHBQcm90b3R5cGU6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TY29wZUNoYWluLmg6CisgICAgICAgIChKU0M6
OlNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpTY29wZUNoYWluTm9kZTo6
cHVzaCk6CisgICAgICAgICogcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlND
OjpTbWFsbFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKToKKyAgICAgICAgKEpTQzo6U21hbGxT
dHJpbmdzOjpjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5n
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaDoKKyAg
ICAgICAgKEpTQzo6U3RyaW5nQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJpbmdPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
aDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ6
OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1NlYXJjaCk6CisgICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuaDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlQ2hhaW4uaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlQ2hhaW46OmNyZWF0ZSk6CisKIDIw
MTEtMDctMTcgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFtFRkxdIFJlZmFjdG9yIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQgdG8g
Zml4IGNyYXNoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNiBAQCBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3QzcHV0RVBOU185RXhlY1N0CiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3Q0aW5pdEVQ
TlNfOEpTT2JqZWN0RQogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk4zSlND
MTRKU0dsb2JhbE9iamVjdEQyRXYKLV9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdG53RW1QTlNfMTJK
U0dsb2JhbERhdGFFCiBfX1pOM0pTQzE0TWFjaGluZVRocmVhZHMxNmFkZEN1cnJlbnRUaHJlYWRF
dgogX19aTjNKU0MxNFNhbXBsaW5nVGhyZWFkNHN0b3BFdgogX19aTjNKU0MxNFNhbXBsaW5nVGhy
ZWFkNXN0YXJ0RWoKQEAgLTI2Myw4ICsyNjIsOCBAQCBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18x
NEpTTG9ja0JlaGF2aW9yCiBfX1pOM0pTQzZKU0xvY2s2dW5sb2NrRU5TXzE0SlNMb2NrQmVoYXZp
b3JFCiBfX1pOM0pTQzZKU0xvY2s5bG9ja0NvdW50RXYKIF9fWk4zSlNDNkpTTG9ja0MxRVBOU185
RXhlY1N0YXRlRQotX19aTjNKU0M2UmVnRXhwNmNyZWF0ZUVQTlNfMTJKU0dsb2JhbERhdGFFUktO
U183VVN0cmluZ0VOU18xMVJlZ0V4cEZsYWdzRQogX19aTjNKU0M2UmVnRXhwRDFFdgorX19aTjNK
U0M2UmVnRXhwNmNyZWF0ZUVSTlNfMTJKU0dsb2JhbERhdGFFUktOU183VVN0cmluZ0VOU18xMVJl
Z0V4cEZsYWdzRQogX19aTjNKU0M3SlNBcnJheTEzdmlzaXRDaGlsZHJlbkVSTlNfMTFTbG90Vmlz
aXRvckUKIF9fWk4zSlNDN0pTQXJyYXkxNXNldFN1YmNsYXNzRGF0YUVQdgogX19aTjNKU0M3SlNB
cnJheTE4Z2V0T3duUHJvcGVydHlTbG90RVBOU185RXhlY1N0YXRlRWpSTlNfMTJQcm9wZXJ0eVNs
b3RFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0MywxNCBA
QCBsb25nIFN0b3BXYXRjaDo6Z2V0RWxhcHNlZE1TKCkKIH0KIAogY2xhc3MgR2xvYmFsT2JqZWN0
IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgR2xvYmFs
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IFZlY3RvcjxVU3RyaW5nPiYg
YXJndW1lbnRzKTsKKworcHVibGljOgorICAgIHN0YXRpYyBHbG9iYWxPYmplY3QqIGNyZWF0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBWZWN0
b3I8VVN0cmluZz4mIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxHbG9iYWxPYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEdsb2JhbE9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsIGFyZ3VtZW50cyk7CisgICAgfQogICAgIHZpcnR1YWwgVVN0cmlu
ZyBjbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiZ2xvYmFsIjsgfQogfTsKIENPTVBJTEVfQVNT
RVJUKCFJc0ludGVnZXI8R2xvYmFsT2JqZWN0Pjo6dmFsdWUsIFdURl9Jc0ludGVnZXJfR2xvYmFs
T2JqZWN0X2ZhbHNlKTsKQEAgLTE1MywyMiArMTU5LDIyIEBAIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoR2xvYmFsT2JqZWN0KTsKIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFZlY3RvcjxVU3Ry
aW5nPiYgYXJndW1lbnRzKQogICAgIDogSlNHbG9iYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKQogewotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxF
eGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVidWcpKTsK
LSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBK
U0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRl
bnRpZmllcihnbG9iYWxFeGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlv
bihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIo
Z2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKLSAgICBwdXREaXJlY3RGdW5j
dGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVj
KCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImRlYnVnIiksIGZ1bmN0aW9uRGVi
dWcpKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNy
ZWF0ZShnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZp
ZXIoZ2xvYmFsRXhlYygpLCAicHJpbnQiKSwgZnVuY3Rpb25QcmludCkpOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwg
dGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJx
dWl0IiksIGZ1bmN0aW9uUXVpdCkpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1
cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CiAj
aWZuZGVmIE5ERUJVRwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChn
bG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVj
dHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5IiksIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihnbG9iYWxFeGVjKCksIEpTRnVuY3Rpb246OmNyZWF0ZShnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkiKSwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSkp
OwogI2VuZGlmCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2Jh
bEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJl
KCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAidmVyc2lvbiIpLCBmdW5jdGlvblZlcnNp
b24pKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhl
YygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
MSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJydW4iKSwgZnVuY3Rpb25SdW4pKTsKLSAgICBw
dXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOwotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4
ZWMoKSwgImNoZWNrU3ludGF4IiksIGZ1bmN0aW9uQ2hlY2tTeW50YXgpKTsKLSAgICBwdXREaXJl
Y3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGds
b2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9i
YWxFeGVjKCksICJyZWFkbGluZSIpLCBmdW5jdGlvblJlYWRsaW5lKSk7CisgICAgcHV0RGlyZWN0
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0
aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZl
cnNpb24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFs
RXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0
cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJ1biIpLCBmdW5jdGlvblJ1
bikpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJsb2FkIiksIGZ1bmN0aW9uTG9hZCkpOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKGdsb2JhbEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhp
cywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjaGVj
a1N5bnRheCIpLCBmdW5jdGlvbkNoZWNrU3ludGF4KSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24o
Z2xvYmFsRXhlYygpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5j
dGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlYWRsaW5lIiks
IGZ1bmN0aW9uUmVhZGxpbmUpKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKLSAgICBw
dXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0
aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmll
cihnbG9iYWxFeGVjKCksICJzZXRTYW1wbGluZ0ZsYWdzIiksIGZ1bmN0aW9uU2V0U2FtcGxpbmdG
bGFncykpOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxF
eGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgp
LCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImNsZWFyU2FtcGxpbmdGbGFncyIpLCBmdW5j
dGlvbkNsZWFyU2FtcGxpbmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJzZXRTYW1wbGluZ0ZsYWdzIiks
IGZ1bmN0aW9uU2V0U2FtcGxpbmdGbGFncykpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25T
dHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJjbGVhclNhbXBsaW5nRmxh
Z3MiKSwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MpKTsKICNlbmRpZgogCiAgICAgSlNPYmpl
Y3QqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVjKCkpOwpAQCAtMjI3LDcg
KzIzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBp
ZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFcnJvcihleGVjLCBjcmVhdGVFcnJvcihl
eGVjLCAiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpOwogCi0gICAgR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBuZXcgKCZleGVjLT5nbG9iYWxEYXRhKCkpIEdsb2JhbE9iamVjdChleGVjLT5n
bG9iYWxEYXRhKCksIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwganNOdWxsKCkpLCBWZWN0b3I8VVN0cmluZz4oKSk7CisgICAgR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIEds
b2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
LCBWZWN0b3I8VVN0cmluZz4oKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwogICAgIHN0
b3BXYXRjaC5zdGFydCgpOwpAQCAtNTUyLDcgKzU1OCw3IEBAIGludCBqc2NtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndiwgSlNHbG8KICAgICBPcHRpb25zIG9wdGlvbnM7CiAgICAgcGFyc2VBcmd1
bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucywgZ2xvYmFsRGF0YSk7CiAKLSAgICBHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFsT2JqZWN0KCpnbG9iYWxE
YXRhLCBHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwganNOdWxsKCkp
LCBvcHRpb25zLmFyZ3VtZW50cyk7CisgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBH
bG9iYWxPYmplY3Q6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoKmdsb2JhbERhdGEsIGpzTnVsbCgpKSwgb3B0aW9ucy5hcmd1bWVudHMpOwogICAgIGJv
b2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGdsb2JhbE9iamVjdCwgb3B0aW9ucy5zY3JpcHRz
LCBvcHRpb25zLmR1bXApOwogICAgIGlmIChvcHRpb25zLmludGVyYWN0aXZlICYmIHN1Y2Nlc3Mp
CiAgICAgICAgIHJ1bkludGVyYWN0aXZlKGdsb2JhbE9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsMTQgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU0NhbGxiYWNrQ29uc3RydWN0b3IgOiBwdWJsaWMgSlNPYmplY3RXaXRoR2xvYmFs
T2JqZWN0IHsKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCBKU09iamVjdENhbGxBc0Nv
bnN0cnVjdG9yQ2FsbGJhY2spOworcHVibGljOgorICAgIHN0YXRpYyBKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0NsYXNzUmVmIGNsYXNzUmVmLCBKU09iamVjdENh
bGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcj4oKmV4ZWMtPmhlYXAoKSkp
IEpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYs
IGNhbGxiYWNrKTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCB+SlNDYWxsYmFja0NvbnN0cnVj
dG9yKCk7CiAgICAgSlNDbGFzc1JlZiBjbGFzc1JlZigpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3M7
IH0KICAgICBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbGJhY2soKSBjb25z
dCB7IHJldHVybiBtX2NhbGxiYWNrOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2FsbGJhY2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDYWxsYmFja0Z1bmN0aW9uLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOSArMzIsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NhbGxiYWNrRnVuY3Rp
b24gOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAg
SlNDYWxsYmFja0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3RD
YWxsQXNGdW5jdGlvbkNhbGxiYWNrLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsKIAorcHVibGlj
OgorICAgIHN0YXRpYyBKU0NhbGxiYWNrRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxs
YmFjayBjYWxsYmFjaywgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0NhbGxiYWNrRnVuY3Rpb24+KCpleGVjLT5oZWFwKCkp
KSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgbmFtZSk7
CisgICAgfQorCiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgCiAgICAg
Ly8gSW50ZXJuYWxGdW5jdGlvbiBtaXNoLW1hc2hlcyBjb25zdHJ1Y3RvciBhbmQgZnVuY3Rpb24g
YmVoYXZpb3IgLS0gd2Ugc2hvdWxkIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw5ICsx
MTYsMjMgQEAgc3RydWN0IEpTQ2FsbGJhY2tPYmplY3REYXRhIDogV2Vha0hhbmRsZQogICAgIAog
dGVtcGxhdGUgPGNsYXNzIEJhc2U+CiBjbGFzcyBKU0NhbGxiYWNrT2JqZWN0IDogcHVibGljIEJh
c2UgewotcHVibGljOgorcHJvdGVjdGVkOgogICAgIEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0NsYXNzUmVmLCB2b2lkKiBkYXRhKTsK
ICAgICBKU0NhbGxiYWNrT2JqZWN0KEpTR2xvYmFsRGF0YSYsIEpTQ2xhc3NSZWYsIFN0cnVjdHVy
ZSopOworICAgIC8vIFdlJ2QgbGlrZSB0byB1c2UgdGhlIHBsYWNlbWVudCB2ZXJzaW9uIG9mIG9w
ZXJhdG9yIG5ldyBkZWZpbmVkIGluIEpTQ2VsbCwgYnV0IAorICAgIC8vIHdlIGNhbid0IGJlY2F1
c2UgQmFzZSBpcyBhIHRlbXBsYXRlIGFyZ3VtZW50LCBzbyB3ZSBqdXN0IGR1cGxpY2F0ZSB0aGUg
c2FtZSAKKyAgICAvLyBmdW5jdGlvbmFsaXR5IGhlcmUuCisgICAgdm9pZCogb3BlcmF0b3IgbmV3
KHNpemVfdCwgdm9pZCogcHRyKSB7IHJldHVybiBwdHI7IH0KKworcHVibGljOgorICAgIHN0YXRp
YyBKU0NhbGxiYWNrT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBjbGFzc1Jl
Ziwgdm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxK
U0NhbGxiYWNrT2JqZWN0PigqZXhlYy0+aGVhcCgpKSkgSlNDYWxsYmFja09iamVjdChleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgY2xhc3NSZWYsIGRhdGEpOworICAgIH0KKyAgICBzdGF0
aWMgSlNDYWxsYmFja09iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
bGFzc1JlZiBjbGFzc1JlZiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNDYWxsYmFja09iamVjdD4oZ2xvYmFsRGF0YS5oZWFw
KSkgSlNDYWxsYmFja09iamVjdChnbG9iYWxEYXRhLCBjbGFzc1JlZiwgc3RydWN0dXJlKTsKKyAg
ICB9CiAKICAgICB2b2lkIHNldFByaXZhdGUodm9pZCogZGF0YSk7CiAgICAgdm9pZCogZ2V0UHJp
dmF0ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2MCw3ICs1NjAsNyBAQCBKU1ZhbHVlIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnN0YXRp
Y0Z1CiAgICAgICAgICAgICBpZiAoU3RhdGljRnVuY3Rpb25FbnRyeSogZW50cnkgPSBzdGF0aWNG
dW5jdGlvbnMtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgIGlm
IChKU09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24gPSBlbnRyeS0+
Y2FsbEFzRnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvID0gbmV3IChleGVjKSBKU0NhbGxiYWNrRnVuY3Rpb24oZXhlYywgYXNH
bG9iYWxPYmplY3QodGhpc09iai0+Z2V0QW5vbnltb3VzVmFsdWUoMCkpLCBjYWxsQXNGdW5jdGlv
biwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG8gPSBKU0Nh
bGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBhc0dsb2JhbE9iamVjdCh0aGlzT2JqLT5nZXRB
bm9ueW1vdXNWYWx1ZSgwKSksIGNhbGxBc0Z1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAgICAgICAgICAgICB0aGlzT2JqLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9w
ZXJ0eU5hbWUsIG8sIGVudHJ5LT5hdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG87CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NsYXNzUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ2xhc3NSZWYuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDbGFzc1JlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsNyBAQCBK
U09iamVjdCogT3BhcXVlSlNDbGFzczo6cHJvdG90eXBlKEV4ZWNTCiAKICAgICBpZiAoIWpzQ2xh
c3NEYXRhLmNhY2hlZFByb3RvdHlwZSkgewogICAgICAgICAvLyBSZWN1cnNpdmUsIGJ1dCBzaG91
bGQgYmUgZ29vZCBlbm91Z2ggZm9yIG91ciBwdXJwb3NlcwotICAgICAgICBqc0NsYXNzRGF0YS5j
YWNoZWRQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgbmV3IChleGVjKSBKU0NhbGxi
YWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD4oZXhlYywgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNhbGxiYWNrT2JqZWN0
U3RydWN0dXJlKCksIHByb3RvdHlwZUNsYXNzLCAmanNDbGFzc0RhdGEpLCAwKTsgLy8gc2V0IGpz
Q2xhc3NEYXRhIGFzIHRoZSBvYmplY3QncyBwcml2YXRlIGRhdGEsIHNvIGl0IGNhbiBjbGVhciBv
dXIgcmVmZXJlbmNlIG9uIGRlc3RydWN0aW9uCisgICAgICAgIGpzQ2xhc3NEYXRhLmNhY2hlZFBy
b3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0
V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUo
KSwgcHJvdG90eXBlQ2xhc3MsICZqc0NsYXNzRGF0YSksIDApOyAvLyBzZXQganNDbGFzc0RhdGEg
YXMgdGhlIG9iamVjdCdzIHByaXZhdGUgZGF0YSwgc28gaXQgY2FuIGNsZWFyIG91ciByZWZlcmVu
Y2Ugb24gZGVzdHJ1Y3Rpb24KICAgICAgICAgaWYgKHBhcmVudENsYXNzKSB7CiAgICAgICAgICAg
ICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IHBhcmVudENsYXNzLT5wcm90b3R5cGUoZXhlYykp
CiAgICAgICAgICAgICAgICAganNDbGFzc0RhdGEuY2FjaGVkUHJvdG90eXBlLT5zZXRQcm90b3R5
cGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm90b3R5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDcgKzk3LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZQogICAg
ICAgICByZXR1cm4gSlNHbG9iYWxDb250ZXh0UmV0YWluKHRvR2xvYmFsUmVmKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpKSk7CiAgICAgfQogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG5ldyAoZ2xvYmFsRGF0YS5nZXQoKSkgSlNDYWxsYmFja09iamVjdDxKU0dsb2JhbE9i
amVjdD4oKmdsb2JhbERhdGEsIGdsb2JhbE9iamVjdENsYXNzLCBKU0NhbGxiYWNrT2JqZWN0PEpT
R2xvYmFsT2JqZWN0Pjo6Y3JlYXRlU3RydWN0dXJlKCpnbG9iYWxEYXRhLCBqc051bGwoKSkpOwor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0NhbGxiYWNrT2JqZWN0PEpTR2xv
YmFsT2JqZWN0Pjo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3RDbGFzcywgSlNDYWxs
YmFja09iamVjdDxKU0dsb2JhbE9iamVjdD46OmNyZWF0ZVN0cnVjdHVyZSgqZ2xvYmFsRGF0YSwg
anNOdWxsKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IGdsb2JhbE9iamVjdENsYXNzLT5wcm90b3R5
cGUoZXhlYyk7CiAgICAgaWYgKCFwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEs
NyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2UoSlNDb250ZXh0UmVmIGN0CiAgICAgaWYgKCFq
c0NsYXNzKQogICAgICAgICByZXR1cm4gdG9SZWYoY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYykp
OwogCi0gICAgSlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmpl
Y3QgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tPYmplY3Q8SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0
PihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+Y2FsbGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CisgICAg
SlNDYWxsYmFja09iamVjdDxKU09iamVjdFdpdGhHbG9iYWxPYmplY3Q+KiBvYmplY3QgPSBKU0Nh
bGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZShleGVjLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y2Fs
bGJhY2tPYmplY3RTdHJ1Y3R1cmUoKSwganNDbGFzcywgZGF0YSk7CiAgICAgaWYgKEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBqc0NsYXNzLT5wcm90b3R5cGUoZXhlYykpCiAgICAgICAgIG9iamVjdC0+
c2V0UHJvdG90eXBlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvdG90eXBlKTsKIApAQCAtOTUsNyAr
OTUsNyBAQCBKU09iamVjdFJlZiBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsCiAKICAgICBJ
ZGVudGlmaWVyIG5hbWVJRCA9IG5hbWUgPyBuYW1lLT5pZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCkpIDogSWRlbnRpZmllcihleGVjLCAiYW5vbnltb3VzIik7CiAgICAgCi0gICAgcmV0dXJu
IHRvUmVmKG5ldyAoZXhlYykgSlNDYWxsYmFja0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgY2FsbEFzRnVuY3Rpb24sIG5hbWVJRCkpOworICAgIHJldHVybiB0b1Jl
ZihKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIGNhbGxBc0Z1bmN0aW9uLCBuYW1lSUQpKTsKIH0KIAogSlNPYmplY3RSZWYgSlNPYmpl
Y3RNYWtlQ29uc3RydWN0b3IoSlNDb250ZXh0UmVmIGN0eCwgSlNDbGFzc1JlZiBqc0NsYXNzLCBK
U09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2sgY2FsbEFzQ29uc3RydWN0b3IpCkBAIC0x
MDcsNyArMTA3LDcgQEAgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlQ29uc3RydWN0b3IoSlNDbwog
ICAgIGlmICghanNQcm90b3R5cGUpCiAgICAgICAgIGpzUHJvdG90eXBlID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKTsKIAotICAgIEpTQ2FsbGJhY2tDb25z
dHJ1Y3RvciogY29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Y2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZSgpLCBqc0NsYXNzLCBjYWxsQXNDb25zdHJ1Y3Rv
cik7CisgICAgSlNDYWxsYmFja0NvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9IEpTQ2FsbGJhY2tD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jYWxsYmFja0NvbnN0cnVjdG9yU3RydWN0dXJlKCks
IGpzQ2xhc3MsIGNhbGxBc0NvbnN0cnVjdG9yKTsKICAgICBjb25zdHJ1Y3Rvci0+cHV0RGlyZWN0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwganNQ
cm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICByZXR1cm4g
dG9SZWYoY29uc3RydWN0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTMsMjQgKzMsMjQgQEAgRVhQT1JUUwog
ICAgID8/MENTdHJpbmdAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBC
RElAWgogICAgID8/MENvbGxhdG9yQFdURkBAUUFFQFBCREBaCi0gICAgPz8wRGF0ZUluc3RhbmNl
QEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQFBBVlN0cnVjdHVyZUAxQE5AWgorICAgID8/MERhdGVJ
bnN0YW5jZUBKU0NAQElBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBOQFoKICAgICA/
PzBEZWZhdWx0R0NBY3Rpdml0eUNhbGxiYWNrQEpTQ0BAUUFFQFBBVkhlYXBAMUBAWgogICAgID8/
MERyb3BBbGxMb2Nrc0BKU0xvY2tASlNDQEBRQUVAVzRKU0xvY2tCZWhhdmlvckAyQEBaCiAgICAg
Pz8wRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBB
VkpTR2xvYmFsT2JqZWN0QDFAQFogIAogICAgID8/MEludGVybmFsRnVuY3Rpb25ASlNDQEBJQUVA
UEFWSlNHbG9iYWxEYXRhQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZJ
ZGVudGlmaWVyQDFAQFoKLSAgICA/PzBKU0FycmF5QEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAx
QFBBVlN0cnVjdHVyZUAxQEBaCi0gICAgPz8wSlNBcnJheUBKU0NAQFFBRUBBQVZKU0dsb2JhbERh
dGFAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZBcmdMaXN0QDFAQFoKKyAgICA/PzBKU0FycmF5QEpTQ0BA
SUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCisgICAgPz8wSlNBcnJheUBK
U0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBBQlZBcmdMaXN0QDFAQFoK
ICAgICA/PzBKU0J5dGVBcnJheUBKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVA
MUBQQVZCeXRlQXJyYXlAV1RGQEBAWgotICAgID8/MEpTRnVuY3Rpb25ASlNDQEBRQUVAUEFWRXhl
Y1N0YXRlQDFAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBIQUJWSWRlbnRpZmll
ckAxQFA2SV9KMEBaQFoKKyAgICA/PzBKU0Z1bmN0aW9uQEpTQ0BAQUFFQFBBVkV4ZWNTdGF0ZUAx
QFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFASEFCVklkZW50aWZpZXJAMUBQNklf
SjBAWkBaCiAgICAgPz8wSlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0ZUAxQEBaCiAgICAgPz8w
SlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0QEpTQ0BASUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpT
R2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAQFoKICAgICA/PzBKU09iamVjdFdpdGhHbG9i
YWxPYmplY3RASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZTdHJ1Y3R1cmVAMUBAWgog
ICAgID8/ME1ENUBXVEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCiAgICAgPz8w
UmVmQ291bnRlZExlYWtDb3VudGVyQFdURkBAUUFFQFBCREBaCi0gICAgPz8wUmVnRXhwT2JqZWN0
QEpTQ0BAUUFFQFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAUEFWUmVnRXhwQDFA
QFoKKyAgICA/PzBSZWdFeHBPYmplY3RASlNDQEBJQUVAUEFWSlNHbG9iYWxPYmplY3RAMUBQQVZT
dHJ1Y3R1cmVAMUBQQVZSZWdFeHBAMUBAWgogICAgID8/MFNIQTFAV1RGQEBRQUVAWFoKLSAgICA/
PzBTdHJpbmdPYmplY3RASlNDQEBRQUVAUEFWRXhlY1N0YXRlQDFAUEFWU3RydWN0dXJlQDFAQUJW
VVN0cmluZ0AxQEBaCisgICAgPz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFFQFBBVkV4ZWNTdGF0ZUAx
QFBBVlN0cnVjdHVyZUAxQEFCVlVTdHJpbmdAMUBAWgogICAgID8/MFN0cnVjdHVyZUBKU0NAQEFB
RUBBQVZKU0dsb2JhbERhdGFAMUBWSlNWYWx1ZUAxQEFCVlR5cGVJbmZvQDFASVBCVUNsYXNzSW5m
b0AxQEBaCiAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgPz8wVVN0cmlu
Z0BKU0NAQFFBRUBQQkRAWgpAQCAtNDAsNyArNDAsNiBAQCBFWFBPUlRTCiAgICAgPz8xVGhyZWFk
Q29uZGl0aW9uQFdURkBAUUFFQFhaCiAgICAgPz8xV1RGVGhyZWFkRGF0YUBXVEZAQFFBRUBYWgog
ICAgID8/MVdlYWtIYW5kbGVPd25lckBKU0NAQFVBRUBYWgotICAgID8/MkpTR2xvYmFsT2JqZWN0
QEpTQ0BAU0FQQVhJUEFWSlNHbG9iYWxEYXRhQDFAQFoKICAgICA/PzhKU0NAQFlBX05BQlZVU3Ry
aW5nQDBAMEBaCiAgICAgPz84V1RGQEBZQV9OQUJWQ1N0cmluZ0AwQDBAWgogICAgID9hYnNvbHV0
ZVRpbWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWxAV1RGQEBZQUtOQFoKQEAgLTk5LDcgKzk4LDcgQEAg
RVhQT1JUUwogICAgID9jcmVhdGVAQnl0ZUFycmF5QFdURkBAU0E/QVY/JFBhc3NSZWZQdHJAVkJ5
dGVBcnJheUBXVEZAQEAyQElAWgogICAgID9jcmVhdGVASlNHbG9iYWxEYXRhQEpTQ0BAU0E/QVY/
JFBhc3NSZWZQdHJAVkpTR2xvYmFsRGF0YUBKU0NAQEBXVEZAQFc0VGhyZWFkU3RhY2tUeXBlQDJA
QFoKICAgICA/Y3JlYXRlQE9wYXF1ZUpTU3RyaW5nQEBTQT9BVj8kUGFzc1JlZlB0ckBVT3BhcXVl
SlNTdHJpbmdAQEBXVEZAQEFCVlVTdHJpbmdASlNDQEBAWgotICAgID9jcmVhdGVAUmVnRXhwQEpT
Q0BAU0FQQVYxMkBQQVZKU0dsb2JhbERhdGFAMkBBQlZVU3RyaW5nQDJAVzRSZWdFeHBGbGFnc0Ay
QEBaCisgICAgP2NyZWF0ZUBSZWdFeHBASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQEFC
VlVTdHJpbmdAMkBXNFJlZ0V4cEZsYWdzQDJAQFoKICAgICA/Y3JlYXRlRW1wdHlTdHJpbmdAU21h
bGxTdHJpbmdzQEpTQ0BAQUFFWFBBVkpTR2xvYmFsRGF0YUAyQEBaCiAgICAgP2NyZWF0ZUVycm9y
QEpTQ0BAWUFQQVZKU09iamVjdEAxQFBBVkV4ZWNTdGF0ZUAxQEFCVlVTdHJpbmdAMUBAWgogICAg
ID9jcmVhdGVJbnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2VwdGlvbkBKU0NAQFlBUEFWSlNPYmplY3RA
MUBQQVZKU0dsb2JhbERhdGFAMUBAWgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzcsNyAr
MTczNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmEKICAgICBB
U1NFUlQoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpOwogICAgIEFTU0VSVChuZWVkc0Z1bGxT
Y29wZUNoYWluKCkpOwogICAgIEFTU0VSVCghY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRp
b25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IG5ldyAoY2FsbEZyYW1lKSBKU0FjdGl2YXRpb24oY2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKSk7CiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3Rlcigp
KSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNyAr
MjQ2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgICAg
ICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CiAgICAgICAg
IGdsb2JhbE9iamVjdC0+cmVtb3ZlRGlyZWN0KCptX2dsb2JhbERhdGEsIGZ1bmN0aW9uLT5pZGVu
dCgpKTsgLy8gTmV3bHkgZGVjbGFyZWQgZnVuY3Rpb25zIG92ZXJ3cml0ZSBleGlzdGluZyBwcm9w
ZXJ0aWVzLgogCi0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24o
ZXhlYywgbWFrZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CisgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgbWFrZUZ1bmN0aW9uKGV4
ZWMsIGZ1bmN0aW9uKSwgc2NvcGVDaGFpbik7CiAgICAgICAgIGludCBpbmRleCA9IGFkZEdsb2Jh
bFZhcihmdW5jdGlvbi0+aWRlbnQoKSwgZmFsc2UpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnJl
Z2lzdGVyQXQoaW5kZXgpLnNldCgqbV9nbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogbWFrZUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRnVuY3Rp
b25Cb2R5Tm9kZSogYm9keSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGJvZHktPmlkZW50KCksIGJvZHktPnNvdXJj
ZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPnBhcmFtZXRlcnMoKSwgYm9keS0+aXNT
dHJpY3RNb2RlKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgYm9keS0+
aWRlbnQoKSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFy
YW1ldGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxh
c3RMaW5lKCkpOwogICAgICAgICB9CiAKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0
YW50KGNvbnN0IElkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dAogewogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TmV3UmVnRXhw
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIFJlZ0V4cDo6Y3JlYXRlKGdlbmVyYXRv
ci5nbG9iYWxEYXRhKCksIG1fcGF0dGVybi51c3RyaW5nKCksIHJlZ0V4cEZsYWdzKG1fZmxhZ3Mu
dXN0cmluZygpKSkpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5ld1JlZ0V4cChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBSZWdFeHA6OmNyZWF0ZSgqZ2VuZXJhdG9yLmdsb2Jh
bERhdGEoKSwgbV9wYXR0ZXJuLnVzdHJpbmcoKSwgcmVnRXhwRmxhZ3MobV9mbGFncy51c3RyaW5n
KCkpKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDkx
MTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY3OSw3ICsxNjc5LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVh
dGVTeW50YXhFcnJvcihjYWxsRnJhbWUsICJJbnZhbGlkIGZsYWdzIHN1cHBsaWVkIHRvIFJlZ0V4
cCBjb25zdHJ1Y3Rvci4iKTsKICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CiAgICAgICAgIH0K
LSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBKU1ZhbHVlKG5ldyAoZ2xvYmFs
RGF0YSkgUmVnRXhwT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxs
RnJhbWUtPnNjb3BlQ2hhaW4oKS0+Z2xvYmFsT2JqZWN0LT5yZWdFeHBTdHJ1Y3R1cmUoKSwgcmVn
RXhwKSk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gSlNWYWx1ZShSZWdF
eHBPYmplY3Q6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPmdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0
dXJlKCksIHJlZ0V4cCkpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25ld19y
ZWdleHApOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CkBAIC0zNDMwLDcgKzM0MzAsNyBA
QCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICghYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBBcmd1bWVu
dHMqIGFyZ3VtZW50cyA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJn
dW1lbnRzUmVnaXN0ZXIpID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICAgICAgY2FsbEZy
YW1lLT51bmNoZWNrZWRSKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdp
c3RlcikpID0gSlNWYWx1ZShhcmd1bWVudHMpOwogICAgICAgICB9CkBAIC00NTYwLDcgKzQ1NjAs
NyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogCiAgICAgICAgIGludCBhY3RpdmF0aW9uUmVnID0g
dlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgaWYgKCFjYWxsRnJhbWUtPnIoYWN0aXZhdGlvblJl
ZykuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBu
ZXcgKGdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKTsKKyAgICAgICAg
ICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSkpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGFjdGl2
YXRpb25SZWcpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+
c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7
CiAgICAgICAgIH0KQEAgLTQ2NTEsNyArNDY1MSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAg
ICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwogCiAgICAgICAgIGlmICghY2FsbEZy
YW1lLT5yKGRzdCkuanNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50
cyA9IG5ldyAoZ2xvYmFsRGF0YSkgQXJndW1lbnRzKGNhbGxGcmFtZSk7CisgICAgICAgICAgICBB
cmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKGdsb2JhbERhdGEsIGNhbGxG
cmFtZSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IEpTVmFsdWUo
YXJndW1lbnRzKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoZHN0KSkgPSBKU1ZhbHVlKGFyZ3VtZW50cyk7CiAgICAgICAgIH0K
QEAgLTUxMTMsMTMgKzUxMTMsMTMgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cmV0cmlldmVBcmd1
bWVudHMoQwogICAgICAgICBpbnQgcmVhbEFyZ3VtZW50c1JlZ2lzdGVyID0gdW5tb2RpZmllZEFy
Z3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKTsKICAgICAgICAgaWYgKEpTVmFsdWUg
YXJndW1lbnRzID0gZnVuY3Rpb25DYWxsRnJhbWUtPnVuY2hlY2tlZFIoYXJndW1lbnRzUmVnaXN0
ZXIpLmpzVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHM7Ci0gICAgICAgIEpT
VmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShuZXcgKGNhbGxGcmFtZSkgQXJndW1lbnRzKGZ1bmN0
aW9uQ2FsbEZyYW1lKSk7CisgICAgICAgIEpTVmFsdWUgYXJndW1lbnRzID0gSlNWYWx1ZShBcmd1
bWVudHM6OmNyZWF0ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb25DYWxsRnJhbWUp
KTsKICAgICAgICAgZnVuY3Rpb25DYWxsRnJhbWUtPnIoYXJndW1lbnRzUmVnaXN0ZXIpID0gYXJn
dW1lbnRzOwogICAgICAgICBmdW5jdGlvbkNhbGxGcmFtZS0+cihyZWFsQXJndW1lbnRzUmVnaXN0
ZXIpID0gYXJndW1lbnRzOwogICAgICAgICByZXR1cm4gYXJndW1lbnRzOwogICAgIH0KIAotICAg
IEFyZ3VtZW50cyogYXJndW1lbnRzID0gbmV3IChmdW5jdGlvbkNhbGxGcmFtZSkgQXJndW1lbnRz
KGZ1bmN0aW9uQ2FsbEZyYW1lKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50
czo6Y3JlYXRlKGZ1bmN0aW9uQ2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uQ2FsbEZy
YW1lKTsKICAgICBhcmd1bWVudHMtPmNvcHlSZWdpc3RlcnMoZnVuY3Rpb25DYWxsRnJhbWUtPmds
b2JhbERhdGEoKSk7CiAgICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUyLDcgKzIw
NTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfCiB7CiAgICAg
U1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uID0gbmV3IChzdGFja0ZyYW1lLmdsb2JhbERhdGEpIEpTQWN0aXZhdGlvbihzdGFj
a0ZyYW1lLmNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oc3RhY2tG
cmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSkpOworICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IEpTQWN0aXZhdGlvbjo6Y3JlYXRlKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpKSk7CiAgICAgc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNldFNjb3Bl
Q2hhaW4oc3RhY2tGcmFtZS5jYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9u
KSk7CiAgICAgcmV0dXJuIGFjdGl2YXRpb247CiB9CkBAIC0yMTAwLDcgKzIxMDAsNyBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCi0gICAgQXJndW1lbnRzKiBhcmd1bWVudHMgPSBuZXcg
KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSkgQXJndW1lbnRzKHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsK
KyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFyZ3VtZW50czo6Y3JlYXRlKCpzdGFja0ZyYW1l
Lmdsb2JhbERhdGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoYXJndW1lbnRzKSk7CiB9CiAKQEAgLTIxMDgsNyArMjEwOCw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IG5l
dyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBBcmd1bWVudHMoc3RhY2tGcmFtZS5jYWxsRnJhbWUs
IEFyZ3VtZW50czo6Tm9QYXJhbWV0ZXJzKTsKKyAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IEFy
Z3VtZW50czo6Y3JlYXRlTm9QYXJhbWV0ZXJzKCpzdGFja0ZyYW1lLmdsb2JhbERhdGEsIHN0YWNr
RnJhbWUuY2FsbEZyYW1lKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYXJn
dW1lbnRzKSk7CiB9CiAKQEAgLTMxNjAsNyArMzE2MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEpTT2JqZWN0Kiwgb3BfbmV3X3IKICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIG5ldyAoc3RhY2tGcmFtZS5nbG9iYWxEYXRhKSBSZWdFeHBPYmplY3Qo
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4
cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKCpzdGFja0ZyYW1lLmdsb2JhbERh
dGEsIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0YWNrRnJh
bWUuY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCBy
ZWdFeHApOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfYml0
b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2
aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksMTQgKzU5LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgY2xhc3MgQXJndW1lbnRzIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIEFyZ3VtZW50cyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxBcmd1bWVudHM+KGdsb2JhbERhdGEuaGVhcCkpIEFyZ3VtZW50
cyhjYWxsRnJhbWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgQXJndW1l
bnRzKiBjcmVhdGVOb1BhcmFtZXRlcnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEFyZ3VtZW50cz4oZ2xvYmFsRGF0YS5oZWFwKSkgQXJndW1lbnRzKGNhbGxGcmFtZSwg
Tm9QYXJhbWV0ZXJzKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIFVzZSBhbiBlbnVtIGJlY2F1
c2Ugb3RoZXJ3aXNlIGdjYyBpbnNpc3RzIG9uIGRvaW5nIGEgbWVtb3J5CiAgICAgICAgIC8vIHJl
YWQuCiAgICAgICAgIGVudW0geyBNYXhBcmd1bWVudHMgPSAweDEwMDAwIH07CiAKKyAgICBwcml2
YXRlOgogICAgICAgICBlbnVtIE5vUGFyYW1ldGVyc1R5cGUgeyBOb1BhcmFtZXRlcnMgfTsKLQor
ICAgICAgICAKICAgICAgICAgQXJndW1lbnRzKENhbGxGcmFtZSopOwogICAgICAgICBBcmd1bWVu
dHMoQ2FsbEZyYW1lKiwgTm9QYXJhbWV0ZXJzVHlwZSk7CisKKyAgICBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgfkFyZ3VtZW50cygpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEx
ICs3OSwxMSBAQCBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RBcnJheVdpCiAgICAg
ICAgIHVpbnQzMl90IG4gPSBhcmdzLmF0KDApLnRvVUludDMyKGV4ZWMpOwogICAgICAgICBpZiAo
biAhPSBhcmdzLmF0KDApLnRvTnVtYmVyKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXkgc2l6ZSBpcyBub3QgYSBz
bWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlKCksIG4sIENyZWF0ZUluaXRpYWxpemVkKTsKKyAgICAgICAgcmV0dXJuIEpTQXJyYXk6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwg
biwgQ3JlYXRlSW5pdGlhbGl6ZWQpOwogICAgIH0KIAogICAgIC8vIG90aGVyd2lzZSB0aGUgYXJy
YXkgaXMgY29uc3RydWN0ZWQgd2l0aCB0aGUgYXJndW1lbnRzIGluIGl0Ci0gICAgcmV0dXJuIG5l
dyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgYXJncyk7CisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgYXJncyk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBBcnJheVByb3Rv
dHlwZTsKIAogICAgIGNsYXNzIEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5j
dGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIEFycmF5Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBBcnJheVByb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBBcnJheUNvbnN0cnVj
dG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQXJyYXlQcm90b3R5cGUqIGFyclByb3RvdHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEFycmF5Q29uc3Ry
dWN0b3I+KCpleGVjLT5oZWFwKCkpKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCBhcnJQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01ODIsNyArNTgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICAgICAgZGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZGVsZXRlRG91YmxlKTsKICAgICB9CiAKLSAgICBKU0FycmF5KiByZXNPYmogPSBuZXcgKGV4ZWMp
IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmFycmF5U3RydWN0dXJlKCksIGRlbGV0ZUNvdW50LCBDcmVhdGVDb21wYWN0KTsKKyAgICBKU0Fy
cmF5KiByZXNPYmogPSBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCksIGRlbGV0ZUNvdW50LCBDcmVh
dGVDb21wYWN0KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHJlc09iajsKICAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGRlbGV0ZUNvdW50OyBrKyspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsOSArMjcsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQXJyYXlQcm90
b3R5cGUgOiBwdWJsaWMgSlNBcnJheSB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBB
cnJheVByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHByaXZhdGU6
CisgICAgICAgIEFycmF5UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBBcnJheVByb3RvdHlwZSogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxB
cnJheVByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIEFycmF5UHJvdG90eXBlKGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0
ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgQm9v
bGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3IoRQogLy8gRUNNQSAxNS42LjIKIEpT
T2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmogPSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmpl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICBCb29sZWFu
T2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVh
bk9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBqc0Jvb2xlYW4oYXJncy5hdCgwKS50b0Jvb2xlYW4oZXhlYykpKTsKICAgICBy
ZXR1cm4gb2JqOwogfQpAQCAtNzEsNyArNzEsNyBAQCBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0
b3I6OmdldENhbGxEYXRhCiAKIEpTT2JqZWN0KiBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0
ZUJvb2xlYW4oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSkKIHsKLSAgICBCb29sZWFuT2JqZWN0KiBvYmog
PSBuZXcgKGV4ZWMpIEJvb2xlYW5PYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0g
Qm9vbGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5i
b29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShleGVj
LT5nbG9iYWxEYXRhKCksIGltbWVkaWF0ZUJvb2xlYW5WYWx1ZSk7CiAgICAgcmV0dXJuIG9iajsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwx
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBCb29sZWFuUHJvdG90eXBlOwogCiAgICAg
Y2xhc3MgQm9vbGVhbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAg
IHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBCb29sZWFuUHJvdG90eXBlKik7Cisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEJvb2xlYW5Db25zdHJ1Y3Rvciog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xQcm90b3R5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxCb29sZWFuQ29uc3Ry
dWN0b3I+KCpleGVjLT5oZWFwKCkpKSBCb29sZWFuQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIGJvb2xQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1
Y3REYXRhJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
bk9iamVjdC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Jvb2xlYW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsMTUgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdCA6IHB1YmxpYyBKU1dyYXBw
ZXJPYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgQm9vbGVhbk9iamVjdChK
U0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqKTsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEJvb2xl
YW5PYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBCb29sZWFuT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEJvb2xlYW5PYmplY3Q+KGdsb2JhbERhdGEuaGVhcCkpIEJvb2xlYW5P
YmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAgICAgICAgIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jv
b2xlYW5Qcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Cb29sZWFuUHJvdG90eXBlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw5ICsyNiwxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBCb29sZWFuUHJvdG90
eXBlIDogcHVibGljIEJvb2xlYW5PYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgog
ICAgICAgICBCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBCb29sZWFuUHJvdG90eXBl
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPEJvb2xlYW5Qcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBCb29sZWFuUHJv
dG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNWYWx1ZSBwcm90b3R5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQyLDcgKzE0Miw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhl
YywKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBuZXcgKGV4ZWMpIERhdGVJbnN0YW5j
ZShleGVjLCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworICAgIHJldHVy
biBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUo
KSwgdmFsdWUpOwogfQogICAgIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0V2l0aERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaAkocmV2aXNp
b24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgRGF0ZVByb3RvdHlwZTsKIAogICAgIGNsYXNzIERhdGVDb25zdHJ1Y3RvciA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAg
ICAgRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgRGF0ZVByb3RvdHlwZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBEYXRlQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEYXRlUHJvdG90eXBlKiBkYXRl
UHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8RGF0ZUNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgRGF0ZUNvbnN0cnVjdG9yKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBkYXRlUHJvdG90eXBlKTsKKyAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkocmV2aXNpb24gOTExODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTAgKzMwLDIwIEBAIG5hbWVzcGFjZSBXVEYgewogbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAg
ICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBEYXRlSW5zdGFuY2UoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgZG91YmxlKTsKLSAgICAgICAgZXhwbGljaXQgRGF0ZUluc3RhbmNlKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwotCisgICAgICAgIERhdGVJbnN0YW5jZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRGF0
ZUluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
ZG91YmxlIGRhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxEYXRlSW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBEYXRlSW5zdGFuY2UoZXhlYywgc3Ry
dWN0dXJlLCBkYXRlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgRGF0ZUluc3RhbmNlKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPERhdGVJbnN0YW5jZT4oKmV4ZWMt
PmhlYXAoKSkpIERhdGVJbnN0YW5jZShleGVjLCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBkb3VibGUgaW50ZXJuYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbFZhbHVlKCkudW5jaGVja2VkR2V0TnVtYmVyKCk7IH0KIAogICAgICAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuaAkocmV2aXNpb24gOTExODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE9iamVjdFBy
b3RvdHlwZTsKIAogICAgIGNsYXNzIERhdGVQcm90b3R5cGUgOiBwdWJsaWMgRGF0ZUluc3RhbmNl
IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgRGF0ZVByb3RvdHlwZShFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgRGF0ZVByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxEYXRlUHJvdG90eXBlPigqZXhl
Yy0+aGVhcCgpKSkgRGF0ZVByb3RvdHlwZShleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXJyb3IuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNDMgKzQyLDQzIEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBzb3VyY2VVUkxQcm9wZXJ0eU5hbWUKIEpTT2JqZWN0KiBjcmVh
dGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNz
YWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJv
ckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIHJldHVybiBFcnJvckluc3RhbmNl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKIHsKICAg
ICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6
Y3JlYXRlKCZnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5ldmFsRXJy
b3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4g
RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxP
YmplY3QtPmV2YWxFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2Up
OwogfQogCiBKU09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5l
cnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JD
b25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKIH0KIAogSlNPYmplY3Qq
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0g
ICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRh
KCksIGdsb2JhbE9iamVjdC0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVj
dHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3Ry
dWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVh
dGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVy
biBFcnJvckluc3RhbmNlOjpjcmVhdGUoJmdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9i
YWxPYmplY3QtPnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVz
c2FnZSk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmds
b2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9y
U3RydWN0dXJlKCksIG1lc3NhZ2UpOwogfQogCiBKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAg
ICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+dHlwZUVy
cm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJu
IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdl
KTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlz
RW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZSgmZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJv
clN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3Ry
dWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIEpTT2JqZWN0KiBjcmVh
dGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCkBAIC0xNjYs
MTIgKzE2NiwxOCBAQCBKU09iamVjdCogdGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4CiB9
CiAKIGNsYXNzIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIDogSW50ZXJu
YWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwg
ZXhlYy0+Z2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcikKICAgICAg
ICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKICAgICB7CiAgICAgfQorCitwdWJsaWM6CisgICAgc3Rh
dGljIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IFVTdHJpbmcmIG1lc3NhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgU3RyaWN0TW9k
ZVR5cGVFcnJvckZ1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBtZXNzYWdl
KTsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0VGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKQEAgLTIwNSw3
ICsyMTEsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFN0cmljdE1vZGVUeXBlCiAKIEpT
VmFsdWUgY3JlYXRlVHlwZUVycm9yRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIFN0cmljdE1vZGVUeXBlRXJy
b3JGdW5jdGlvbihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+aW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZSgpLCBtZXNzYWdlKTsK
KyAgICByZXR1cm4gU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmlu
dGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEVycm9yUHJvdG90eXBlOwogCiAgICAgY2xhc3Mg
RXJyb3JDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6
CisgICAgcHJpdmF0ZToKICAgICAgICAgRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEVycm9yUHJvdG90eXBlKik7CiAKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBFcnJvckNvbnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRXJy
b3JQcm90b3R5cGUqIGVyclByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEVycm9yQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBFcnJv
ckNvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBlcnJQcm90b3R5cGUp
OworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29u
c3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKICAgICAgICAgdmly
dHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDkxMTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDMyICsyNSwzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3Qg
Q2xhc3NJbmZvIEVycm9ySW5zdGFuY2U6OnNfaW5mbyA9IHsgIkVycm9yIiwgJkpTTm9uRmluYWxP
YmplY3Q6OnNfaW5mbywgMCwgMCB9OwogCi1FcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgOiBKU05v
bkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCitFcnJvckluc3RhbmNlOjpFcnJv
ckluc3RhbmNlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKICAgICAsIG1f
YXBwZW5kU291cmNlVG9NZXNzYWdlKGZhbHNlKQogewogICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7Ci0gICAgcHV0RGlyZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5wcm9wZXJ0eU5h
bWVzLT5tZXNzYWdlLCBqc1N0cmluZyhnbG9iYWxEYXRhLCAiIiksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBq
c1N0cmluZygmZ2xvYmFsRGF0YSwgIiIpLCBEb250RW51bSk7CiB9CiAKLUVycm9ySW5zdGFuY2U6
OkVycm9ySW5zdGFuY2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSkKLSAgICA6IEpTTm9uRmluYWxPYmplY3QoKmds
b2JhbERhdGEsIHN0cnVjdHVyZSkKK0Vycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYg
bWVzc2FnZSkKKyAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQog
ICAgICwgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2UoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGluaGVy
aXRzKCZzX2luZm8pKTsKLSAgICBwdXREaXJlY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG1lc3NhZ2UpLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlOYW1l
cy0+bWVzc2FnZSwganNTdHJpbmcoJmdsb2JhbERhdGEsIG1lc3NhZ2UpLCBEb250RW51bSk7CiB9
CiAKLUVycm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBtZXNzYWdlKQor
RXJyb3JJbnN0YW5jZSogRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0g
ICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgRXJyb3JJbnN0YW5jZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIG1lc3NhZ2UpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxFcnJvckluc3Rh
bmNlPihnbG9iYWxEYXRhLmhlYXApKSBFcnJvckluc3RhbmNlKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSwgbWVzc2FnZSk7CiB9CiAKIEVycm9ySW5zdGFuY2UqIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UpCiB7
CiAgICAgaWYgKG1lc3NhZ2UuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhl
YykgRXJyb3JJbnN0YW5jZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOwotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0
dXJlLCBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEVycm9ySW5zdGFuY2U+KCpleGVjLT5oZWFwKCkpKSBFcnJvckluc3RhbmNlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
RXJyb3JJbnN0YW5jZT4oKmV4ZWMtPmhlYXAoKSkpIEVycm9ySW5zdGFuY2UoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UudG9TdHJpbmcoZXhlYykpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBB
bm9ueW1vdXNTbG90Q291bnQsICZzX2luZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGlj
IEVycm9ySW5zdGFuY2UqIGNyZWF0ZShKU0dsb2JhbERhdGEqLCBTdHJ1Y3R1cmUqLCBjb25zdCBV
U3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwogICAgICAgICBzdGF0aWMgRXJyb3JJ
bnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEpTVmFsdWUgbWVzc2FnZSk7
CiAKIApAQCAtNDUsOCArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBi
b29sIGlzRXJyb3JJbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEqLCBTdHJ1
Y3R1cmUqKTsKLSAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShKU0dsb2JhbERhdGEqLCBT
dHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7CisgICAgICAgIGV4cGxpY2l0IEVycm9ySW5zdGFu
Y2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIGV4cGxpY2l0IEVycm9ySW5z
dGFuY2UoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29uc3QgVVN0cmluZyYpOwogCiAgICAg
ICAgIGJvb2wgbV9hcHBlbmRTb3VyY2VUb01lc3NhZ2U7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIGNvbnN0IENsYXNzSW5mbyBFcnJv
clByb3RvdHlwZTo6c19pbmZvID0KIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoRXJyb3JQcm90
b3R5cGUpOwogCiBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICA6IEVycm9ySW5zdGFuY2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQorICAgIDog
RXJyb3JJbnN0YW5jZShleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSkKIHsKICAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsICJFcnJvciIpLCBEb250RW51bSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAkocmV2aXNpb24g
OTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBPYmplY3RQcm90b3R5cGU7CiAKICAgICBjbGFzcyBFcnJvclByb3RvdHlwZSA6IHB1Ymxp
YyBFcnJvckluc3RhbmNlIHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVkOgogICAgICAgICBF
cnJvclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgRXJyb3JQcm90b3R5cGUqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8
RXJyb3JQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBFcnJvclByb3RvdHlwZShleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0Miwx
NiBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3Ig
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citwcml2YXRlOgorICAgIEludGVycnVwdGVkRXhl
Y3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICA6IEpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5pbnRlcnJ1cHRlZEV4ZWN1dGlvbkVycm9y
U3RydWN0dXJlLmdldCgpKQorICAgIHsKKyAgICB9CisKIHB1YmxpYzoKLSAgICBJbnRlcnJ1cHRl
ZEV4ZWN1dGlvbkVycm9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKLSAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5pbnRlcnJ1cHRlZEV4ZWN1dGlv
bkVycm9yU3RydWN0dXJlLmdldCgpKQorICAgIHN0YXRpYyBJbnRlcnJ1cHRlZEV4ZWN1dGlvbkVy
cm9yKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I+KGdsb2JhbERh
dGEuaGVhcCkpIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3IoZ2xvYmFsRGF0YSk7CiAgICAgfQog
CiAgICAgdmlydHVhbCBDb21wbFR5cGUgZXhjZXB0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIElu
dGVycnVwdGVkOyB9CkBAIC01NSwxNCArNjEsMjAgQEAgcHVibGljOgogCiBKU09iamVjdCogY3Jl
YXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEludGVycnVwdGVkRXhlY3V0aW9uRXJy
b3IoZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIEludGVycnVwdGVkRXhlY3V0aW9uRXJyb3I6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSk7CiB9CiAKIGNsYXNzIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvciA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3ByaXZhdGU6CisgICAgVGVybWluYXRlZEV4ZWN1
dGlvbkVycm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgOiBKU05vbkZpbmFs
T2JqZWN0KGdsb2JhbERhdGEsIGdsb2JhbERhdGEudGVybWluYXRlZEV4ZWN1dGlvbkVycm9yU3Ry
dWN0dXJlLmdldCgpKQorICAgIHsKKyAgICB9CisKIHB1YmxpYzoKLSAgICBUZXJtaW5hdGVkRXhl
Y3V0aW9uRXJyb3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgICAgICA6IEpTTm9uRmlu
YWxPYmplY3QoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnRlcm1pbmF0ZWRFeGVjdXRpb25FcnJv
clN0cnVjdHVyZS5nZXQoKSkKKyAgICBzdGF0aWMgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKiBj
cmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcj4oZ2xvYmFsRGF0YS5oZWFw
KSkgVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yKGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBUZXJtaW5hdGVk
OyB9CkBAIC03Miw3ICs4NCw3IEBAIHB1YmxpYzoKIAogSlNPYmplY3QqIGNyZWF0ZVRlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIHJl
dHVybiBuZXcgKGdsb2JhbERhdGEpIFRlcm1pbmF0ZWRFeGVjdXRpb25FcnJvcihnbG9iYWxEYXRh
KTsKKyAgICByZXR1cm4gVGVybWluYXRlZEV4ZWN1dGlvbkVycm9yOjpjcmVhdGUoKmdsb2JhbERh
dGEpOwogfQogCiBKU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSog
ZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw4IEBAIFByb2dyYW1FeGVj
dXRhYmxlOjp+UHJvZ3JhbUV4ZWN1dGFibGUoKQogCiBjb25zdCBDbGFzc0luZm8gRnVuY3Rpb25F
eGVjdXRhYmxlOjpzX2luZm8gPSB7ICJGdW5jdGlvbkV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0
YWJsZTo6c19pbmZvLCAwLCAwIH07CiAKLUZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVj
dXRhYmxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGluU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0
TGluZSwgaW50IGxhc3RMaW5lKQotICAgIDogU2NyaXB0RXhlY3V0YWJsZShnbG9iYWxEYXRhLT5m
dW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGdsb2JhbERhdGEsIHNvdXJjZSwgaW5T
dHJpY3RDb250ZXh0KQorRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3Vy
Y2VDb2RlJiBzb3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRl
cnMqIHBhcmFtZXRlcnMsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQg
bGFzdExpbmUpCisgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGdsb2JhbERhdGEuZnVuY3Rpb25FeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCBnbG9iYWxEYXRhLCBzb3VyY2UsIGluU3RyaWN0Q29udGV4
dCkKICAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMoMCkKICAgICAsIG1fZm9yY2VVc2VzQXJn
dW1lbnRzKGZvcmNlVXNlc0FyZ3VtZW50cykKICAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJz
KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRh
YmxlOjoKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5ID0gc3RhdGljX2Nhc3Q8RnVuY0V4cHJO
b2RlKj4oZnVuY0V4cHIpLT5ib2R5KCk7CiAgICAgQVNTRVJUKGJvZHkpOwogCi0gICAgcmV0dXJu
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9u
TmFtZSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVudHMoKSwgYm9keS0+cGFyYW1l
dGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGluZU5vKCksIGJvZHktPmxhc3RM
aW5lKCkpOworICAgIHJldHVybiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIGZ1bmN0aW9uTmFtZSwgYm9keS0+c291cmNlKCksIGJvZHktPnVzZXNBcmd1bWVu
dHMoKSwgYm9keS0+cGFyYW1ldGVycygpLCBib2R5LT5pc1N0cmljdE1vZGUoKSwgYm9keS0+bGlu
ZU5vKCksIGJvZHktPmxhc3RMaW5lKCkpOwogfQogCiBVU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cGFyYW1TdHJpbmcoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDggKzUyLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IE5V
TV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCA9IC0xOwotICAgIAotICAgIHB1YmxpYzoKKworICAg
IHByb3RlY3RlZDoKICAgICAgICAgRXhlY3V0YWJsZUJhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50IG51bVBhcmFtZXRlcnMpCiAgICAgICAgICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAsIG1fbnVtUGFy
YW1ldGVyc0ZvckNhbGwobnVtUGFyYW1ldGVycykKQEAgLTY0LDYgKzY0LDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgZmluYWxpemVyLmxlYWtIYW5kbGUoKTsKICNlbmRpZgogICAg
ICAgICB9CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEV4ZWN1dGFibGVC
YXNlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgaW50IG51bVBhcmFtZXRlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxFeGVjdXRhYmxlQmFzZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRXhlY3V0YWJs
ZUJhc2UoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBudW1QYXJhbWV0ZXJzKTsKKyAgICAgICAgfQog
CiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25zdAogICAgICAgICB7CkBAIC0xNjYs
MTMgKzE3MiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1
dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIWNhbGxUaHVuaykKLSAgICAgICAgICAgICAgICByZXR1cm4g
bmV3ICgmZ2xvYmFsRGF0YSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBKSVRDb2RlKCks
IGZ1bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgKCZnbG9iYWxEYXRhKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGU6Okhv
c3RGdW5jdGlvbihjYWxsVGh1bmspLCBmdW5jdGlvbiwgSklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNv
bnN0cnVjdFRodW5rKSwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
KGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVF
eGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENvZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29u
c3RydWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4
ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwg
SklUQ29kZTo6SG9zdEZ1bmN0aW9uKGNhbGxUaHVuayksIGZ1bmN0aW9uLCBKSVRDb2RlOjpIb3N0
RnVuY3Rpb24oY29uc3RydWN0VGh1bmspLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIH0KICNlbHNl
CiAgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTmF0aXZlRnVuY3Rpb24gY29uc3Ry
dWN0b3IpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBO
YXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4oZ2xvYmFs
RGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBmdW5jdGlvbiwgY29uc3Ry
dWN0b3IpOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMjEzLDEzICsyMTksMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlIDogcHVibGljIEV4ZWN1dGFi
bGVCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KQotICAgICAgICAgICAgOiBFeGVjdXRhYmxl
QmFzZSgqZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQp
CisgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJp
Y3RDb250ZXh0KQorICAgICAgICAgICAgOiBFeGVjdXRhYmxlQmFzZShnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUsIE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRCkKICAgICAgICAgICAgICwgbV9zb3Vy
Y2Uoc291cmNlKQogICAgICAgICAgICAgLCBtX2ZlYXR1cmVzKGlzSW5TdHJpY3RDb250ZXh0ID8g
U3RyaWN0TW9kZUZlYXR1cmUgOiAwKQogICAgICAgICB7CiAjaWYgRU5BQkxFKENPREVCTE9DS19T
QU1QTElORykKLSAgICAgICAgICAgIGlmIChTYW1wbGluZ1Rvb2wqIHNhbXBsZXIgPSBnbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+c2FtcGxlcigpKQorICAgICAgICAgICAgaWYgKFNhbXBsaW5nVG9v
bCogc2FtcGxlciA9IGdsb2JhbERhdGEuaW50ZXJwcmV0ZXItPnNhbXBsZXIoKSkKICAgICAgICAg
ICAgICAgICBzYW1wbGVyLT5ub3RpZnlPZlNjb3BlKCpnbG9iYWxEYXRhLCB0aGlzKTsKICNlbHNl
CiAgICAgICAgICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsRGF0YSk7CkBAIC0yOTAsNyArMjk2LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2V2YWxDb2RlQmxvY2s7
CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29u
dGV4dCkgeyByZXR1cm4gbmV3IChleGVjKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlz
SW5TdHJpY3RDb250ZXh0KTsgfQorICAgICAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9vbCBpc0luU3Ry
aWN0Q29udGV4dCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRl
Q2VsbDxFdmFsRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEV2YWxFeGVjdXRhYmxlKGV4ZWMs
IHNvdXJjZSwgaXNJblN0cmljdENvbnRleHQpOyAKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgSklUQ29kZSYgZ2VuZXJhdGVkSklUQ29kZSgpCkBAIC0zMTksNyArMzI4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUHJvZ3JhbUV4
ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgUHJvZ3JhbUV4ZWN1
dGFibGUoZXhlYywgc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2Vs
bDxQcm9ncmFtRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIFByb2dyYW1FeGVjdXRhYmxlKGV4
ZWMsIHNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICB+UHJvZ3JhbUV4ZWN1dGFibGUoKTsK
QEAgLTM3MiwxNyArMzgxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAg
ICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNl
VXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBib29sIGlzSW5T
dHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1l
LCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRl
eHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkpIEZ1bmN0aW9uRXhlY3V0
YWJsZShleGVjLCBuYW1lLCBzb3VyY2UsIGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywg
aXNJblN0cmljdENvbnRleHQsIGZpcnN0TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
LCBib29sIGlzSW5TdHJpY3RDb250ZXh0LCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCisg
ICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgYm9vbCBmb3JjZVVzZXNBcmd1bWVudHMsIEZ1bmN0aW9uUGFyYW1ldGVycyogcGFyYW1ldGVy
cywgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBGdW5jdGlvbkV4
ZWN1dGFibGUoZ2xvYmFsRGF0YSwgbmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBh
cmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0LCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4ZWN1dGFibGU+KGdsb2Jh
bERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBuYW1lLCBzb3VyY2Us
IGZvcmNlVXNlc0FyZ3VtZW50cywgcGFyYW1ldGVycywgaXNJblN0cmljdENvbnRleHQsIGZpcnN0
TGluZSwgbGFzdExpbmUpOwogICAgICAgICB9CiAKICAgICAgICAgSlNGdW5jdGlvbiogbWFrZShF
eGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIHRoaXMsIHNjb3Bl
Q2hhaW4pOworICAgICAgICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlz
LCBzY29wZUNoYWluKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUmV0dXJucyBl
aXRoZXIgY2FsbCBvciBjb25zdHJ1Y3QgYnl0ZWNvZGUuIFRoaXMgY2FuIGJlIGFwcHJvcHJpYXRl
CkBAIC00NzksNyArNDg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9v
bCwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKEpTR2xvYmFsRGF0YSYsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCwg
aW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKTsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGNvbnN0IFNvdXJjZUNvZGUmLCBi
b29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rpb25QYXJhbWV0ZXJzKiwgYm9vbCwgaW50IGZp
cnN0TGluZSwgaW50IGxhc3RMaW5lKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNh
bGxJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rp
b25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw4ICsxMTIsOCBAQCBKU09i
amVjdCogY29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxFCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCi0gICAgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4gPSBuZXcgKGV4ZWMpIFNjb3BlQ2hhaW5Ob2RlKDAsIGdsb2JhbE9iamVjdCwgJmds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCkpOwotICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZnVuY3Rpb24sIHNjb3BlQ2hhaW4pOwor
ICAgIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluID0gU2NvcGVDaGFpbk5vZGU6OmNyZWF0ZShl
eGVjLCAwLCBnbG9iYWxPYmplY3QsICZnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGV4ZWMtPmds
b2JhbFRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGZ1
bmN0aW9uLCBzY29wZUNoYWluKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1bmN0aW9uIENv
bnN0cnVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5
cGU7CiAKICAgICBjbGFzcyBGdW5jdGlvbkNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBGdW5jdGlvbkNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgRnVuY3Rpb25Q
cm90b3R5cGUqKTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBGdW5jdGlvbkNv
bnN0cnVjdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90
b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxG
dW5jdGlvbkNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgRnVuY3Rpb25Db25zdHJ1Y3Rvcihl
eGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgZnVuY1Byb3RvdHlwZSk7CisgICAgICAgIH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTAgQEAgRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEV4ZQogCiB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblByb3Bl
cnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIGZ1bmN0aW9uU3RydWN0dXJlLCBKU0Z1bmN0aW9uKiogY2FsbEZ1bmN0aW9uLCBKU0Z1
bmN0aW9uKiogYXBwbHlGdW5jdGlvbikKIHsKLSAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1
bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgKmFwcGx5RnVuY3Rpb24g
PSBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVj
dHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIEpTRnVu
Y3Rpb246OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uU3RydWN0dXJlLCAwLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcp
LCBEb250RW51bSk7CisgICAgKmFwcGx5RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KTsKICAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsICphcHBseUZ1bmN0aW9uLCBEb250RW51bSk7Ci0gICAg
KmNhbGxGdW5jdGlvbiA9IG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBnbG9iYWxPYmplY3Qs
IGZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbCwgZnVuY3Rp
b25Qcm90b0Z1bmNDYWxsKTsKKyAgICAqY2FsbEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5jYWxsLCBmdW5jdGlvblByb3RvRnVuY0NhbGwpOwogICAgIHB1dERpcmVjdEZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgKmNhbGxGdW5jdGlvbiwgRG9udEVudW0pOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDE3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBG
dW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OwotICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSogZnVuY3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxs
RnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBhcHBseUZ1bmN0aW9uKTsKIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIEZ1bmN0aW9uUHJvdG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEZ1bmN0aW9uUHJvdG90
eXBlPigqZXhlYy0+aGVhcCgpKSkgRnVuY3Rpb25Qcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEZ1bmN0
aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSogZnVu
Y3Rpb25TdHJ1Y3R1cmUsIEpTRnVuY3Rpb24qKiBjYWxsRnVuY3Rpb24sIEpTRnVuY3Rpb24qKiBh
cHBseUZ1bmN0aW9uKTsKKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG8pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBw
cm90bywgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90
Q291bnQsICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBmb3IgYSBwcm9wZXJ0eS4KICAgICBjbGFzcyBHZXR0
ZXJTZXR0ZXIgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAg
ICBwdWJsaWM6CisKKyAgICBwcml2YXRlOiAgICAgICAgCiAgICAgICAgIEdldHRlclNldHRlcihF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IEpTQ2VsbChleGVjLT5nbG9iYWxEYXRhKCks
IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgR2V0dGVyU2V0dGVy
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IChhbGxvY2F0ZUNlbGw8R2V0dGVyU2V0dGVyPigqZXhlYy0+aGVhcCgpKSkgR2V0dGVyU2V0
dGVyKGV4ZWMpOworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU09iamVjdCogZ2V0dGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9nZXR0ZXIuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8SlNBUElWYWx1ZVdyYXBwZXI+KCpleGVjLT5oZWFwKCkpKSBKU0FQSVZhbHVlV3JhcHBl
cihleGVjLCB2YWx1ZSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpTQVBJ
VmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKQEAgLTU2LDcgKzYx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3Jh
cHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IChleGVjKSBKU0FQSVZhbHVlV3JhcHBlcihleGVjLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlKGV4ZWMsIHZhbHVlKTsKICAgICB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsy
MjAsNyBAQCBKU1ZhbHVlIEpTQWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4CiAgICAgICAg
IHJldHVybiBhcmd1bWVudHM7CiAgICAgaW50IHJlYWxBcmd1bWVudHNSZWdpc3RlciA9IHVubW9k
aWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlcik7CiAKLSAgICBKU1ZhbHVl
IGFyZ3VtZW50cyA9IEpTVmFsdWUobmV3IChjYWxsRnJhbWUpIEFyZ3VtZW50cyhjYWxsRnJhbWUp
KTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50cyA9IEpTVmFsdWUoQXJndW1lbnRzOjpjcmVhdGUoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZSkpOwogICAgIGNhbGxGcmFtZS0+dW5jaGVj
a2VkUihhcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgY2FsbEZyYW1lLT51bmNo
ZWNrZWRSKHJlYWxBcmd1bWVudHNSZWdpc3RlcikgPSBhcmd1bWVudHM7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24g
OTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDAsOSArNDAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgUmVnaXN0ZXI7CiAgICAgCiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDogcHVibGljIEpTVmFy
aWFibGVPYmplY3QgeworICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9i
amVjdCBCYXNlOwotICAgIHB1YmxpYzoKICAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxGcmFtZSos
IEZ1bmN0aW9uRXhlY3V0YWJsZSopOworICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IEpTQWN0aXZhdGlvbiogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KGdsb2JhbERh
dGEuaGVhcCkpIEpTQWN0aXZhdGlvbihjYWxsRnJhbWUsIGZ1bmNFeGVjKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHZpcnR1YWwgfkpTQWN0aXZhdGlvbigpOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTQgKzYwLDMwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBXYWxrZXI7CiAKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEpTQXJyYXkoVlB0clN0ZWFsaW5nSGFja1R5cGUpOwotCisgICAgcHJvdGVjdGVkOgogICAg
ICAgICBleHBsaWNpdCBKU0FycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSopOwogICAgICAg
ICBKU0FycmF5KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgsIEFycmF5Q3JlYXRpb25Nb2RlKTsKICAgICAgICAgSlNBcnJheShKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqLCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKTsKKyAgICAgICAgCisgICAg
cHVibGljOgorICAgICAgICBKU0FycmF5KFZQdHJTdGVhbGluZ0hhY2tUeXBlKTsKICAgICAgICAg
dmlydHVhbCB+SlNBcnJheSgpOwogCisgICAgICAgIHN0YXRpYyBKU0FycmF5KiBjcmVhdGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTQXJyYXk+KGdsb2JhbERhdGEu
aGVhcCkpIEpTQXJyYXkoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIEpTQXJyYXkqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoLCBBcnJheUNy
ZWF0aW9uTW9kZSBjcmVhdGVNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChhbGxvY2F0ZUNlbGw8SlNBcnJheT4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNBcnJheShnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgsIGNyZWF0ZU1vZGUpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgSlNBcnJheSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIGluaXRpYWxWYWx1
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU0Fy
cmF5PihnbG9iYWxEYXRhLmhlYXApKSBKU0FycmF5KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgaW5p
dGlhbFZhbHVlcyk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNiAr
MzgxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjZWxsLT5+SlNDZWxsKCk7CiAgICAg
fQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiBo
ZWFwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhlYXAuYWxsb2NhdGUoc2l6ZW9mKFQpKTsKKyAg
ICB9CisgICAgICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NlbGxfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNp
b24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB0eXBlZGVmIEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdCBCYXNlOwogCi0gICAgcHVibGlj
OgogICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYsIE5hdGl2ZUZ1bmN0aW9uKTsKICAg
ICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSos
IGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVFeGVjdXRhYmxlKik7CiAgICAg
ICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgU2NvcGVDaGFp
bk5vZGUqKTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgSlNGdW5jdGlv
biogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rp
b24oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxlbmd0aCwgaWRlbnQsIG5hdGl2ZUZ1
bmMpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIE5hdGl2ZUV4ZWN1dGFi
bGUqIG5hdGl2ZUV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9j
YXRlQ2VsbDxKU0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSwgbGVuZ3RoLCBpZGVudCwgbmF0aXZlRXhlYyk7CisgICAgICAg
IH0KKyAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNGdW5jdGlv
bj4oKmV4ZWMtPmhlYXAoKSkpIEpTRnVuY3Rpb24oZXhlYywgZnVuY0V4ZWMsIHNjb3BlQ2hhaW4p
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2aXJ0dWFsIH5KU0Z1bmN0aW9uKCk7CiAK
ICAgICAgICAgY29uc3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6aW5pdChKU09iamVjdCogdGhpcwogICAgIHN0cnVjdHVyZSgpLT5kaXNhYmxlU3BlY2lmaWNG
dW5jdGlvblRyYWNraW5nKCk7CiAKICAgICBtX2dsb2JhbERhdGEgPSBIZWFwOjpoZWFwKHRoaXMp
LT5nbG9iYWxEYXRhKCk7Ci0gICAgbV9nbG9iYWxTY29wZUNoYWluLnNldCgqbV9nbG9iYWxEYXRh
LCB0aGlzLCBuZXcgKG1fZ2xvYmFsRGF0YS5nZXQoKSkgU2NvcGVDaGFpbk5vZGUoMCwgdGhpcywg
bV9nbG9iYWxEYXRhLmdldCgpLCB0aGlzLCB0aGlzVmFsdWUpKTsKKyAgICBtX2dsb2JhbFNjb3Bl
Q2hhaW4uc2V0KCptX2dsb2JhbERhdGEsIHRoaXMsIFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUoMCwg
dGhpcywgbV9nbG9iYWxEYXRhLmdldCgpLCB0aGlzLCB0aGlzVmFsdWUpKTsKIAogICAgIEpTR2xv
YmFsT2JqZWN0OjpnbG9iYWxFeGVjKCktPmluaXQoMCwgMCwgbV9nbG9iYWxTY29wZUNoYWluLmdl
dCgpLCBDYWxsRnJhbWU6Om5vQ2FsbGVyKCksIDAsIDApOwogCkBAIC0xODcsNyArMTg3LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogewogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CiAKLSAgICBtX2Z1bmN0aW9u
UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgRnVuY3Rp
b25Qcm90b3R5cGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUg
d2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KKyAgICBtX2Z1bmN0
aW9uUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEZ1bmN0aW9uUHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUg
d2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBtX2Z1bmN0
aW9uU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIEpTRnVuY3Rpb246OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpKTsKICAgICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24qIGNh
bGxGdW5jdGlvbiA9IDA7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPmFkZEZ1bmN0aW9u
UHJvcGVydGllcyhleGVjLCB0aGlzLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAmY2FsbEZ1
bmN0aW9uLCAmYXBwbHlGdW5jdGlvbik7CiAgICAgbV9jYWxsRnVuY3Rpb24uc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgY2FsbEZ1bmN0aW9uKTsKICAgICBtX2FwcGx5RnVuY3Rpb24uc2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYXBwbHlGdW5jdGlvbik7Ci0gICAgbV9vYmplY3RQ
cm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBPYmplY3RQ
cm90b3R5cGUoZXhlYywgdGhpcywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSkpKTsKKyAgICBtX29iamVjdFByb3RvdHlwZS5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCks
IGpzTnVsbCgpKSkpOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQ
cm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKTsKIAogICAgIG1fZW1wdHlPYmplY3RTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUtPmluaGVyaXRvcklEKGV4ZWMtPmds
b2JhbERhdGEoKSkpOwpAQCAtMjA2LDU0ICsyMDYsNTQgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fY2FsbGJhY2tDb25zdHJ1Y3RvclN0cnVjdHVyZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7
CiAgICAgbV9jYWxsYmFja09iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBKU0NhbGxiYWNrT2JqZWN0PEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdD46OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CiAK
LSAgICBtX2FycmF5UHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAo
ZXhlYykgQXJyYXlQcm90b3R5cGUodGhpcywgQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1f
YXJyYXlQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9hcnJh
eVN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBKU0FycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAg
ICAgbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwg
dGhpcywgUmVnRXhwTWF0Y2hlc0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKSk7CiAKLSAgICBtX3N0cmluZ1Byb3RvdHlwZS5z
ZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFN0cmluZ1Byb3RvdHlwZShl
eGVjLCB0aGlzLCBTdHJpbmdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fc3RyaW5nUHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgU3RyaW5nT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX3N0cmluZ1Byb3RvdHlwZS5nZXQoKSkpOwog
Ci0gICAgbV9ib29sZWFuUHJvdG90eXBlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5l
dyAoZXhlYykgQm9vbGVhblByb3RvdHlwZShleGVjLCB0aGlzLCBCb29sZWFuUHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKKyAgICBtX2Jvb2xlYW5Qcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgQm9vbGVhblByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Qcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOwogICAgIG1fYm9vbGVhbk9iamVjdFN0cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBCb29sZWFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBtX2Jvb2xlYW5Qcm90b3R5cGUuZ2V0KCkpKTsKIAotICAgIG1fbnVtYmVyUHJvdG90eXBl
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykgTnVtYmVyUHJvdG90eXBl
KGV4ZWMsIHRoaXMsIE51bWJlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV9udW1iZXJQcm90b3R5
cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKICAgICBtX251bWJlck9iamVjdFN0
cnVjdHVyZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOdW1iZXJPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fbnVtYmVyUHJvdG90eXBlLmdldCgpKSk7
CiAKLSAgICBtX2RhdGVQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3
IChleGVjKSBEYXRlUHJvdG90eXBlKGV4ZWMsIHRoaXMsIERhdGVQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fZGF0ZVByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBEYXRlUHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgRGF0ZVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CiAgICAgbV9k
YXRlU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIERhdGVJbnN0YW5jZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9kYXRlUHJvdG90eXBlLmdldCgp
KSk7CiAKLSAgICBSZWdFeHAqIGVtcHR5UmVnZXggPSBSZWdFeHA6OmNyZWF0ZSgmZXhlYy0+Z2xv
YmFsRGF0YSgpLCAiIiwgTm9GbGFncyk7CisgICAgUmVnRXhwKiBlbXB0eVJlZ2V4ID0gUmVnRXhw
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIiwgTm9GbGFncyk7CiAgICAgCi0gICAgbV9y
ZWdFeHBQcm90b3R5cGUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgbmV3IChleGVjKSBS
ZWdFeHBQcm90b3R5cGUoZXhlYywgdGhpcywgUmVnRXhwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSksIGVtcHR5UmVn
ZXgpKTsKKyAgICBtX3JlZ0V4cFByb3RvdHlwZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlz
LCBSZWdFeHBQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBSZWdFeHBQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSwgZW1wdHlSZWdleCkpOwogICAgIG1fcmVnRXhwU3RydWN0dXJlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIFJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwgbV9yZWdFeHBQcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbWV0aG9kQ2FsbER1bW15
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMp
KTsKIAotICAgIEVycm9yUHJvdG90eXBlKiBlcnJvclByb3RvdHlwZSA9IG5ldyAoZXhlYykgRXJy
b3JQcm90b3R5cGUoZXhlYywgdGhpcywgRXJyb3JQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT5nbG9iYWxEYXRhKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSk7CisgICAgRXJyb3JQ
cm90b3R5cGUqIGVycm9yUHJvdG90eXBlID0gRXJyb3JQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBFcnJvclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2Vycm9yU3RydWN0dXJlLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT5nbG9iYWxEYXRhKCksIGVycm9yUHJvdG90eXBlKSk7CiAKICAgICAvLyBDb25zdHJ1Y3RvcnMK
IAotICAgIEpTQ2VsbCogb2JqZWN0Q29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE9iamVjdENvbnN0
cnVjdG9yKGV4ZWMsIHRoaXMsIE9iamVjdENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpOwotICAgIEpTQ2VsbCogZnVuY3Rpb25Db25zdHJ1Y3RvciA9IG5ldyAoZXhl
YykgRnVuY3Rpb25Db25zdHJ1Y3RvcihleGVjLCB0aGlzLCBGdW5jdGlvbkNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBhcnJheUNvbnN0
cnVjdG9yID0gbmV3IChleGVjKSBBcnJheUNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgpKTsKLSAgICBKU0NlbGwqIHN0
cmluZ0NvbnN0cnVjdG9yID0gbmV3IChleGVjKSBTdHJpbmdDb25zdHJ1Y3RvcihleGVjLCB0aGlz
LCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90eXBlLmdldCgpKTsKLSAg
ICBKU0NlbGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgQm9vbGVhbkNvbnN0cnVj
dG9yKGV4ZWMsIHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYm9vbGVhblByb3Rv
dHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykg
TnVtYmVyQ29uc3RydWN0b3IoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X251bWJlclByb3RvdHlwZS5nZXQoKSk7Ci0gICAgSlNDZWxsKiBkYXRlQ29uc3RydWN0b3IgPSBu
ZXcgKGV4ZWMpIERhdGVDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogb2JqZWN0Q29uc3RydWN0
b3IgPSBPYmplY3RDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE9iamVjdENvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIEpTQ2VsbCogZnVuY3Rp
b25Db25zdHJ1Y3RvciA9IEZ1bmN0aW9uQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBG
dW5jdGlvbkNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSk7Cisg
ICAgSlNDZWxsKiBhcnJheUNvbnN0cnVjdG9yID0gQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxE
YXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5UHJvdG90eXBlLmdldCgp
KTsKKyAgICBKU0NlbGwqIHN0cmluZ0NvbnN0cnVjdG9yID0gU3RyaW5nQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBTdHJpbmdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fc3RyaW5nUHJvdG90
eXBlLmdldCgpKTsKKyAgICBKU0NlbGwqIGJvb2xlYW5Db25zdHJ1Y3RvciA9IEJvb2xlYW5Db25z
dHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1f
Ym9vbGVhblByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBudW1iZXJDb25zdHJ1Y3RvciA9
IE51bWJlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgTnVtYmVyQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX251bWJlclByb3RvdHlwZS5nZXQoKSk7CisgICAgSlNDZWxsKiBkYXRlQ29uc3Ry
dWN0b3IgPSBEYXRlQ29uc3RydWN0b3I6OmNyZWF0ZShleGVjLCB0aGlzLCBEYXRlQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpLCBtX2RhdGVQcm90b3R5cGUuZ2V0KCkpOwogCi0gICAgbV9yZWdFeHBDb25zdHJ1
Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIFJlZ0V4cENvbnN0
cnVjdG9yKGV4ZWMsIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9yZWdFeHBQcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3JlZ0V4cENvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIFJlZ0V4cENvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYywgdGhpcywgUmVnRXhw
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3JlZ0V4cFByb3RvdHlwZS5nZXQoKSkpOwogCi0gICAgbV9l
cnJvckNvbnN0cnVjdG9yLnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIG5ldyAoZXhlYykg
RXJyb3JDb25zdHJ1Y3RvcihleGVjLCB0aGlzLCBFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgZXJy
b3JQcm90b3R5cGUpKTsKKyAgICBtX2Vycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEVycm9yQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBlcnJvclByb3RvdHlwZSkpOwogCiAgICAgU3RydWN0dXJlKiBuYXRp
dmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSA9IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBlcnJvclByb3RvdHlwZSk7CiAgICAgU3RydWN0
dXJlKiBuYXRpdmVFcnJvclN0cnVjdHVyZSA9IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT5nbG9iYWxEYXRhKCksIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
OwotICAgIG1fZXZhbEVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhp
cywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMsIG5hdGl2ZUVy
cm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIkV2YWxFcnJvciIp
KTsKLSAgICBtX3JhbmdlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0
aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhlYywgdGhpcywgbmF0aXZl
RXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0dXJlLCAiUmFuZ2VFcnJv
ciIpKTsKLSAgICBtX3JlZmVyZW5jZUVycm9yQ29uc3RydWN0b3Iuc2V0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgdGhpcywgbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIHRoaXMs
IG5hdGl2ZUVycm9yU3RydWN0dXJlLCBuYXRpdmVFcnJvclByb3RvdHlwZVN0cnVjdHVyZSwgIlJl
ZmVyZW5jZUVycm9yIikpOwotICAgIG1fc3ludGF4RXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhl
YywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0
dXJlLCAiU3ludGF4RXJyb3IiKSk7Ci0gICAgbV90eXBlRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Io
ZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3Ry
dWN0dXJlLCAiVHlwZUVycm9yIikpOwotICAgIG1fVVJJRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Io
ZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3Ry
dWN0dXJlLCAiVVJJRXJyb3IiKSk7CisgICAgbV9ldmFsRXJyb3JDb25zdHJ1Y3Rvci5zZXQoZXhl
Yy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
YywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3RydWN0
dXJlLCAiRXZhbEVycm9yIikpOworICAgIG1fcmFuZ2VFcnJvckNvbnN0cnVjdG9yLnNldChleGVj
LT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVTdHJ1Y3R1
cmUsICJSYW5nZUVycm9yIikpOworICAgIG1fcmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvci5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpjcmVhdGUo
ZXhlYywgdGhpcywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIG5hdGl2ZUVycm9yUHJvdG90eXBlU3Ry
dWN0dXJlLCAiUmVmZXJlbmNlRXJyb3IiKSk7CisgICAgbV9zeW50YXhFcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5
cGVTdHJ1Y3R1cmUsICJTeW50YXhFcnJvciIpKTsKKyAgICBtX3R5cGVFcnJvckNvbnN0cnVjdG9y
LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNy
ZWF0ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5
cGVTdHJ1Y3R1cmUsICJUeXBlRXJyb3IiKSk7CisgICAgbV9VUklFcnJvckNvbnN0cnVjdG9yLnNl
dChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLCB0aGlzLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgbmF0aXZlRXJyb3JQcm90b3R5cGVT
dHJ1Y3R1cmUsICJVUklFcnJvciIpKTsKIAogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJl
Y3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOwog
ICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKQEAgLTI4MSwxNSArMjgxLDE1IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwdXREaXJlY3RGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVj
LCAiVHlwZUVycm9yIiksIG1fdHlwZUVycm9yQ29uc3RydWN0b3IuZ2V0KCksIERvbnRFbnVtKTsK
ICAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgSWRlbnRpZmllcihleGVjLCAiVVJJRXJyb3IiKSwgbV9VUklFcnJvckNvbnN0cnVjdG9yLmdl
dCgpLCBEb250RW51bSk7CiAKLSAgICBtX2V2YWxGdW5jdGlvbi5zZXQoZXhlYy0+Z2xvYmFsRGF0
YSgpLCB0aGlzLCBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgdGhpcywgbV9mdW5jdGlvblN0
cnVjdHVyZS5nZXQoKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2YWwsIGdsb2JhbEZ1bmNF
dmFsKSk7CisgICAgbV9ldmFsRnVuY3Rpb24uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCks
IDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ldmFsLCBnbG9iYWxGdW5jRXZhbCkpOwogICAgIHB1
dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbV9ldmFsRnVuY3Rpb24uZ2V0
KCksIERvbnRFbnVtKTsKIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10g
PSB7Ci0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJNYXRoIiks
IG5ldyAoZXhlYykgTWF0aE9iamVjdChleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250
RW51bSB8IERvbnREZWxldGUpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmll
cihleGVjLCAiTWF0aCIpLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKElkZW50aWZpZXIoZXhlYywgIk5hTiIpLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4
ZWMsICJJbmZpbml0eSIpLCBqc051bWJlcihzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJ1bmRlZmluZWQiKSwganNVbmRlZmlu
ZWQoKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSlNPTiIpLCBuZXcgKGV4ZWMpIEpTT05PYmpl
Y3QodGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERhdGEoKSwg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKQorICAgICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihleGVjLCAiSlNPTiIpLCBKU09OT2JqZWN0
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlKQogICAgIH07CiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxzLCBXVEZfQVJS
QVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKIApAQCAtMzk1LDExICszOTUsNiBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNpemVSZWdpc3RlcnMoc2l6CiAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lz
dGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCksIG5ld1NpemUpOwogfQogCi12b2lkKiBKU0ds
b2JhbE9iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCi17Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmhlYXAuYWxsb2NhdGUoc2l6ZSk7Ci19
Ci0KIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2xvYmFsUHJvcGVydHlJ
bmZvKiBnbG9iYWxzLCBpbnQgY291bnQpCiB7CiAgICAgcmVzaXplUmVnaXN0ZXJzKHN5bWJvbFRh
YmxlKCkuc2l6ZSgpICsgY291bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw4ICsxMjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2V2YWxFbmFibGVk
OwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBKU0ds
b2JhbERhdGEqKTsKLQogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICAgICAgOiBKU1Zh
cmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUsIDApCiAg
ICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKQEAgLTI4Nyw4ICsyODUsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCByZXNldChKU1ZhbHVlIHByb3RvdHlwZSk7CiAK
ICAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3Rl
cnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5
LCBzaXplX3QgY291bnQpOwotCi0gICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpOyAv
LyBjYW4gb25seSBiZSBhbGxvY2F0ZWQgd2l0aCBKU0dsb2JhbERhdGEKICAgICB9OwogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTVmFsdWUpOwpAQCAtMzc4LDcgKzM3NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5
QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybiBKU0FycmF5
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
KCkpOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJh
eShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0zODgsNyArMzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0FycmF5KGV4ZWMtPmdsb2JhbERhdGEo
KSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZSgpLCBpbml0aWFsTGVuZ3RoLCBDcmVhdGVJ
bml0aWFsaXplZCk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIGluaXRpYWxMZW5ndGgsIENy
ZWF0ZUluaXRpYWxpemVkKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0
RW1wdHlBcnJheShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCkBAIC00
MDAsNyArMzk2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciB2YWx1ZXM7CiAgICAgICAgIHZhbHVlcy5hcHBlbmQoc2luZ2xlSXRlbVZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNBcnJheShleGVjLT5nbG9iYWxEYXRhKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmUoKSwgdmFsdWVzKTsKKyAgICAgICAgcmV0dXJu
IEpTQXJyYXk6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmUoKSwgdmFsdWVzKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNBcnJheSogY29uc3Ry
dWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNpbmdsZUl0ZW1WYWx1ZSkKQEAgLTQx
MCw3ICs0MDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0FycmF5KiBjb25z
dHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IEFyZ0xpc3QmIHZhbHVlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMp
IEpTQXJyYXkoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
KCksIHZhbHVlcyk7CisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlKCksIHZhbHVlcyk7CiAgICAgfQog
CiAgICAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgdmFsdWVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNOb3RBbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTm90QW5PYmplY3QuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICsz
NywxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAvLyBpbiBjZXJ0YWluIFNxdWlycmVsRmlzaCBi
eXRlY29kZXMgLS0gZWZmZWN0aXZlbHkgaXQganVzdCBzaWxlbnRseSBjb25zdW1lcwogICAgIC8v
IGFueSBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiB0aGUgcmVzdWx0IG9mIGEgZmFpbGVkIHRvT2Jq
ZWN0IGNhbGwuCiAgICAgY2xhc3MgSlNOb3RBbk9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb3RBbk9iamVjdChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkubm90QW5PYmplY3RTdHJ1Y3R1cmUuZ2V0KCkp
CiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBKU05vdEFuT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNOb3RBbk9iamVjdD4oKmV4ZWMt
PmhlYXAoKSkpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPTk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMz
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cmluZ2lmaWVyOwogCiAgICAgY2xh
c3MgSlNPTk9iamVjdCA6IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgewotICAgIHB1
YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBKU09OT2JqZWN0KEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBKU09OT2JqZWN0KiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPEpTT05PYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU09OT2JqZWN0KGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50LCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjQsNyArMzI0LDcgQEAgdm9pZCBKU09iamVjdDo6ZGVmaW5lR2V0dGVyKEV4ZWNTdGF0ZSog
ZQogCiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVy
ID0gbmV3IChleGVjKSBHZXR0ZXJTZXR0ZXIoZXhlYyk7CisgICAgR2V0dGVyU2V0dGVyKiBnZXR0
ZXJTZXR0ZXIgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZShleGVjKTsKICAgICBwdXREaXJlY3RJbnRl
cm5hbChnbG9iYWxEYXRhLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cmlidXRlcyB8
IEdldHRlciwgdHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFuZ2Ugb3Vy
IFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpAQCAtMzQ5LDcgKzM0OSw3
IEBAIHZvaWQgSlNPYmplY3Q6OmRlZmluZVNldHRlcihFeGVjU3RhdGUqIGUKICAgICB9CiAKICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9
IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4ZWMpOworICAgIEdldHRlclNldHRlciogZ2V0dGVy
U2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CiAgICAgcHV0RGlyZWN0SW50ZXJu
YWwoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIGdldHRlclNldHRlciwgYXR0cmli
dXRlcyB8IFNldHRlciwgdHJ1ZSwgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFu
Z2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgpAQCAtNjM1LDcg
KzYzNSw3IEBAIHN0YXRpYyBib29sIHB1dERlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKIHsKICAg
ICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkgfHwgZGVzY3JpcHRvci5pc0Rh
dGFEZXNjcmlwdG9yKCkpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3Jp
cHRvcigpICYmIG9sZERlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewotICAgICAg
ICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IG5ldyAoZXhlYykgR2V0dGVyU2V0dGVyKGV4
ZWMpOworICAgICAgICAgICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6
Y3JlYXRlKGV4ZWMpOwogICAgICAgICAgICAgaWYgKG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpIHsK
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IEdldHRlcjsKICAgICAgICAgICAgICAgICBh
Y2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgYXNPYmplY3Qob2xkRGVzY3Jp
cHRvci5nZXR0ZXIoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCBDT01QSUxFX0FT
U0VSVCgoSlNGaW5hbE9iamVjdF9pbmxpbmVTdG9yCiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgSlNGaW5hbE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRmluYWxP
YmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTRmluYWxPYmplY3Q+KCpleGVjLT5oZWFwKCkpKSBKU0ZpbmFs
T2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAogICAgICAgICAhby0+c3RydWN0dXJlKCktPmhh
c0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiAhby0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkgJiYKICAgICAgICAgIW8tPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKICAgICAgICAgbnVtQ2FjaGVhYmxlU2xvdHMgPSBv
LT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotCi0gICAgSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcioganNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IG5ldyAoZXhlYykgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSwgbnVtQ2FjaGVhYmxlU2xv
dHMpOworICAgIAorICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGpzUHJvcGVydHlOYW1lSXRl
cmF0b3IgPSBuZXcgKGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPigqZXhlYy0+
aGVhcCgpKSkgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcihleGVjLCBwcm9wZXJ0eU5hbWVzLmRhdGEo
KSwgbnVtQ2FjaGVhYmxlU2xvdHMpOwogCiAgICAgaWYgKG8tPnN0cnVjdHVyZSgpLT5pc0RpY3Rp
b25hcnkoKSkKICAgICAgICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lSXRlcmF0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKyAgICAg
ICAgc3RhdGljIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5RGF0YSogcHJvcGVydHlOYW1lQXJyYXlEYXRhLCBzaXplX3QgbnVt
Q2FjaGVhYmxlU2xvdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2Nh
dGVDZWxsPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+KCpleGVjLT5oZWFwKCkpKSBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yKGV4ZWMsIHByb3BlcnR5TmFtZUFycmF5RGF0YSwgbnVtQ2FjaGVhYmxlU2xv
dCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
Y3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAgQEAgSlNTdHJpbmcq
IEpTU3RyaW5nOjpzdWJzdHJpbmdGcm9tUm9wZShFeAogICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7
CiAgICAgfQogICAgIGlmIChzdWJzdHJpbmdGaWJlckNvdW50ID09IDEpCi0gICAgICAgIHJldHVy
biBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1sw
XSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBzdWJzdHJp
bmdGaWJlcnNbMF0pOwogICAgIGlmIChzdWJzdHJpbmdGaWJlckNvdW50ID09IDIpCi0gICAgICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHN1YnN0cmluZ0Zp
YmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdKTsKLSAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRh
KSBKU1N0cmluZyhnbG9iYWxEYXRhLCBzdWJzdHJpbmdGaWJlcnNbMF0sIHN1YnN0cmluZ0ZpYmVy
c1sxXSwgc3Vic3RyaW5nRmliZXJzWzJdKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVh
dGUoKmdsb2JhbERhdGEsIHN1YnN0cmluZ0ZpYmVyc1swXSwgc3Vic3RyaW5nRmliZXJzWzFdKTsK
KyAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgc3Vic3RyaW5nRmliZXJz
WzBdLCBzdWJzdHJpbmdGaWJlcnNbMV0sIHN1YnN0cmluZ0ZpYmVyc1syXSk7CiB9CiAKIEpTVmFs
dWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1N0YXRlKiBleGVjLCBVQ2hhciBjaGFy
YWN0ZXIsIGNvbnN0IFVTdHJpbmcmIHJlcGxhY2VtZW50KQpAQCAtMjU0LDcgKzI1NCw3IEBAIEpT
VmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1MKICAgICB9CiAKICAgICBKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgIHJldHVybiBK
U1ZhbHVlKG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgYnVpbGRlci5yZWxl
YXNlKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRh
LCBidWlsZGVyLnJlbGVhc2UoKSkpOwogfQogCiBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4
U2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQpAQCAtMjk4LDcgKzI5OCw3IEBA
IFVTdHJpbmcgSlNTdHJpbmc6OnRvU3RyaW5nKEV4ZWNTdGF0ZSogZXgKIAogaW5saW5lIFN0cmlu
Z09iamVjdCogU3RyaW5nT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIHJldHVybiBuZXcg
KGV4ZWMpIFN0cmluZ09iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3Ry
aW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7CisgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPFN0cmluZ09iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdChleGVjLT5nbG9i
YWxEYXRhKCksIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCksIHN0cmluZyk7
CiB9CiAKIEpTT2JqZWN0KiBKU1N0cmluZzo6dG9PYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw5ICsxODAs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgICAgICAgICBWZWN0b3I8V29ya0l0ZW0s
IDE2PiBtX3dvcmtRdWV1ZTsKICAgICAgICAgfTsKLQotICAgICAgICBBTFdBWVNfSU5MSU5FIEpT
U3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUpCi0g
ICAgICAgICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBBTFdBWVNfSU5MSU5F
IEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUp
CisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkKICAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUubGVuZ3RoKCkpCiAgICAg
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgwKQpA
QCAtMTkyLDI0ICsxOTMsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAg
ICBlbnVtIEhhc090aGVyT3duZXJUeXBlIHsgSGFzT3RoZXJPd25lciB9OwotICAgICAgICBKU1N0
cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHZhbHVlLCBIYXNP
dGhlck93bmVyVHlwZSkKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQor
ICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLmxlbmd0aCgpKQogICAgICAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICAgICAgLCBtX2ZpYmVyQ291bnQoMCkKICAg
ICAgICAgewogICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAg
fQotICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQotICAgICAgICAgICAgOiBKU0Nl
bGwoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAg
ICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHZhbHVlLCBIYXNPdGhlck93bmVyVHlwZSkKKyAgICAgICAgICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBt
X2xlbmd0aCh2YWx1ZS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAg
ICAgICAgICAgICAsIG1fZmliZXJDb3VudCgwKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAgICAgICB9Ci0gICAgICAgIEpTU3RyaW5nKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxSb3BlSW1wbD4gcm9wZSkKLSAgICAgICAg
ICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUGFzc1JlZlB0
cjxSb3BlSW1wbD4gcm9wZSkKKyAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2Jh
bERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAgICAgLCBtX2xlbmd0aChyb3Bl
LT5sZW5ndGgoKSkKICAgICAgICAgICAgICwgbV9maWJlckNvdW50KDEpCiAgICAgICAgIHsKQEAg
LTIxNyw4ICsyMTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAvLyBU
aGlzIGNvbnN0cnVjdG9yIGNvbnN0cnVjdHMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcg
czEgJiBzMi4KICAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBmaWJl
ckNvdW50IDw9IDMuCi0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
dW5zaWduZWQgZmliZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBKU1N0cmluZyogczIpCi0gICAgICAg
ICAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdl
dCgpKQorICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGZpYmVyQ291bnQsIEpTU3RyaW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAg
ICAgICAgICAsIG1fbGVuZ3RoKHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgICwgbV9maWJlckNvdW50KGZpYmVyQ291bnQpCiAgICAgICAgIHsKQEAgLTIzMCw4ICsyMzEs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAvLyBUaGlzIGNvbnN0cnVj
dG9yIGNvbnN0cnVjdHMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgczEgJiBzMi4KICAg
ICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBmaWJlckNvdW50IDw9IDMu
Ci0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmli
ZXJDb3VudCwgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKLSAgICAgICAgICAgIDog
SlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJD
b3VudCwgSlNTdHJpbmcqIHMxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAgICAgIDogSlND
ZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAg
ICAgICAgLCBtX2xlbmd0aChzMS0+bGVuZ3RoKCkgKyB1Mi5sZW5ndGgoKSkKICAgICAgICAgICAg
ICwgbV9maWJlckNvdW50KGZpYmVyQ291bnQpCiAgICAgICAgIHsKQEAgLTI0Myw4ICsyNDQsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAvLyBUaGlzIGNvbnN0cnVjdG9y
IGNvbnN0cnVjdHMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgczEgJiBzMi4KICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCBmaWJlckNvdW50IDw9IDMuCi0g
ICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJD
b3VudCwgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKLSAgICAgICAgICAgIDogSlND
ZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAg
ICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgZmliZXJDb3Vu
dCwgY29uc3QgVVN0cmluZyYgdTEsIEpTU3RyaW5nKiBzMikKKyAgICAgICAgICAgIDogSlNDZWxs
KGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdldCgpKQogICAgICAgICAg
ICAgLCBtX2xlbmd0aCh1MS5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKSkKICAgICAgICAgICAgICwg
bV9maWJlckNvdW50KGZpYmVyQ291bnQpCiAgICAgICAgIHsKQEAgLTI3MSw4ICsyNzIsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
Y29uc3RydWN0cyBhIG5ldyBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB1MSAmIHUyLgotICAgICAg
ICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHUxLCBj
b25zdCBVU3RyaW5nJiB1MikKLSAgICAgICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQor
ICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgICAgICAgICAsIG1fbGVuZ3RoKHUxLmxlbmd0aCgpICsgdTIubGVuZ3Ro
KCkpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudCgyKQogICAgICAgICB7CkBAIC0yODMsOCAr
Mjg0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGNv
bnN0cnVjdG9yIGNvbnN0cnVjdHMgYSBuZXcgc3RyaW5nIGJ5IGNvbmNhdGVuYXRpbmcgdTEsIHUy
ICYgdTMuCi0gICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKLSAgICAg
ICAgICAgIDogSlNDZWxsKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
VVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKKyAgICAg
ICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RyaW5nU3RydWN0dXJlLmdl
dCgpKQogICAgICAgICAgICAgLCBtX2xlbmd0aCh1MS5sZW5ndGgoKSArIHUyLmxlbmd0aCgpICsg
dTMubGVuZ3RoKCkpCiAgICAgICAgICAgICAsIG1fZmliZXJDb3VudChzX21heEludGVybmFsUm9w
ZUxlbmd0aCkKICAgICAgICAgewpAQCAtMjk1LDYgKzI5Niw0OCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8PSBzX21heEludGVybmFsUm9wZUxlbmd0aCk7CiAg
ICAgICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxE
YXRhLmhlYXApKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGVIYXNPdGhlck93bmVyKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkgSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgdmFsdWUsIEhhc090aGVyT3duZXIpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBKU1N0cmluZyogY3JlYXRlSGFzT3RoZXJPd25lcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxKU1N0cmluZz4oZ2xvYmFsRGF0YS5oZWFwKSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgdmFsdWUsIEhhc090aGVyT3duZXIpOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UGFzc1JlZlB0cjxSb3BlSW1wbD4gcm9wZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCByb3BlKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgSlNTdHJpbmcqIGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGZpYmVyQ291bnQsIEpTU3Ry
aW5nKiBzMSwgSlNTdHJpbmcqIHMyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3
IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2Jh
bERhdGEsIGZpYmVyQ291bnQsIHMxLCBzMik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpT
U3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBmaWJlckNv
dW50LCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcmIHUyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGdsb2JhbERhdGEuaGVhcCkp
IEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHMxLCB1Mik7CisgICAgICAgIH0KKyAg
ICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBmaWJlckNvdW50LCBjb25zdCBVU3RyaW5nJiB1MSwgSlNTdHJpbmcqIHMyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KGds
b2JhbERhdGEuaGVhcCkpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291bnQsIHUxLCBzMik7
CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIEpTU3RyaW5nKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBKU1ZhbHVlIHYzKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8SlNTdHJpbmc+KCpleGVjLT5oZWFwKCkp
KSBKU1N0cmluZyhleGVjLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMg
SlNTdHJpbmcqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcm
IHUxLCBjb25zdCBVU3RyaW5nJiB1MikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCB1MSwgdTIpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBKU1N0cmluZyogY3Jl
YXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVT
dHJpbmcmIHUyLCBjb25zdCBVU3RyaW5nJiB1MykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG5ldyAoYWxsb2NhdGVDZWxsPEpTU3RyaW5nPihnbG9iYWxEYXRhLmhlYXApKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCB1MSwgdTIsIHUzKTsKKyAgICAgICAgfQorCiAgICAgICAgIH5KU1N0cmlu
ZygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCh2cHRyKCkgPT0gSlNHbG9iYWxEYXRh
Ojpqc1N0cmluZ1ZQdHIpOwpAQCAtNDQyLDcgKzQ4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IHsKICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKQogICAgICAgICAg
ICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmco
Z2xvYmFsRGF0YSwgYyk7Ci0gICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nKCZjLCAxKSkpOworICAg
ICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIFVTdHJpbmcoJmMsIDEpKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcm
IHMsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTQ1Miw3ICs0OTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVUNoYXIgYyA9IHMuY2hhcmFjdGVycygpW29mZnNldF07CiAgICAgICAgIGlmIChj
IDw9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwot
ICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0YSkgSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9m
ZnNldCwgMSkpKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBs
KCksIG9mZnNldCwgMSkpKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc05vbnRy
aXZpYWxTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBzKQpAQCAt
NDYwLDEzICs1MDMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFTU0VSVChzKTsKICAg
ICAgICAgQVNTRVJUKHNbMF0pOwogICAgICAgICBBU1NFUlQoc1sxXSk7Ci0gICAgICAgIHJldHVy
biBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxE
YXRhLCBzKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJpbmc6
OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyog
anNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgcykKICAgICB7CiAgICAgICAgIEFTU0VSVChzLmxlbmd0aCgpID4gMSk7Ci0gICAgICAgIHJl
dHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCBzKSk7CisgICAgICAgIHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgSlNTdHJp
bmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcykpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmlu
ZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKQEAgLTQ4
OCw3ICs1MzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChjIDw9IG1heFNp
bmdsZUNoYXJhY3RlclN0cmluZykKICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZml4dXBWUHRyKGdsb2JhbERhdGEsIG5ldyAoZ2xvYmFsRGF0
YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcykpOworICAgICAgICByZXR1cm4gZml4dXBWUHRyKGds
b2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHMpKTsKICAgICB9CiAKICAg
ICBpbmxpbmUgSlNTdHJpbmcqIGpzU3Vic3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcq
IHMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQpAQCAtNTE2LDcgKzU1OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Mu
c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhn
bG9iYWxEYXRhLCBVU3RyaW5nKFN0cmluZ0ltcGw6OmNyZWF0ZShzLmltcGwoKSwgb2Zmc2V0LCBs
ZW5ndGgpKSwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGZpeHVw
VlB0cihnbG9iYWxEYXRhLCBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0
YSwgVVN0cmluZyhTdHJpbmdJbXBsOjpjcmVhdGUocy5pbXBsKCksIG9mZnNldCwgbGVuZ3RoKSkp
KTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzKQpAQCAtNTI5LDcgKzU3Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKGMgPD0gbWF4U2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKGdsb2JhbERhdGEsIGMpOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmaXh1cFZQdHIoZ2xvYmFsRGF0YSwgbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCBzLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcikpOworICAgICAgICByZXR1cm4gZml4
dXBWUHRyKGdsb2JhbERhdGEsIEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93bmVyKCpnbG9iYWxE
YXRhLCBzKSk7CiAgICAgfQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykgeyByZXR1cm4ganNFbXB0eVN0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgp
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJl
dmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnRv
T2JqZWN0U2xvd0Nhc2UoRXhlYwogCiAgICAgQVNTRVJUKGlzVW5kZWZpbmVkT3JOdWxsKCkpOwog
ICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90QW5PYmplY3RFcnJvcihleGVjLCAqdGhpcykp
OwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5PYmplY3QoZXhlYyk7CisgICAgcmV0dXJu
IEpTTm90QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsKIH0KIAogSlNPYmplY3QqIEpTVmFsdWU6OnRv
VGhpc09iamVjdFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKQEAgLTkwLDcgKzkwLDcg
QEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVPYmplY3QoRXhlYwogCiAgICAgQVNTRVJU
KGlzVW5kZWZpbmVkT3JOdWxsKCkpOwogICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90QW5P
YmplY3RFcnJvcihleGVjLCAqdGhpcykpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTTm90QW5P
YmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTTm90QW5PYmplY3Q6OmNyZWF0ZShleGVjKTsKIH0K
IAogSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
KSBjb25zdApAQCAtMTAzLDcgKzEwMyw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXpl
UHJvdG90eXBlKEUKIAogICAgIEFTU0VSVChpc1VuZGVmaW5lZE9yTnVsbCgpKTsKICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoZXhlYywgKnRoaXMpKTsKLSAgICBy
ZXR1cm4gbmV3IChleGVjKSBKU05vdEFuT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU05vdEFu
T2JqZWN0OjpjcmVhdGUoZXhlYyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODAsMTAgKzgwLDEwIEBAIHZvaWQgc2V0VXBTdGF0aWNGdW5jdGlvblNsb3QoRXhlY1N0YXRlKiAK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzR2xvYmFsT2JqZWN0KHRo
aXNPYmotPmdldEFub255bW91c1ZhbHVlKDApLmFzQ2VsbCgpKTsKICNpZiBFTkFCTEUoSklUKQog
ICAgICAgICBpZiAoZW50cnktPmdlbmVyYXRvcigpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBu
ZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1
bmN0aW9uU3RydWN0dXJlKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUs
IGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVu
dHJ5LT5nZW5lcmF0b3IoKSkpOworICAgICAgICAgICAgZnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJl
KCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERh
dGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5nZW5lcmF0b3Io
KSkpOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gbmV3IChl
eGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlv
blN0cnVjdHVyZSgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJvcGVydHlOYW1lLCBlbnRy
eS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0
ZShleGVjLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwg
ZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkp
OwogCiAgICAgICAgIHRoaXNPYmotPnB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lLCBmdW5jdGlvbiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAg
IGxvY2F0aW9uID0gdGhpc09iai0+Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
dGhPYmplY3QuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE0IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE1hdGhPYmplY3QgOiBwdWJsaWMgSlNPYmplY3RXaXRo
R2xvYmFsT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgTWF0aE9i
amVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgTWF0aE9iamVjdCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxNYXRoT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgTWF0aE9iamVjdChleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0CiB7CiAgICAgQVNTRVJUKGluaGVyaXRz
KCZzX2luZm8pKTsKIAotICAgIE5hdGl2ZUVycm9yUHJvdG90eXBlKiBwcm90b3R5cGUgPSBuZXcg
KGV4ZWMpIE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
U3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSwgdGhpcyk7CisgICAgTmF0aXZlRXJyb3JQcm90b3R5
cGUqIHByb3RvdHlwZSA9IE5hdGl2ZUVycm9yUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGVTdHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdlLCB0aGlzKTsKIAogICAg
IHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7IC8vIEVD
TUEgMTUuMTEuNy41CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
cnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsOSArMzAsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTmF0
aXZlRXJyb3JQcm90b3R5cGU7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvckNvbnN0cnVjdG9yIDog
cHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAg
ICAgICBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcm
KTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3Qg
VVN0cmluZyYgbmFtZUFuZE1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkg
TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJv
dG90eXBlU3RydWN0dXJlLCBuYW1lQW5kTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFs
dWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDggKzI3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3I7CiAKICAgICBjbGFzcyBOYXRpdmVFcnJvclByb3RvdHlwZSA6IHB1Ymxp
YyBFcnJvclByb3RvdHlwZSB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE5h
dGl2ZUVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
KiwgY29uc3QgVVN0cmluZyYsIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqKTsKKyAgICAKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBOYXRpdmVFcnJvclByb3RvdHlwZSogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWVBbmRNZXNzYWdlLCBOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKiBjb25zdHJ1Y3RvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxs
b2NhdGVDZWxsPE5hdGl2ZUVycm9yUHJvdG90eXBlPigqZXhlYy0+aGVhcCgpKSkgTmF0aXZlRXJy
b3JQcm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIG5hbWVBbmRNZXNzYWdl
LCBjb25zdHJ1Y3Rvcik7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0
LDcgQEAgc3RhdGljIEpTVmFsdWUgbnVtYmVyQ29uc3RydWN0b3JNaW5WYWx1ZQogLy8gRUNNQSAx
NS43LjEKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhO
dW1iZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgTnVtYmVyT2JqZWN0KiBv
YmplY3QgPSBuZXcgKGV4ZWMpIE51bWJlck9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50
ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmpl
Y3RTdHJ1Y3R1cmUoKSk7CisgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpLT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgZG91
YmxlIG4gPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKS50b051bWJl
cihleGVjKSA6IDA7CiAgICAgb2JqZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERh
dGEoKSwganNOdW1iZXIobikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBOdW1iZXJQcm90b3R5cGU7CiAKICAgICBjbGFzcyBO
dW1iZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKLSAgICBwdWJsaWM6
CisgICAgcHJpdmF0ZToKICAgICAgICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBOdW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTnVtYmVyQ29uc3RydWN0b3IqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBOdW1iZXJQcm90b3R5cGUqIG51bVByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPE51bWJlckNvbnN0cnVjdG9yPigqZXhlYy0+
aGVhcCgpKSkgTnVtYmVyQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUs
IG51bVByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBKU1ZhbHVlIE51bWJlck9iamVjdDo6
Z2V0SlNOdW1iZXIoKQogCiBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQogewot
ICAgIE51bWJlck9iamVjdCogb2JqZWN0ID0gbmV3IChleGVjKSBOdW1iZXJPYmplY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmplY3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKKyAg
ICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgb2Jq
ZWN0LT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbnVtYmVyKTsKICAgICBy
ZXR1cm4gb2JqZWN0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyT2JqZWN0LmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDE0IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE51bWJlck9iamVjdCA6IHB1YmxpYyBKU1dy
YXBwZXJPYmplY3QgeworICAgIHByb3RlY3RlZDoKKyAgICAgICAgTnVtYmVyT2JqZWN0KEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSopOworCiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBO
dW1iZXJPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKik7CisgICAgICAgIHN0YXRpYyBO
dW1iZXJPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNl
bGw8TnVtYmVyT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBOdW1iZXJPYmplY3QoZ2xvYmFsRGF0
YSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYs
MTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgTnVtYmVyUHJvdG90eXBlIDogcHVi
bGljIE51bWJlck9iamVjdCB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAgICAgICAgIE51
bWJlclByb3RvdHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgTnVtYmVyUHJvdG90eXBlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxs
PE51bWJlclByb3RvdHlwZT4oKmV4ZWMtPmhlYXAoKSkpIE51bWJlclByb3RvdHlwZShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDE0
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNs
YXNzIE9iamVjdENvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewotICAgIHB1
YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIE9iamVjdFByb3RvdHlwZSopOworICAgIAor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIE9iamVjdENvbnN0cnVjdG9yKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgT2JqZWN0UHJvdG90eXBlKiBvYmpQcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxPYmplY3RDb25zdHJ1Y3Rvcj4oKmV4ZWMt
PmhlYXAoKSkpIE9iamVjdENvbnN0cnVjdG9yKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCBvYmpQcm90b3R5cGUpOworICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHJldmlz
aW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
LSAgICBwdWJsaWM6CisgICAgcHJpdmF0ZToKICAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKKyAgICBwdWJsaWM6CisgICAg
ICAgIHN0YXRpYyBPYmplY3RQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8T2JqZWN0UHJvdG90eXBlPigq
ZXhlYy0+aGVhcCgpKSkgT2JqZWN0UHJvdG90eXBlKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIAogICAgICAgICBpZiAoZmliZXJDb3VudCA8
PSBKU1N0cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4g
bmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBmaWJlckNvdW50LCBzMSwgczIp
OworICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIGZpYmVy
Q291bnQsIHMxLCBzMik7CiAKICAgICAgICAgSlNTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWls
ZGVyKGZpYmVyQ291bnQpOwogICAgICAgICBpZiAoVU5MSUtFTFkocm9wZUJ1aWxkZXIuaXNPdXRP
Zk1lbW9yeSgpKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CiAgICAgICAgIHJvcGVCdWlsZGVyLmFwcGVuZChzMSk7CiAgICAgICAgIHJvcGVCdWlsZGVy
LmFwcGVuZChzMik7Ci0gICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGds
b2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmlu
Zzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIHUxLCBKU1N0cmluZyogczIpCkBAIC03NCwxNCArNzQsMTQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxE
YXRhKCk7CiAKICAgICAgICAgaWYgKGZpYmVyQ291bnQgPD0gSlNTdHJpbmc6OnNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgZmliZXJDb3VudCwgdTEsIHMyKTsKKyAgICAgICAgICAgIHJldHVybiBK
U1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBmaWJlckNvdW50LCB1MSwgczIpOwogCiAgICAg
ICAgIEpTU3RyaW5nOjpSb3BlQnVpbGRlciByb3BlQnVpbGRlcihmaWJlckNvdW50KTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKHJvcGVCdWlsZGVyLmlzT3V0T2ZNZW1vcnkoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogICAgICAgICByb3BlQnVpbGRl
ci5hcHBlbmQodTEpOwogICAgICAgICByb3BlQnVpbGRlci5hcHBlbmQoczIpOwotICAgICAgICBy
ZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwg
cm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogczEsIGNvbnN0IFVTdHJpbmcm
IHUyKQpAQCAtOTksMTQgKzk5LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCiAgICAgICAgIGlmIChm
aWJlckNvdW50IDw9IEpTU3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aCkKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIGZpYmVyQ291
bnQsIHMxLCB1Mik7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgZmliZXJDb3VudCwgczEsIHUyKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxk
ZXIgcm9wZUJ1aWxkZXIoZmliZXJDb3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVp
bGRlci5pc091dE9mTWVtb3J5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKICAgICAgICAgcm9wZUJ1aWxkZXIuYXBwZW5kKHMxKTsKICAgICAgICAg
cm9wZUJ1aWxkZXIuYXBwZW5kKHUyKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkg
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0
dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHJvcGVCdWlsZGVyLnJlbGVhc2UoKSk7
CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgdTEsIGNvbnN0IFVTdHJpbmcmIHUyKQpAQCAtMTIxLDcgKzEy
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1v
cnlFcnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmlu
ZyhnbG9iYWxEYXRhLCB1MSwgdTIpOworICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgq
Z2xvYmFsRGF0YSwgdTEsIHUyKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB1MSwgY29uc3QgVVN0cmlu
ZyYgdTIsIGNvbnN0IFVTdHJpbmcmIHUzKQpAQCAtMTQyLDcgKzE0Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAog
ICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwot
ICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCB1MSwg
dTIsIHUzKTsKKyAgICAgICAgcmV0dXJuIEpTU3RyaW5nOjpjcmVhdGUoKmdsb2JhbERhdGEsIHUx
LCB1MiwgdTMpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyKiBzdHJpbmdzLCB1bnNpZ25lZCBjb3VudCkKQEAgLTE2
MCw3ICsxNjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBpZiAoZmliZXJDb3VudCA9
PSAzKQotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZXhlYywg
c3RyaW5nc1swXS5qc1ZhbHVlKCksIHN0cmluZ3NbMV0uanNWYWx1ZSgpLCBzdHJpbmdzWzJdLmpz
VmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZShleGVjLCBzdHJp
bmdzWzBdLmpzVmFsdWUoKSwgc3RyaW5nc1sxXS5qc1ZhbHVlKCksIHN0cmluZ3NbMl0uanNWYWx1
ZSgpKTsKIAogICAgICAgICBKU1N0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIoZmliZXJD
b3VudCk7CiAgICAgICAgIGlmIChVTkxJS0VMWShyb3BlQnVpbGRlci5pc091dE9mTWVtb3J5KCkp
KQpAQCAtMTg1LDcgKzE4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAob3ZlcmZs
b3cpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwogCi0g
ICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGVC
dWlsZGVyLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiBKU1N0cmluZzo6Y3JlYXRlKCpnbG9i
YWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlKQpA
QCAtMjMyLDcgKzIzMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxE
YXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlQnVpbGRlci5yZWxlYXNlKCkpOworICAgICAg
ICByZXR1cm4gSlNTdHJpbmc6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgcm9wZUJ1aWxkZXIucmVsZWFz
ZSgpKTsKICAgICB9CiAKICAgICAvLyBFQ01BIDExLjkuMwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDggKzc2
LDggQEAgc3RydWN0IFJlZ0V4cFJlcHJlc2VudGF0aW9uIHsKICAgICBPd25QdHI8WWFycjo6Qnl0
ZWNvZGVQYXR0ZXJuPiBtX3JlZ0V4cEJ5dGVjb2RlOwogfTsKIAotUmVnRXhwOjpSZWdFeHAoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdF
eHBGbGFncyBmbGFncykKLSAgICA6IEpTQ2VsbCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+cmVn
RXhwU3RydWN0dXJlLmdldCgpKQorUmVnRXhwOjpSZWdFeHAoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykKKyAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnJlZ0V4cFN0cnVjdHVyZS5nZXQoKSkK
ICAgICAsIG1fc3RhdGUoTm90Q29tcGlsZWQpCiAgICAgLCBtX3BhdHRlcm5TdHJpbmcocGF0dGVy
blN0cmluZykKICAgICAsIG1fZmxhZ3MoZmxhZ3MpCkBAIC05OSw5ICs5OSwxNCBAQCBSZWdFeHA6
On5SZWdFeHAoKQogewogfQogCi1SZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVyblN0cmluZywgUmVnRXhwRmxhZ3MgZmxh
Z3MpCitSZWdFeHAqIFJlZ0V4cDo6Y3JlYXRlV2l0aG91dENhY2hpbmcoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFn
cykKIHsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+cmVnRXhwQ2FjaGUoKS0+bG9va3VwT3JDcmVh
dGUocGF0dGVyblN0cmluZywgZmxhZ3MpOworICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxS
ZWdFeHA+KGdsb2JhbERhdGEuaGVhcCkpIFJlZ0V4cChnbG9iYWxEYXRhLCBwYXR0ZXJuU3RyaW5n
LCBmbGFncyk7Cit9CisKK1JlZ0V4cCogUmVnRXhwOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCBSZWdFeHBGbGFncyBmbGFncykK
K3sKKyAgICByZXR1cm4gZ2xvYmFsRGF0YS5yZWdFeHBDYWNoZSgpLT5sb29rdXBPckNyZWF0ZShw
YXR0ZXJuU3RyaW5nLCBmbGFncyk7CiB9CiAKIHZvaWQgUmVnRXhwOjpjb21waWxlKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgUmVnRXhwIDogcHVibGljIEpTQ2VsbCB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUmVnRXhwKiBjcmVhdGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgVVN0cmluZyYgcGF0
dGVybiwgUmVnRXhwRmxhZ3MpOworICAgICAgICBzdGF0aWMgUmVnRXhwKiBjcmVhdGUoSlNHbG9i
YWxEYXRhJiwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgUmVnRXhwRmxhZ3MpOwogICAgICAgICB+
UmVnRXhwKCk7CiAKICAgICAgICAgYm9vbCBnbG9iYWwoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdz
ICYgRmxhZ0dsb2JhbDsgfQpAQCAtNzUsNyArNzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWdFeHBDYWNoZTsKLSAgICAgICAgUmVn
RXhwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgUmVn
RXhwRmxhZ3MpOworICAgICAgICBSZWdFeHAoSlNHbG9iYWxEYXRhJiwgY29uc3QgVVN0cmluZyYs
IFJlZ0V4cEZsYWdzKTsKKworICAgICAgICBzdGF0aWMgUmVnRXhwKiBjcmVhdGVXaXRob3V0Q2Fj
aGluZyhKU0dsb2JhbERhdGEmLCBjb25zdCBVU3RyaW5nJiwgUmVnRXhwRmxhZ3MpOwogCiAgICAg
ICAgIGVudW0gUmVnRXhwU3RhdGUgewogICAgICAgICAgICAgUGFyc2VFcnJvciwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDYWNoZS5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIFJlZ0V4cCogUmVnRXhwQ2FjaGU6Omxv
b2t1cE9yQ3JlYXRlKGNvbnMKICAgICBSZWdFeHBDYWNoZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV93ZWFrQ2FjaGUuZmluZChrZXkpOwogICAgIGlmIChyZXN1bHQgIT0gbV93ZWFrQ2FjaGUuZW5k
KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQtPnNlY29uZC5nZXQoKTsKLSAgICBSZWdFeHAqIHJl
Z0V4cCA9IG5ldyAobV9nbG9iYWxEYXRhKSBSZWdFeHAobV9nbG9iYWxEYXRhLCBwYXR0ZXJuU3Ry
aW5nLCBmbGFncyk7CisgICAgUmVnRXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZVdpdGhvdXRD
YWNoaW5nKCptX2dsb2JhbERhdGEsIHBhdHRlcm5TdHJpbmcsIGZsYWdzKTsKICNpZiBFTkFCTEUo
UkVHRVhQX1RSQUNJTkcpCiAgICAgbV9nbG9iYWxEYXRhLT5hZGRSZWdFeHBUb1RyYWNlKHJlZ0V4
cCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTMsNyArMTUzLDcgQEAgdm9pZCBSZWdFeHBNYXRjaGVzQXJyYXk6OmZpbGxBcnJheUluc3Rh
bgogCiBKU09iamVjdCogUmVnRXhwQ29uc3RydWN0b3I6OmFycmF5T2ZNYXRjaGVzKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBNYXRjaGVzQXJy
YXkoZXhlYywgZC5nZXQoKSk7CisgICAgcmV0dXJuIFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRl
KGV4ZWMsIGQuZ2V0KCkpOwogfQogCiBKU1ZhbHVlIFJlZ0V4cENvbnN0cnVjdG9yOjpnZXRCYWNr
cmVmKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkgY29uc3QKQEAgLTMwNCw3ICszMDQsNyBA
QCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIElm
IGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCB0aGlzIGp1c3QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1l
bnQgKHNlZSAxNS4xMC4zLjEpLgogICAgICAgICBpZiAoY2FsbEFzQ29uc3RydWN0b3IpIHsKICAg
ICAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4oYXNP
YmplY3QoYXJnMCkpLT5yZWdFeHAoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIFJl
Z0V4cE9iamVjdChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCks
IHJlZ0V4cCk7CisgICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBhc09iamVjdChhcmcwKTsKICAgICB9CkBAIC0zMjIs
MTAgKzMyMiwxMCBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVj
LCAiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwogICAg
IH0KIAotICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERh
dGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgIFJlZ0V4cCogcmVnRXhwID0gUmVnRXhwOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwYXR0ZXJuLCBmbGFncyk7CiAgICAgaWYgKCFyZWdFeHAt
PmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4
RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwotICAgIHJldHVybiBuZXcgKGV4
ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdsb2JhbE9iamVj
dC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6
Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBTdHJ1Y3R1cmUoKSwgcmVnRXhwKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0V2l0aFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1NiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgY2xhc3MgUmVnRXhwQ29uc3RydWN0b3Ig
OiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7Ci0gICAgcHVibGljOgorICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZ0V4cENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgUmVnRXhwUHJvdG90eXBlKik7CiAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBSZWdFeHBDb25zdHJ1Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZ0V4cFByb3RvdHlwZSog
cmVnRXhwUHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxv
Y2F0ZUNlbGw8UmVnRXhwQ29uc3RydWN0b3I+KCpleGVjLT5oZWFwKCkpKSBSZWdFeHBDb25zdHJ1
Y3RvcihleGVjLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwUHJvdG90eXBlKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIEFub255bW91c1Nsb3RDb3VudCwg
JnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBNYXRjaGVzQXJyYXkuaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
OCArMjUsMTQgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwTWF0Y2hlc0Fy
cmF5IDogcHVibGljIEpTQXJyYXkgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAg
ICBSZWdFeHBNYXRjaGVzQXJyYXkoRXhlY1N0YXRlKiwgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRl
Kik7CisKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBNYXRjaGVzQXJyYXkqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFJlZ0V4cENvbnN0cnVjdG9yUHJpdmF0ZSogY3RvclByaXZh
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxSZWdF
eHBNYXRjaGVzQXJyYXk+KCpleGVjLT5oZWFwKCkpKSBSZWdFeHBNYXRjaGVzQXJyYXkoZXhlYywg
Y3RvclByaXZhdGUpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgflJlZ0V4cE1hdGNoZXNB
cnJheSgpOwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCAr
MjcsMjIgQEAKIG5hbWVzcGFjZSBKU0MgewogICAgIAogICAgIGNsYXNzIFJlZ0V4cE9iamVjdCA6
IHB1YmxpYyBKU09iamVjdFdpdGhHbG9iYWxPYmplY3QgeworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgUmVnRXhwT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CisK
ICAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZWdFeHBPYmplY3QqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBSZWdFeHAqIHJlZ0V4cCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAo
YWxsb2NhdGVDZWxsPFJlZ0V4cE9iamVjdD4oKmV4ZWMtPmhlYXAoKSkpIFJlZ0V4cE9iamVjdChn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcmVnRXhwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIFJlZ0V4cE9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
Z0V4cCogcmVnRXhwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0
ZUNlbGw8UmVnRXhwT2JqZWN0PihnbG9iYWxEYXRhLmhlYXApKSBSZWdFeHBPYmplY3QoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IHR5cGVkZWYgSlNPYmplY3RXaXRoR2xvYmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgUmVnRXhw
T2JqZWN0KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgICAgIHZp
cnR1YWwgflJlZ0V4cE9iamVjdCgpOwogCiAgICAgICAgIHZvaWQgc2V0UmVnRXhwKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUmVnRXhwKiByKSB7IGQtPnJlZ0V4cC5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgcik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIs
NyArMTIyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAg
ICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRGbGFncykKICAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJJbnZhbGlkIGZs
YWdzIHN1cHBsaWVkIHRvIFJlZ0V4cCBjb25zdHJ1Y3Rvci4iKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcmVnRXhwID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwg
ZmxhZ3MpOworICAgICAgICByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRh
KCksIHBhdHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDE1IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cFByb3RvdHlwZSA6IHB1YmxpYyBSZWdFeHBP
YmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZ0V4cFByb3Rv
dHlwZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFJlZ0V4cCopOwog
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVnRXhwUHJvdG90eXBlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUmVnRXhwKiByZWdFeHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBu
ZXcgKGFsbG9jYXRlQ2VsbDxSZWdFeHBQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBSZWdFeHBQ
cm90b3R5cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHJlZ0V4cCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogCiAg
ICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTVmFsdWUgcHJvdG90eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2NvcGVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlQ2hhaW4uaAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TY29wZUNoYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgCiAgICAg
Y2xhc3MgU2NvcGVDaGFpbk5vZGUgOiBwdWJsaWMgSlNDZWxsIHsKLSAgICBwdWJsaWM6CisgICAg
cHJpdmF0ZToKICAgICAgICAgU2NvcGVDaGFpbk5vZGUoU2NvcGVDaGFpbk5vZGUqIG5leHQsIEpT
T2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGdsb2JhbFRoaXMpCiAgICAgICAgICAgICA6IEpTQ2Vs
bCgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+c2NvcGVDaGFpbk5vZGVTdHJ1Y3R1cmUuZ2V0KCkp
CiAgICAgICAgICAgICAsIGdsb2JhbERhdGEoZ2xvYmFsRGF0YSkKQEAgLTQ3LDYgKzQ3LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIH0KIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFNjb3BlQ2hhaW5Ob2RlKiBjcmVh
dGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogbmV4dCwgSlNPYmplY3QqIG9iamVj
dCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogZ2xvYmFsVGhpcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5l
dyAoYWxsb2NhdGVDZWxsPFNjb3BlQ2hhaW5Ob2RlPigqZXhlYy0+aGVhcCgpKSkgU2NvcGVDaGFp
bk5vZGUobmV4dCwgb2JqZWN0LCBnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIGdsb2JhbFRoaXMp
OworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBTY29wZUNoYWluTm9kZSogY3JlYXRlKFNjb3Bl
Q2hhaW5Ob2RlKiBuZXh0LCBKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBnbG9iYWxUaGlzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U2NvcGVDaGFp
bk5vZGU+KGdsb2JhbERhdGEtPmhlYXApKSBTY29wZUNoYWluTm9kZShuZXh0LCBvYmplY3QsIGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgZ2xvYmFsVGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YTsKICAgICAgICAgV3JpdGVCYXJyaWVy
PFNjb3BlQ2hhaW5Ob2RlPiBuZXh0OwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG9i
amVjdDsKQEAgLTc2LDcgKzg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIFNjb3Bl
Q2hhaW5Ob2RlKiBTY29wZUNoYWluTm9kZTo6cHVzaChKU09iamVjdCogbykKICAgICB7CiAgICAg
ICAgIEFTU0VSVChvKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgU2NvcGVDaGFp
bk5vZGUodGhpcywgbywgZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9iYWxUaGlz
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFNjb3BlQ2hhaW5Ob2RlOjpjcmVhdGUodGhpcywgbywg
Z2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LmdldCgpLCBnbG9iYWxUaGlzLmdldCgpKTsKICAgICB9
CiAKICAgICBpbmxpbmUgU2NvcGVDaGFpbk5vZGUqIFNjb3BlQ2hhaW5Ob2RlOjpwb3AoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCShy
ZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBTbWFs
bFN0cmluZ3M6OmNvdW50KCkgY29uc3QKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0eVN0
cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgQVNTRVJUKCFtX2VtcHR5U3Ry
aW5nKTsKLSAgICBtX2VtcHR5U3RyaW5nID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9i
YWxEYXRhLCAiIiwgSlNTdHJpbmc6Okhhc090aGVyT3duZXIpOworICAgIG1fZW1wdHlTdHJpbmcg
PSBKU1N0cmluZzo6Y3JlYXRlSGFzT3RoZXJPd25lcigqZ2xvYmFsRGF0YSwgIiIpOwogfQogCiB2
b2lkIFNtYWxsU3RyaW5nczo6Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkBAIC0xMTQsNyArMTE0LDcg
QEAgdm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3RlcgogICAgIGlmICghbV9z
dG9yYWdlKQogICAgICAgICBtX3N0b3JhZ2UgPSBhZG9wdFB0cihuZXcgU21hbGxTdHJpbmdzU3Rv
cmFnZSk7CiAgICAgQVNTRVJUKCFtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSk7
Ci0gICAgbV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0gPSBuZXcgKGdsb2JhbERh
dGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4obV9zdG9yYWdl
LT5yZXAoY2hhcmFjdGVyKSksIEpTU3RyaW5nOjpIYXNPdGhlck93bmVyKTsKKyAgICBtX3Npbmds
ZUNoYXJhY3RlclN0cmluZ3NbY2hhcmFjdGVyXSA9IEpTU3RyaW5nOjpjcmVhdGVIYXNPdGhlck93
bmVyKCpnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KG1fc3RvcmFnZS0+cmVwKGNo
YXJhY3RlcikpKTsKIH0KIAogU3RyaW5nSW1wbCogU21hbGxTdHJpbmdzOjpzaW5nbGVDaGFyYWN0
ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biA5MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsOCArODcsOCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
OwogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG5ldyAoZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3Ry
aW5nT2JqZWN0U3RydWN0dXJlKCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG5ldyAo
ZXhlYykgU3RyaW5nT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+c3RyaW5nT2JqZWN0U3RydWN0
dXJlKCksIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoU3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0
LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
U3RyaW5nT2JqZWN0OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUoKSwgZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKIH0KIAogQ29uc3Ry
dWN0VHlwZSBTdHJpbmdDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRh
JiBjb25zdHJ1Y3REYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
aW5nQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cmluZ1Byb3RvdHlw
ZTsKIAogICAgIGNsYXNzIFN0cmluZ0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24gewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgogICAgICAgICBTdHJpbmdDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFN0cmluZ1Byb3RvdHlw
ZSopOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHJpbmdDb25zdHJ1
Y3RvciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCAsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqIHN0clByb3RvdHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cmluZ0Nv
bnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgU3RyaW5nQ29uc3RydWN0b3IoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUsIHN0clByb3RvdHlwZSk7CisgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDExICsyNywyMSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBTdHJpbmdPYmpl
Y3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKLSAgICBwdWJsaWM6CisgICAgcHJvdGVjdGVk
OgogICAgICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7CiAgICAgICAg
IFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBjb25zdCBVU3RyaW5nJik7Ci0K
KyAgICAgICAgICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBTdHJpbmdPYmpl
Y3QqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7ICAKKyAgICAgICAg
fQorICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgc3RyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RyaW5nT2JqZWN0PigqZXhlYy0+aGVh
cCgpKSkgU3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgc3RyKTsgIAorICAgICAgICB9CiAg
ICAgICAgIHN0YXRpYyBTdHJpbmdPYmplY3QqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIEpTU3RyaW5nKik7CisgICAgICAgIAogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xv
dChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCShyZXZpc2lvbiA5
MTE4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgU3RyaW5nT2JqZWN0
VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFVTdHJpbmcmIHN0cmluZykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhl
YykgU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoZXhlYywKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNB
c1VuZGVmaW5lZD4oKmV4ZWMtPmhlYXAoKSkpIFN0cmluZ09iamVjdFRoYXRNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKGV4ZWMsCiAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5zdHJpbmdQcm90b3R5cGUo
KSksIHN0cmluZyk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxNSw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgICAqICBJZiByZWdleHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBb
W0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIsIGl0IGlzCiAgICAgICAgICAqICByZXBsYWNl
ZCB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb24gbmV3IFJlZ0V4cChyZWdleHApLgog
ICAgICAgICAgKi8KLSAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERh
dGEoKSwgYTAudG9TdHJpbmcoZXhlYyksIE5vRmxhZ3MpOworICAgICAgICByZWcgPSBSZWdFeHA6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsK
ICAgICB9CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwogICAgIGludCBwb3M7
CkBAIC02NjQsNyArNjY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgICAgICAgKiAgSWYgcmVnZXhwIGlzIG5vdCBhbiBvYmplY3Qgd2hvc2UgW1tDbGFz
c11dIHByb3BlcnR5IGlzICJSZWdFeHAiLCBpdCBpcwogICAgICAgICAgKiAgcmVwbGFjZWQgd2l0
aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAg
ICAgICovCi0gICAgICAgIHJlZyA9IFJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCks
IGEwLnRvU3RyaW5nKGV4ZWMpLCBOb0ZsYWdzKTsKKyAgICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBhMC50b1N0cmluZyhleGVjKSwgTm9GbGFncyk7CiAgICAg
fQogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKICAgICBpbnQgcG9zOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDE1IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIE9iamVjdFByb3RvdHlwZTsKIAogICAgIGNsYXNzIFN0cmluZ1Byb3Rv
dHlwZSA6IHB1YmxpYyBTdHJpbmdPYmplY3QgewotICAgIHB1YmxpYzoKKyAgICBwcml2YXRlOgog
ICAgICAgICBTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqKTsKIAorICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFN0cmluZ1Byb3RvdHlwZSog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFs
bG9jYXRlQ2VsbDxTdHJpbmdQcm90b3R5cGU+KCpleGVjLT5oZWFwKCkpKSBTdHJpbmdQcm90b3R5
cGUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisKICAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxEYXRhLnN0
cnVjdHVyZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBBU1NFUlQoY2xhc3NJbmZvKTsKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgKCZnbG9iYWxEYXRhKSBTdHJ1Y3R1cmUoZ2xvYmFsRGF0YSwgcHJv
dG90eXBlLCB0eXBlSW5mbywgYW5vbnltb3VzU2xvdENvdW50LCBjbGFzc0luZm8pOworICAgICAg
ICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVDZWxsPFN0cnVjdHVyZT4oZ2xvYmFsRGF0YS5oZWFw
KSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIHByb3RvdHlwZSwgdHlwZUluZm8sIGFub255bW91c1Ns
b3RDb3VudCwgY2xhc3NJbmZvKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1
bXBTdGF0aXN0aWNzKCk7CkBAIC0xNTcsNyArMTU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVCghZ2xvYmFsRGF0YS5zdHJ1Y3R1
cmVTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyAoJmdsb2JhbERhdGEpIFN0cnVj
dHVyZShnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxT
dHJ1Y3R1cmU+KGdsb2JhbERhdGEuaGVhcCkpIFN0cnVjdHVyZShnbG9iYWxEYXRhKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKQEAgLTE3MCw3ICsxNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3Qg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChnbG9i
YWxEYXRhLnN0cnVjdHVyZVN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3ICgmZ2xv
YmFsRGF0YSkgU3RydWN0dXJlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8U3RydWN0dXJlPihnbG9iYWxEYXRhLmhlYXApKSBTdHJ1
Y3R1cmUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgdHlwZWRlZiBlbnVtIHsgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVDaGFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNoYWluLmgJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2hhaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKIAogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZUNoYWluKiBjcmVhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIGhlYWQpIHsgcmV0dXJuIG5ldyAoJmdsb2JhbERh
dGEpIFN0cnVjdHVyZUNoYWluKGdsb2JhbERhdGEsIGdsb2JhbERhdGEuc3RydWN0dXJlQ2hhaW5T
dHJ1Y3R1cmUuZ2V0KCksIGhlYWQpOyB9CisgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmVDaGFpbiog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBoZWFkKSB7IHJldHVy
biBuZXcgKGFsbG9jYXRlQ2VsbDxTdHJ1Y3R1cmVDaGFpbj4oZ2xvYmFsRGF0YS5oZWFwKSkgU3Ry
dWN0dXJlQ2hhaW4oZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJ1Y3R1cmVDaGFpblN0cnVjdHVy
ZS5nZXQoKSwgaGVhZCk7IH0KICAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGhlYWQo
KSB7IHJldHVybiBtX3ZlY3Rvci5nZXQoKTsgfQogICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTExODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAx
MS0wNy0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlZmFjdG9yIEpTQyB0byByZXBsYWNlIEpTQ2VsbDo6b3BlcmF0b3IgbmV3IHdpdGggc3Rh
dGljIGNyZWF0ZSBtZXRob2QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY0NDY2CisgICAgICAgIEZpcnN0IHN0ZXAgaW4gYSBsb25nZXIgcmVmYWN0b3Jp
bmcgcHJvY2VzcyB0byByZW1vdmUgdGhlIHVzZSBvZgorICAgICAgICBvcGVyYXRvciBuZXcgb3Zl
cmxvYWRpbmcgaW4gb3JkZXIgdG8gYWxsb2NhdGUgR0Mgb2JqZWN0cyBhbmQgdG8gcmVwbGFjZQor
ICAgICAgICB0aGlzIG1ldGhvZCB3aXRoIHN0YXRpYyBjcmVhdGUgbWV0aG9kcyBmb3IgZWFjaCBp
bmRpdmlkdWFsIHR5cGUgb2YgaGVhcC1hbGxvY2F0ZWQKKyAgICAgICAgSlMgb2JqZWN0LiAgVGhp
cyBwYXJ0aWN1bGFyIHBhdGNoIG9ubHkgZGVhbHMgd2l0aCByZXBsYWNpbmcgdXNlcyBvZgorICAg
ICAgICBvcGVyYXRvciBuZXcgd2l0aGluIEpTQyBwcm9wZXIuICBGdXR1cmUgcGF0Y2hlcyB3aWxs
IHJlbW92ZSBpdCBmcm9tIHRoZQorICAgICAgICBwYXJ0cyB0aGF0IGludGVyZmFjZSB3aXRoIHRo
ZSBET00uICBEdWUgdG8gdGhlIERPTSdzIGNvbnRpbnVlZCBkZXBlbmRlbmNlCisgICAgICAgIG9u
IGl0LCBvcGVyYXRvciBuZXcgaGFzIG5vdCBhY3R1YWxseSBiZWVuIHJlbW92ZWQgZnJvbSBKU0Nl
bGwuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQgKG9saXZlckBhcHBsZS5jb20p
IGFuZCBEYXJpbiBBZGxlciAoZGFyaW5AYXBwbGUuY29tKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0RhdGVPck51bGwpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0
VG9TdHJpbmdGdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9u
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bm9uQ2FjaGluZ1N0YXRpY0JhY2tGdW5jdGlvbkdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpub25DYWNoaW5nU3RhdGljRm9yd2FyZEZ1bmN0aW9uR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om5vbkNhY2hpbmdTdGF0aWNHb0Z1bmN0aW9uR2V0dGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om5vbkNhY2hpbmdTdGF0aWNSZXBsYWNlRnVuY3Rpb25HZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6bm9uQ2FjaGluZ1N0YXRpY1JlbG9hZEZ1bmN0aW9uR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6Om5vbkNhY2hpbmdTdGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAgICAqIGJyaWRnZS9xdC9xdF9y
dW50aW1lLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRRVmFyaWFudFRvVmFs
dWUpOgorCiAyMDExLTA3LTE4ICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFdlYiBJbnNwZWN0b3I6IHByb3ZpZGUgdW5pcXVl
IGlkZW50aWZpZXJzIGZvciBsb2FkZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDkxMTg2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1
Niw3IEBAIEpTVmFsdWUganNEYXRlT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgZG8KIHsKICAgICBp
ZiAoIWlzZmluaXRlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVy
biBuZXcgKGV4ZWMpIERhdGVJbnN0YW5jZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwg
dmFsdWUpOwogfQogCiBkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQpAQCAtMzA3LDcgKzMwNyw3IEBAIEZyYW1lKiB0b0R5bmFtaWNGcmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCiAKIEpTVmFsdWUgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgp
LCAwLCBwcm9wZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKKyAgICByZXR1cm4g
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0
eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAogU3RydWN0dXJlKiBnZXRDYWNo
ZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsNyArODgsNyBAQCB2b2lkIEpTRE9NV2luZG93Ojp2aXNpdENoaWxkcmVuKFNsb3RWaXNpCiB0
ZW1wbGF0ZTxOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4KIEpTVmFs
dWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIGxlbmd0aCwgcHJvcGVy
dHlOYW1lLCBuYXRpdmVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUsIG5hdGl2ZUZ1
bmN0aW9uKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgY2hpbGRGcmFtZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNw
cAkocmV2aXNpb24gOTExODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNyArNDAsMTcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljQmFja0Z1bmN0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0
aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rp
b25CYWNrKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0
cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uQmFj
ayk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGb3J3YXJkRnVuY3Rpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMCwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlv
bkZvcndhcmQpOworICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
U3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNIaXN0b3J5UHJvdG90eXBlRnVuY3Rpb25G
b3J3YXJkKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0dvRnVuY3Rpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0hpc3RvcnlQcm90b3R5cGVGdW5jdGlv
bkdvKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVj
dHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzSGlzdG9yeVByb3RvdHlwZUZ1bmN0aW9uR28pOwog
fQogCiBib29sIEpTSGlzdG9yeTo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiA5MTE4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljUmVwbGFj
ZUZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIHByb3BlcnR5TmFtZSwganNMb2NhdGlvblByb3Rv
dHlwZUZ1bmN0aW9uUmVwbGFjZSk7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0aW9uUHJvdG90
eXBlRnVuY3Rpb25SZXBsYWNlKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRp
Y1JlbG9hZEZ1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rp
b24oZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIHByb3BlcnR5TmFtZSwganNMb2NhdGlv
blByb3RvdHlwZUZ1bmN0aW9uUmVsb2FkKTsKKyAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBwcm9wZXJ0eU5hbWUsIGpzTG9jYXRpb25Q
cm90b3R5cGVGdW5jdGlvblJlbG9hZCk7CiB9CiAKIHN0YXRpYyBKU1ZhbHVlIG5vbkNhY2hpbmdT
dGF0aWNBc3NpZ25GdW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1
bmN0aW9uKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBwcm9wZXJ0eU5hbWUsIGpzTG9j
YXRpb25Qcm90b3R5cGVGdW5jdGlvbkFzc2lnbik7CisgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNy
ZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgcHJvcGVydHlOYW1lLCBqc0xvY2F0
aW9uUHJvdG90eXBlRnVuY3Rpb25Bc3NpZ24pOwogfQogCiBib29sIEpTTG9jYXRpb246OmdldE93
blByb3BlcnR5U2xvdERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDkxMTg2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGRvdWJsZSBkOwogICAgICAgICAgICAgaWYgKCFyZWFkKGQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IChtX2V4ZWMp
IERhdGVJbnN0YW5jZShtX2V4ZWMsIG1fZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCksIGQp
OworICAgICAgICAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKG1fZXhlYywgbV9nbG9i
YWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSwgZCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBG
aWxlVGFnOiB7CiAgICAgICAgICAgICBSZWZQdHI8RmlsZT4gZmlsZTsKQEAgLTExNjYsOCArMTE2
Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgICAgIFJlZ0V4cEZsYWdzIHJlRmxhZ3MgPSByZWdFeHBGbGFncyhmbGFncy0+dXN0cmluZygp
KTsKICAgICAgICAgICAgIEFTU0VSVChyZUZsYWdzICE9IEludmFsaWRGbGFncyk7Ci0gICAgICAg
ICAgICBSZWdFeHAqIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKCZtX2V4ZWMtPmdsb2JhbERhdGEo
KSwgcGF0dGVybi0+dXN0cmluZygpLCByZUZsYWdzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
KG1fZXhlYykgUmVnRXhwT2JqZWN0KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2ds
b2JhbE9iamVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7IAorICAgICAgICAgICAgUmVn
RXhwKiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShtX2V4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVy
bi0+dXN0cmluZygpLCByZUZsYWdzKTsKKyAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6
OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtX2dsb2JhbE9i
amVjdC0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7IAogICAgICAgICB9CiAgICAgICAgIGNh
c2UgT2JqZWN0UmVmZXJlbmNlVGFnOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lvbiA5
MTE4NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODczLDkgKzg3Myw5IEBAIEpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1
ZShFeGVjU3RhdGUKICAgICAgICAgICAgIFVTdHJpbmcgcGF0dGVybigoVUNoYXIqKXJlLnBhdHRl
cm4oKS51dGYxNigpLCByZS5wYXR0ZXJuKCkubGVuZ3RoKCkpOwogICAgICAgICAgICAgUmVnRXhw
RmxhZ3MgZmxhZ3MgPSAocmUuY2FzZVNlbnNpdGl2aXR5KCkgPT0gUXQ6OkNhc2VJbnNlbnNpdGl2
ZSkgPyBGbGFnSWdub3JlQ2FzZSA6IE5vRmxhZ3M7CiAKLSAgICAgICAgICAgIEpTQzo6UmVnRXhw
KiByZWdFeHAgPSBKU0M6OlJlZ0V4cDo6Y3JlYXRlKCZleGVjLT5nbG9iYWxEYXRhKCksIHBhdHRl
cm4sIGZsYWdzKTsKKyAgICAgICAgICAgIEpTQzo6UmVnRXhwKiByZWdFeHAgPSBKU0M6OlJlZ0V4
cDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOwogICAgICAgICAg
ICAgaWYgKHJlZ0V4cC0+aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGV4
ZWMpIFJlZ0V4cE9iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJlZ0V4cE9iamVjdDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUo
KSwgcmVnRXhwKTsKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTkwOCw3ICs5MDgsNyBAQCBKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhl
Y1N0YXRlCiAgICAgICAgIGR0LmlzRFNUID0gLTE7CiAgICAgICAgIGRvdWJsZSBtcyA9IGdyZWdv
cmlhbkRhdGVUaW1lVG9NUyhleGVjLCBkdCwgdGltZS5tc2VjKCksIC8qaW5wdXRJc1VUQyovIGZh
bHNlKTsKIAotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2UoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5jKG1zKSk7Cisg
ICAgICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdHJ1bmMobXMpKTsKICAgICB9CiAKICAgICBp
ZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFCeXRlQXJyYXkpIHsK
</data>
<flag name="review"
          id="95995"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="95997"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>