<?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>235382</bug_id>
          
          <creation_ts>2022-01-19 13:54:33 -0800</creation_ts>
          <short_desc>[JSC] move function wrapping logic to a new Function type</short_desc>
          <delta_ts>2022-02-08 12:43:23 -0800</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Caitlin Potter (:caitp)">caitp</reporter>
          <assigned_to name="Caitlin Potter (:caitp)">caitp</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1832223</commentid>
    <comment_count>0</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 13:54:33 -0800</bug_when>
    <thetext>Bug for creating an alternative implementation of the ShadowRealm wrapper function, based on JSBoundFunction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832226</commentid>
    <comment_count>1</comment_count>
      <attachid>449517</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 14:07:48 -0800</bug_when>
    <thetext>Created attachment 449517
Patch

This is just a starter patch, it has some things which could be better --- For the thunk, the rethrowing logic does not actually work, and I need some clarification on getting that set up. It might be good for allocation to occur inline, rather than in C operations. As noted in the changelog, at this time thhtere isn&apos;t anything added to DFG/FTL, but potentially there are opportunities there. I&apos;m hoping I can get some feedback on the initial version and see if we actually prefer this to the JS builtin we&apos;ve already got.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832230</commentid>
    <comment_count>2</comment_count>
      <attachid>449517</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 14:20:00 -0800</bug_when>
    <thetext>Comment on attachment 449517
Patch

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

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1494
&gt; +    CCallHelpers::Jump noCode;

I think it&apos;s not observable if this is removed, so the thunk can be a bit smaller without this (though I don&apos;t believe it makes a big difference)

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1533
&gt; +        jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);

loop body is grown a bit because a lot of the wrapper logic is done inline, and only jumps to C to allocate a JSRemoteFunction or throw. I&apos;m not sure if we want to do all the work in C, or do all the work inline here --- left as-is for now for simplicity.

T1 is manually saved, and the address of the callee is restored in T0 in each loop -- I&apos;m sure it&apos;s fine to not restore the callee, which could potentially free up a register and avoid the need to save registers.

I might do that on the next change

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1575
&gt; +    CCallHelpers::Jump targetFunctionException = jit.emitJumpIfException(vm);

So this is a real problem, because right now, the inner realm&apos;s exception handler is leaked to the caller realm. The &apos;targetFunctionException&apos; label below needs to be registered as an exception handler location so that the leak can be avoided. I could use some guidance on how the handler locations are organized in JSC in order to do this.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1594
&gt; +    jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);

Ditto, may want to do this inline (or at least inline the primitive cases, as is done above)

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1595
&gt; +    exceptionChecks.append(jit.emitJumpIfException(vm));

I&apos;m guessing there&apos;s no reason the C function can&apos;t do the unwind on its own and avoid this emitJumpIfException business?

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1605
&gt; +    jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);

the rethrow stub itself is kind of a mess and untested, since I can&apos;t get JS code to actually reach this point. It attempts to do what is already done in js, which is hopefully adequate.

&gt; Source/JavaScriptCore/jsc.cpp:2089
&gt; +JSC_DEFINE_HOST_FUNCTION(functionDollarIsRemoteFunction, (JSGlobalObject* globalObject, CallFrame* callFrame))

mainly added to help with debugging, but could be helpful in tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832231</commentid>
    <comment_count>3</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 14:21:27 -0800</bug_when>
    <thetext>I wouldn&apos;t pay attention to the EWS failures on mac yet, as the project files haven&apos;t been changed to add the new sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832252</commentid>
    <comment_count>4</comment_count>
      <attachid>449522</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 15:14:16 -0800</bug_when>
    <thetext>Created attachment 449522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832294</commentid>
    <comment_count>5</comment_count>
      <attachid>449533</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 17:27:21 -0800</bug_when>
    <thetext>Created attachment 449533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832313</commentid>
    <comment_count>6</comment_count>
      <attachid>449540</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-19 18:16:02 -0800</bug_when>
    <thetext>Created attachment 449540
Patch

hopefully that fixed up the webkit xcode build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832407</commentid>
    <comment_count>7</comment_count>
      <attachid>449569</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-20 06:41:45 -0800</bug_when>
    <thetext>Created attachment 449569
Patch

fixup ThrowScope assertions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833497</commentid>
    <comment_count>8</comment_count>
      <attachid>449569</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-24 14:43:16 -0800</bug_when>
    <thetext>Comment on attachment 449569
Patch

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

r=me with comments.

&gt; Source/JavaScriptCore/builtins/ShadowRealmPrototype.js:37
&gt;          delete wrapped[&apos;name&apos;];
&gt;          delete wrapped[&apos;length&apos;];

Is it possible to remove them and integrate these changes into C++ JSRemoteFunction?

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:150
&gt; +    JSValue result = getWrappedValue(globalObject, targetGlobalObject, JSValue::decode(encodedValue));
&gt; +    RETURN_IF_EXCEPTION(scope, JSValue::encode(result));
&gt; +
&gt; +    scope.release();
&gt; +    return JSValue::encode(result);

Let&apos;s use

RELEASE_AND_RETURN(scope, JSValue::encode(getWrappedValue(globalObject, targetGlobalObject, JSValue::decode(encodedValue))));

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:167
&gt; +    JSValue result = getWrappedValue(globalObject, globalObject, JSValue::decode(encodedValue));
&gt; +    RETURN_IF_EXCEPTION(scope, JSValue::encode(result));
&gt; +    scope.release();
&gt; +    return JSValue::encode(result);

Let&apos;s use

RELEASE_AND_RETURN(scope, JSValue::encode(getWrappedValue(globalObject, globalObject, JSValue::decode(encodedValue))));

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:183
&gt; +    JSValue exceptionValue = scope.exception()-&gt;value();
&gt; +    scope.clearException();

Let&apos;s return if it is terminated exception.
So,

Exception* exception = scope.exception();
if (UNLIKELY(vm.isTerminationException(exception))) {
    scope.release();
    return { };
}
JSValue exceptionValue = exception-&gt;value()

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:186
&gt; +    scope.clearException();

Ditto.

Exception* toStringException = scope.exception();
if (ULIKELY(..._))
    ...

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:189
&gt; +        throwTypeError(globalObject, scope, exceptionString);

You can use

return throwVMTypeError(...);

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:191
&gt; +        throwTypeError(globalObject, scope);

Ditto.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:193
&gt; +    return encodedJSValue();

So, this line is not necessary.

&gt; Source/JavaScriptCore/jit/JITOperations.h:98
&gt; +    Jrf: JSRemoteFunction*

We do not need this since CCallHelpers can automatically handle them. So this is not necessary :)

&gt; Source/JavaScriptCore/jit/JITOperations.h:151
&gt; +using J_JITOperation_JrfJ = EncodedJSValue(JIT_OPERATION_ATTRIBUTES *)(JSRemoteFunction*, EncodedJSValue);

Ditto.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1515
&gt; +    // For each argument (order should not be observable):
&gt; +    //     if the value is a Primitive, copy it into the new call frame arguments, otherwise
&gt; +    //     perform wrapping logic. If the wrapping logic results in a new JSRemoteFunction,
&gt; +    //     copy it into the new call frame&apos;s arguments, otherwise it must have thrown a TypeError.

In the current code, we are copying right-to-left.
Is it possible that operationGetWrappedValueForTarget&apos;s exception reveals this ordering?

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1517
&gt; +    jit.sub32(CCallHelpers::TrustedImm32(1), GPRInfo::regT1);
&gt; +    CCallHelpers::Jump done = jit.branchTest32(CCallHelpers::Zero, GPRInfo::regT1);

We can use branchSub32 here.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1544
&gt; +        jit.sub32(CCallHelpers::TrustedImm32(1), GPRInfo::regT1);
&gt; +        jit.branchTest32(CCallHelpers::NonZero, GPRInfo::regT1).linkTo(loop, &amp;jit);

We can use branchSub32 here.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1563
&gt; +#if ENABLE(ASSERT) &amp;&amp; !CPU(ARM64E)

Use ASSERT_ENABLED

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1574
&gt; +    // rethrow logic won&apos;t occur here. Need to set up an 

Looks like comment is trunced.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1579
&gt; +    JSValueRegs resultRegs(GPRInfo::regT0);

Let&apos;s use GPRInfo::returnValueGPR.

&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1614
&gt; +    targetFunctionException.link(&amp;jit);
&gt; +    jit.loadCell(CCallHelpers::addressFor(CallFrameSlot::callee), GPRInfo::regT2);
&gt; +    jit.setupArguments&lt;decltype(operationThrowRemoteFunctionException)&gt;(GPRInfo::regT2);
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);
&gt; +    // Fall through to jump to handler
&gt; +
&gt; +    exceptionChecks.link(&amp;jit);
&gt; +    jit.copyCalleeSavesToEntryFrameCalleeSavesBuffer(vm.topEntryFrame);
&gt; +    jit.setupArguments&lt;decltype(operationLookupExceptionHandler)&gt;(CCallHelpers::TrustedImmPtr(&amp;vm));
&gt; +    jit.prepareCallOperation(vm);
&gt; +    jit.move(CCallHelpers::TrustedImmPtr(tagCFunction&lt;OperationPtrTag&gt;(operationLookupExceptionHandler)), GPRInfo::nonArgGPR0);
&gt; +    emitPointerValidation(jit, GPRInfo::nonArgGPR0, OperationPtrTag);
&gt; +    jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);

Can we have a test using this path?

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:84
&gt; +    return static_cast&lt;bool&gt;(jsDynamicCast&lt;const JSRemoteFunction*&gt;(globalObject()-&gt;vm(), this));

You can use,

return inherits&lt;JSRemoteFunction&gt;(vm)

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:55
&gt; +        return JSValue(JSRemoteFunction::create(vm, targetGlobalObject, target));

JSValue(...) is not necessary.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:66
&gt; +    if (result.isEmpty())

We can use if (!result)

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:76
&gt; +    if (result.isEmpty())

Ditto.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:81
&gt; +JSC_DEFINE_HOST_FUNCTION(remoteJSFunctionCall, (JSGlobalObject* globalObject, CallFrame* callFrame))

Let&apos;s rename it to remoteFunctionCallForJSFunction to make it more explicit.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:87
&gt; +    JSFunction* target = remoteFunction-&gt;targetFunction();

Let&apos;s do,

JSFunction* target = jsCast&lt;JSFunction*&gt;(remoteFunction-&gt;targetFunction());

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:123
&gt; +JSC_DEFINE_HOST_FUNCTION(remoteFunctionCall, (JSGlobalObject* globalObject, CallFrame* callFrame))

Let&apos;s rename remoteFunctionCall to remoteFunctionCallGeneric to make it more explicit.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.h:56
&gt; +    JSCell* target() { return m_target.get(); }

Let&apos;s rename it to targetFunction().

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.h:57
&gt; +    JSFunction* targetFunction() { return static_cast&lt;JSFunction*&gt;(getJSFunction(target())); }

Let&apos;s drop it.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.h:76
&gt; +    WriteBarrier&lt;JSCell&gt; m_target;

Let&apos;s rename it to m_targetFunction to align it to JSBoundFunction.
And let&apos;s hold JSObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834171</commentid>
    <comment_count>9</comment_count>
      <attachid>450037</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-26 11:01:22 -0800</bug_when>
    <thetext>Created attachment 450037
Patch

Address Yusuke&apos;s comments. 32bit expected to still fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834172</commentid>
    <comment_count>10</comment_count>
      <attachid>449569</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-26 11:03:22 -0800</bug_when>
    <thetext>Comment on attachment 449569
Patch

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

&gt;&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1574
&gt;&gt; +    // rethrow logic won&apos;t occur here. Need to set up an 
&gt; 
&gt; Looks like comment is trunced.

Oops. I mentioned this in the slack thread -- I think we need a way to get to this point from unwindGeneric(), because otherwise, exceptions thrown in a JS call will reach a different handler in unwindGeneric, similar to the problem on 32bit.

I&apos;ve fixed the comment:

// FIXME: if an exception is thrown within a JS call, we&apos;ll end up in an outer exception handler and the
// rethrow logic won&apos;t occur here. We will need to add some way to get here from unwindGeneric().

&gt;&gt; Source/JavaScriptCore/jit/ThunkGenerators.cpp:1614
&gt;&gt; +    jit.call(GPRInfo::nonArgGPR0, OperationPtrTag);
&gt; 
&gt; Can we have a test using this path?

this is reached by shadow-realm-import-value.js at different points (for example)

Adding a jit.print() this line gives me:

```
Tools/Scripts/run-jsc --jsc-only JSTests/stress/shadow-realm-import-value.js --use
ShadowRealm=1 --useDollarVM=1 --useLLInt=0
Running 1 time(s): DYLD_FRAMEWORK_PATH=/home/caitp/src/WebKit/WebKitBuild/Release/bin /home/caitp/src/WebKit/WebKitBuild/Release/bin/jsc --useDollarVM=1 JSTests/stress/shadow-realm-import-value.js --useShadowRealm=1 --useDollarVM=1 --useLLInt=0
remoteFunctionCallGenerator exceptionChecks
remoteFunctionCallGenerator exceptionChecks
remoteFunctionCallGenerator exceptionChecks
```

Unfortunately the targetFunctionException branch is not reachable, AFAICT (hence the FIXME)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834181</commentid>
    <comment_count>11</comment_count>
      <attachid>450037</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-26 11:18:41 -0800</bug_when>
    <thetext>Comment on attachment 450037
Patch

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

&gt; Source/JavaScriptCore/builtins/ShadowRealmPrototype.js:-60
&gt; -        delete wrapped[&apos;name&apos;];
&gt; -        delete wrapped[&apos;length&apos;];

IIRC, JSFunction&apos;s name and length properties are specially handled (see FunctionRareData etc.).
So, if we set setHasReifiedName / setHasReifiedLength appropriately (while not defining them in Structure), and if we configure JSFunction::hasReifiedName / JSFunction::hasReifiedLength to return true for this type of function (to avoid always allocating FunctionRareData),
then, I think we can achieve the goal.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:109
&gt; +    JSFunction* function = jsCast&lt;JSFunction*&gt;(getJSFunction(value));

jsCast is expecting that is it is always JSFunction*. Use `jsDynamicCast` instead.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:71
&gt; +static inline JSValue wraprReturnValue(JSGlobalObject* globalObject, JSGlobalObject* targetGlobalObject, JSValue value)

wraprReturnValue =&gt; wrapReturnValue

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:98
&gt; +        return encodedJSValue();

Use `{ }` in new code.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:114
&gt; +        return encodedJSValue();

Use `{ }` in new code.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:118
&gt; +    auto wrappedResult = wraprReturnValue(globalObject, globalObject, result);
&gt; +    RELEASE_AND_RETURN(scope, JSValue::encode(wrappedResult));

Let&apos;s release the scope before calling wraprReturnValue, so, change it to

RELEASE_AND_RETURN(scope, JSValue::encode(wraprReturnValue(globalObject, globalObject, result)))

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:137
&gt; +        return encodedJSValue();

Use `{ }` in new code.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:148
&gt; +        return encodedJSValue();

Use `{ }` in new code.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:152
&gt; +    auto wrappedResult = wrapValue(targetGlobalObject, globalObject, result);
&gt; +    RELEASE_AND_RETURN(scope, JSValue::encode(wrappedResult));

Ditto. Change it to,

RELEASE_AND_RETURN(scope, JSValue::encode(wrapValue(targetGlobalObject, globalObject, result)));

to release the scope before calling wrapValue

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:179
&gt; +    auto result = JSRemoteFunction::create(vm, destinationGlobalObject, targetCallable);
&gt; +    RELEASE_AND_RETURN(scope, JSValue::encode(result));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834232</commentid>
    <comment_count>12</comment_count>
      <attachid>450055</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-26 12:20:03 -0800</bug_when>
    <thetext>Created attachment 450055
Patch

Address the latest comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834238</commentid>
    <comment_count>13</comment_count>
      <attachid>450055</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-26 12:35:00 -0800</bug_when>
    <thetext>Comment on attachment 450055
Patch

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

Clearing r? since it is not completed. You can upload a WIP patch without r? by using `--no-review` :)

&gt; Source/JavaScriptCore/builtins/ShadowRealmPrototype.js:-60
&gt; -        delete wrapped[&apos;name&apos;];
&gt; -        delete wrapped[&apos;length&apos;];

Ditto to the previous comment.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:82
&gt; +inline bool JSFunction::isRemoteFunction() const

Let&apos;s take VM&amp; as a parameter.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:107
&gt; +inline bool isRemoteFunction(JSValue value)

Let&apos;s take VM&amp;.

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:112
&gt; +    JSFunction* function = jsCast&lt;JSFunction*&gt;(getJSFunction(value));
&gt; +    if (!function)
&gt; +        return false;
&gt; +    return function-&gt;isRemoteFunction();

Let&apos;s write as follows. I don&apos;t think we need getJSFunction here. And let&apos;s take VM&amp;.

inline bool isRemoteFunction(VM&amp; vm, JSValue value)
{
    if (auto* function = jsDynamicCast&lt;JSFunction*&gt;(vm, value))
        return function-&gt;isRemoteFunction(vm);
    return false;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834276</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-26 13:55:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/88093995&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834292</commentid>
    <comment_count>15</comment_count>
      <attachid>450037</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-26 14:14:40 -0800</bug_when>
    <thetext>Comment on attachment 450037
Patch

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

&gt;&gt; Source/JavaScriptCore/builtins/ShadowRealmPrototype.js:-60
&gt;&gt; -        delete wrapped[&apos;length&apos;];
&gt; 
&gt; IIRC, JSFunction&apos;s name and length properties are specially handled (see FunctionRareData etc.).
&gt; So, if we set setHasReifiedName / setHasReifiedLength appropriately (while not defining them in Structure), and if we configure JSFunction::hasReifiedName / JSFunction::hasReifiedLength to return true for this type of function (to avoid always allocating FunctionRareData),
&gt; then, I think we can achieve the goal.

hmm, I did test this locally --- Object.hasOwn(wrapperFunction, &apos;name&apos;/&apos;length&apos;) returned false -- but i&apos;ll take another look I guess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834372</commentid>
    <comment_count>16</comment_count>
      <attachid>450037</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-26 17:27:53 -0800</bug_when>
    <thetext>Comment on attachment 450037
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/builtins/ShadowRealmPrototype.js:-60
&gt;&gt;&gt; -        delete wrapped[&apos;length&apos;];
&gt;&gt; 
&gt;&gt; IIRC, JSFunction&apos;s name and length properties are specially handled (see FunctionRareData etc.).
&gt;&gt; So, if we set setHasReifiedName / setHasReifiedLength appropriately (while not defining them in Structure), and if we configure JSFunction::hasReifiedName / JSFunction::hasReifiedLength to return true for this type of function (to avoid always allocating FunctionRareData),
&gt;&gt; then, I think we can achieve the goal.
&gt; 
&gt; hmm, I did test this locally --- Object.hasOwn(wrapperFunction, &apos;name&apos;/&apos;length&apos;) returned false -- but i&apos;ll take another look I guess

Ah, probably it works. Can you review the existing code to ensure this works?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835264</commentid>
    <comment_count>17</comment_count>
      <attachid>450320</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-28 23:35:32 -0800</bug_when>
    <thetext>Created attachment 450320
Patch

Handle rethrowing logic in Interpreter::unwind() --- the way the handler&apos;s callframe is determined is potentially broken, I&apos;ll write some tests for it on monday</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835270</commentid>
    <comment_count>18</comment_count>
      <attachid>450320</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-29 00:55:27 -0800</bug_when>
    <thetext>Comment on attachment 450320
Patch

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

Nice direction!

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:690
&gt; +        exceptionString = static_cast&lt;ErrorInstance*&gt;(exceptionValue.asCell())-&gt;sanitizedMessageString(globalObject);

Let&apos;s change `toWTFString` code in sanitizedMessageString as I suggested to avoid user-observable behavior.
Currently, if user puts `{ toString() { user-custom-code } }` to message property, then it becomes observable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835291</commentid>
    <comment_count>19</comment_count>
      <attachid>450320</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-29 09:10:46 -0800</bug_when>
    <thetext>Comment on attachment 450320
Patch

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

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:690
&gt;&gt; +        exceptionString = static_cast&lt;ErrorInstance*&gt;(exceptionValue.asCell())-&gt;sanitizedMessageString(globalObject);
&gt; 
&gt; Let&apos;s change `toWTFString` code in sanitizedMessageString as I suggested to avoid user-observable behavior.
&gt; Currently, if user puts `{ toString() { user-custom-code } }` to message property, then it becomes observable.

On monday I&apos;ll change it to bail if messageValue.isPrimitive() is false</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835665</commentid>
    <comment_count>20</comment_count>
      <attachid>450442</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-31 13:20:33 -0800</bug_when>
    <thetext>Created attachment 450442
Patch

Handle rethrowing logic in Interpreter::unwind() --- the way the handler&apos;s callframe is determined is potentially broken, I&apos;ll write some tests for it on monday</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835673</commentid>
    <comment_count>21</comment_count>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-31 13:23:40 -0800</bug_when>
    <thetext>(In reply to Caitlin Potter (:caitp) from comment #20)
&gt; Created attachment 450442 [details]
&gt; Patch
&gt; 
&gt; Handle rethrowing logic in Interpreter::unwind() --- the way the handler&apos;s
&gt; callframe is determined is potentially broken, I&apos;ll write some tests for it
&gt; on monday

s/that comment/&quot;&quot;&quot;
Add CopyNameAndLength logic, update tests, and fix up ErrorInstance::sanitizedMessageString to only attempt to stringify a primitive value, avoiding potential observable side effects.
&quot;&quot;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835689</commentid>
    <comment_count>22</comment_count>
      <attachid>450442</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-31 13:39:57 -0800</bug_when>
    <thetext>Comment on attachment 450442
Patch

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

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:163
&gt; +JSC_DEFINE_JIT_OPERATION(operationThrowRemoteFunctionException, EncodedJSValue, (JSRemoteFunction* callee))

TODO: delete this, since it isn&apos;t used

&gt; Source/JavaScriptCore/jit/JITOperations.h:161
&gt; +JSC_DECLARE_JIT_OPERATION(operationThrowRemoteFunctionException, EncodedJSValue, (JSRemoteFunction*));

ditto

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:630
&gt; +    if ((isHostOrBuiltinFunction() &amp;&amp; !this-&gt;inherits&lt;JSBoundFunction&gt;(vm)))

TODO: unchange this

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:706
&gt; +        unsigned initialAttributes = PropertyAttribute::DontEnum | PropertyAttribute::ReadOnly;

The proposal text today says we should have a &quot;wrapped &quot; prefix, but per https://github.com/tc39/proposal-shadowrealm/pull/348 I haven&apos;t added it to this change.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:212
&gt; +        m_length = std::max(targetLengthAsInt, 0.0);

Does not quite match the steps in the proposal as of Jan 31, performing the toIntegerOrInfinity even if targetLength is already a Number. This is because SetFunctionLength in the spec expects a non-negative integer or Infinity. AFAICT, The spec as-written today would be perfectly happy with a length of -57, or 3.14, but this doesn&apos;t really make any sense and I don&apos;t like that it&apos;s different from other cases.

The proposal text is copied from the existing Function.bind text, which is presumably written the way it is for interop, however as far as I can tell, the most popular browser does not implement it the way it&apos;s written. A simple test case:

```
function f() {}
Object.defineProperty(f, &quot;length&quot;, { value: { valueOf() { return 3.14; } } });
let bound = f.bind();

f.length === 0; // I would expect f.length to be 3 per ToIntegerOrInfinity()
```

so the behaviour I&apos;ve implemented makes more sense to me, and is more consistent --- but I think the thing to do is match what we&apos;re doing currently for bound functions, and that&apos;ll be the end of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835702</commentid>
    <comment_count>23</comment_count>
      <attachid>450442</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-31 13:57:31 -0800</bug_when>
    <thetext>Comment on attachment 450442
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.cpp:212
&gt;&gt; +        m_length = std::max(targetLengthAsInt, 0.0);
&gt; 
&gt; Does not quite match the steps in the proposal as of Jan 31, performing the toIntegerOrInfinity even if targetLength is already a Number. This is because SetFunctionLength in the spec expects a non-negative integer or Infinity. AFAICT, The spec as-written today would be perfectly happy with a length of -57, or 3.14, but this doesn&apos;t really make any sense and I don&apos;t like that it&apos;s different from other cases.
&gt; 
&gt; The proposal text is copied from the existing Function.bind text, which is presumably written the way it is for interop, however as far as I can tell, the most popular browser does not implement it the way it&apos;s written. A simple test case:
&gt; 
&gt; ```
&gt; function f() {}
&gt; Object.defineProperty(f, &quot;length&quot;, { value: { valueOf() { return 3.14; } } });
&gt; let bound = f.bind();
&gt; 
&gt; f.length === 0; // I would expect f.length to be 3 per ToIntegerOrInfinity()
&gt; ```
&gt; 
&gt; so the behaviour I&apos;ve implemented makes more sense to me, and is more consistent --- but I think the thing to do is match what we&apos;re doing currently for bound functions, and that&apos;ll be the end of it.

I may have been misreading the spec a bit. Going to change this to match what we already do, which should be interoperable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1835730</commentid>
    <comment_count>24</comment_count>
      <attachid>450467</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-01-31 14:35:13 -0800</bug_when>
    <thetext>Created attachment 450467
Patch

rename JSRemoteFunction::create() to tryCreate() to hint that it may fail, delete unused code, and try to match Function.bind() function length logic better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837522</commentid>
    <comment_count>25</comment_count>
      <attachid>450922</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-02-04 11:28:43 -0800</bug_when>
    <thetext>Created attachment 450922
patch-for-review

patch-for-review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1837769</commentid>
    <comment_count>26</comment_count>
      <attachid>450922</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-02-05 11:13:15 -0800</bug_when>
    <thetext>Comment on attachment 450922
patch-for-review

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

r=me, can you grep source with `&lt;JSBoundFunction` to ensure that these places are also considered for JSRemoteFunction too?

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:699
&gt; +
&gt; +    auto scope = DECLARE_THROW_SCOPE(vm);
&gt; +    ASSERT(exception);
&gt; +    ASSERT(!vm.isTerminationException(exception));
&gt; +
&gt; +    JSGlobalObject* globalObject = handlerCallFrame-&gt;jsCallee()-&gt;globalObject();
&gt; +    JSValue exceptionValue = exception-&gt;value();
&gt; +    scope.clearException();
&gt; +
&gt; +    // Avoid user-observable ToString()
&gt; +    String exceptionString;
&gt; +    if (exceptionValue.isPrimitive())
&gt; +        exceptionString = exceptionValue.toWTFString(globalObject);
&gt; +    else if (exceptionValue.asCell()-&gt;inherits&lt;ErrorInstance&gt;(vm))
&gt; +        exceptionString = static_cast&lt;ErrorInstance*&gt;(exceptionValue.asCell())-&gt;sanitizedMessageString(globalObject);
&gt; +
&gt; +    ASSERT(!scope.exception()); // We must not have entered JS at this point
&gt; +
&gt; +    if (exceptionString.length()) {
&gt; +        throwVMTypeError(globalObject, scope, exceptionString);
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    throwVMTypeError(globalObject, scope);

Let&apos;s use DeferTermination in this scope (before DECLARE_THROW_SCOPE).
If you create DECLARE_THROW_SCOPE, then it is possible that you will get termination exception (since it can be set from the concurrent thread. Main usage of that is terminating a worker thread&apos;s JS VM).
DeferTermination can defer the handling of termination exception. I think this is good. Since, if we get termination exception here (since sanitizedMessageString uses DECLARE_THROW_SCOPE), we need to re-unwind the stack since termination exception must not be caught by user&apos;s handler, which complicate the code too much, while it does not offer much good thing (DeferTermination just defers it. Next time we use DECLARE_THROW_SCOPE etc. then we get termination exception so it will be super quickly handled).

&gt; Source/JavaScriptCore/runtime/ErrorInstance.cpp:166
&gt; +    if (!messageValue || !messageValue.isPrimitive())

Let&apos;s put this check too on sanitizedNameString

&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:630
&gt; +    if ((isHostOrBuiltinFunction() &amp;&amp; !this-&gt;inherits&lt;JSBoundFunction&gt;(vm)))

It looks like it is adding an unnecessary parentheses. Should we need to add JSRemoteFunction handling here?
Anyway, can we remove this parentheses since it is not necessary?

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:28
&gt;  #include &quot;FunctionExecutable.h&quot;

In this file, do we need to handle asStringConcurrently for JSRemoteFunction?

&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:111
&gt; +    if (auto* function = jsDynamicCast&lt;JSFunction*&gt;(vm, value))
&gt; +        return function-&gt;isRemoteFunction(vm);
&gt; +    return false;

Ah, sorry. You can just do,

return value.inherits&lt;JSRemoteFunction&gt;(vm)

and that&apos;s enough.

&gt; Source/JavaScriptCore/runtime/JSRemoteFunction.h:45
&gt; +    typedef JSFunction Base;

Use using for the new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838789</commentid>
    <comment_count>27</comment_count>
      <attachid>451283</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-02-08 11:28:54 -0800</bug_when>
    <thetext>Created attachment 451283
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838791</commentid>
    <comment_count>28</comment_count>
      <attachid>450922</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-02-08 11:30:07 -0800</bug_when>
    <thetext>Comment on attachment 450922
patch-for-review

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

&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:699
&gt;&gt; +    throwVMTypeError(globalObject, scope);
&gt; 
&gt; Let&apos;s use DeferTermination in this scope (before DECLARE_THROW_SCOPE).
&gt; If you create DECLARE_THROW_SCOPE, then it is possible that you will get termination exception (since it can be set from the concurrent thread. Main usage of that is terminating a worker thread&apos;s JS VM).
&gt; DeferTermination can defer the handling of termination exception. I think this is good. Since, if we get termination exception here (since sanitizedMessageString uses DECLARE_THROW_SCOPE), we need to re-unwind the stack since termination exception must not be caught by user&apos;s handler, which complicate the code too much, while it does not offer much good thing (DeferTermination just defers it. Next time we use DECLARE_THROW_SCOPE etc. then we get termination exception so it will be super quickly handled).

I&apos;ve added this. Are the fuzzers able to find issues like this?

&gt;&gt; Source/JavaScriptCore/runtime/JSFunction.cpp:630
&gt;&gt; +    if ((isHostOrBuiltinFunction() &amp;&amp; !this-&gt;inherits&lt;JSBoundFunction&gt;(vm)))
&gt; 
&gt; It looks like it is adding an unnecessary parentheses. Should we need to add JSRemoteFunction handling here?
&gt; Anyway, can we remove this parentheses since it is not necessary?

yep fixed

&gt;&gt; Source/JavaScriptCore/runtime/JSFunctionInlines.h:28
&gt;&gt;  #include &quot;FunctionExecutable.h&quot;
&gt; 
&gt; In this file, do we need to handle asStringConcurrently for JSRemoteFunction?

I think I&apos;ve matched the JSBoundFunction behaviour in the latest patch (return nullptr from asStringConcurrently, and use similar logic in JSFunction::toString() -- Hopefully that&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838800</commentid>
    <comment_count>29</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-08 11:34:30 -0800</bug_when>
    <thetext>ChangeLog entry in JSTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838806</commentid>
    <comment_count>30</comment_count>
      <attachid>451285</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-02-08 11:38:21 -0800</bug_when>
    <thetext>Created attachment 451285
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838808</commentid>
    <comment_count>31</comment_count>
      <attachid>451286</attachid>
    <who name="Caitlin Potter (:caitp)">caitp</who>
    <bug_when>2022-02-08 11:38:51 -0800</bug_when>
    <thetext>Created attachment 451286
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838810</commentid>
    <comment_count>32</comment_count>
      <attachid>450922</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-02-08 11:40:12 -0800</bug_when>
    <thetext>Comment on attachment 450922
patch-for-review

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

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:692
&gt; +    ASSERT(!scope.exception()); // We must not have entered JS at this point

scope creation can potentially allow throwing a termination exception.
So, it is possible that we have termination exception here.
Let&apos;s keep it if it is.

&gt;&gt;&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:699
&gt;&gt;&gt; +    throwVMTypeError(globalObject, scope);
&gt;&gt; 
&gt;&gt; Let&apos;s use DeferTermination in this scope (before DECLARE_THROW_SCOPE).
&gt;&gt; If you create DECLARE_THROW_SCOPE, then it is possible that you will get termination exception (since it can be set from the concurrent thread. Main usage of that is terminating a worker thread&apos;s JS VM).
&gt;&gt; DeferTermination can defer the handling of termination exception. I think this is good. Since, if we get termination exception here (since sanitizedMessageString uses DECLARE_THROW_SCOPE), we need to re-unwind the stack since termination exception must not be caught by user&apos;s handler, which complicate the code too much, while it does not offer much good thing (DeferTermination just defers it. Next time we use DECLARE_THROW_SCOPE etc. then we get termination exception so it will be super quickly handled).
&gt; 
&gt; I&apos;ve added this. Are the fuzzers able to find issues like this?

Yes, our fuzzer is attaching --watchdog=xxx sometimes, which causes termination exception in JSC shell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1838835</commentid>
    <comment_count>33</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-08 12:43:17 -0800</bug_when>
    <thetext>Committed r289417 (246980@main): &lt;https://commits.webkit.org/246980@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 451286.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449517</attachid>
            <date>2022-01-19 14:07:48 -0800</date>
            <delta_ts>2022-01-19 15:28:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220119220747.patch</filename>
            <type>text/plain</type>
            <size>54334</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZWQyM2JmNjQ2OTE3N2I5OTU0ZGFmMTY2MGIyOTA5OGU0NTkyYmQxLi5jODMyYzUyYzNiZTU2NzJl
MTE0ZDFkNDdiNTI2NTQ5YWQ5MmVmZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0xOSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gdGhpcyBpbml0aWFsIHBhdGNoLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZiBKUy1i
dWlsdGluIG1hY2hpbmVyeSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgZHVwbGljYXRlZCBmdW5j
dGlvbmFsaXR5LiBBZGRpdGlvbmFsbHksIEpJVCBzdXBwb3J0CisgICAgICAgIGhhcyBub3QgYmVl
biBpbmNvcnBvcmF0ZWQgeWV0LgorCisgICAgICAgIEJyb2FkbHksIHRoZSBpZGVhIGlzIHRoYXQg
dGhlcmUgYXJlIGN1c3RvbSBob29rcyBmb3IgY2FsbGluZyBhCisgICAgICAgIEpTUmVtb3RlRnVu
Y3Rpb24sIHdoaWNoIHBlcmZvcm0gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYXZv
aWRzCisgICAgICAgIHRoZSBuZWVkIGZvciBhbGxvY2F0aW5nIGNsb3N1cmVzIHdoaWNoIGNvbnRh
aW4gdGhlIHdyYXBwaW5nIGxvZ2ljLgorCisgICAgICAgIFRPRE86CisgICAgICAgIC0gSklUL0RG
Ry9GVEwgc3VwcG9ydAorICAgICAgICAtIHN0cnVjdHVyZSBjYWNoaW5nICh1bm5lY2Vzc2FyeSBz
aW5jZSB0aGVzZSBhcmUgbm90IGNvbnN0cnVjdG9ycz8pCisgICAgICAgIC0gaW1wcm92ZWQgYmFz
ZWxpbmUgcGVyZgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBidWls
dGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlucy9TaGFkb3dSZWFsbVByb3Rv
dHlwZS5qczoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRDb21tb24uaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZpeCBZYXJySklUIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5IGJyZWFrcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBiOTg3MTIxNzVjOWE3ZDllNDQzN2ZmMzU3MjlhODRjNDFlZThjNjRm
Li4yMTQ3MjRmMDhlOTc3YjA2YTNlZjgzZTc2NWZhMzQ2M2FiZmQzYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYgKzEwODEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBy
dW50aW1lL0pTUHJveHkuaAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRl
eCA3YTBlYmZlNjk4MWQzOTAxOTc0ZDIzYTFiNjFlMTgwNWZmY2UxZDg0Li4zYTYxYThmOTk2Y2Y2
MDljMjcyNDFkNmE2OTU2ZjE1NTI1OGQyNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CkBAIC04OTksNiArODk5LDcgQEAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKIHJ1
bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwCiBydW50aW1lL0pTUHJveHkuY3BwCitydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24u
Y3BwCiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAogcnVudGltZS9KU1Njb3BlLmNwcAogcnVu
dGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCmluZGV4IDI4NWRmMGQxYTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZl
ZTAwZTAuLjE4NWFhMzFmNjFkOTA0NzVjOTdhZjBhMWJiMjYzZjdiMGE5YWZhNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCkBAIC05Miw2ICs5Miw3
IEBAIHB1YmxpYzoKICAgICB2KERGR1RodW5rKSBcCiAgICAgdihGVExUaHVuaykgXAogICAgIHYo
Qm91bmRGdW5jdGlvblRodW5rKSBcCisgICAgdihSZW1vdGVGdW5jdGlvblRodW5rKSBcCiAgICAg
dihTcGVjaWFsaXplZFRodW5rKSBcCiAgICAgdihWaXJ0dWFsVGh1bmspIFwKICAgICB2KFdhc21U
aHVuaykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5o
CmluZGV4IDgwYTg3ZWIwMDdhOWQzOGM3MTU0Mjg5NjU4Zjg4MTM4NDZiYzg4OGQuLmEwNTI1NzQ4
NzZmYTE0OGFjOTgzYmM0MTcxZjQxNTVhNzBkM2YwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4OSw2ICsxODksOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAogICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikgXAogICAgIG1hY3JvKHNlbnRpbmVsU3RyaW5n
KSBcCisgICAgbWFjcm8oY3JlYXRlUmVtb3RlRnVuY3Rpb24pIFwKKyAgICBtYWNybyhpc1JlbW90
ZUZ1bmN0aW9uKSBcCiAKIAogbmFtZXNwYWNlIFN5bWJvbHMgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCmluZGV4IDhk
ODkwNjg4ZDdhN2QxNzNhZmRiZjRmMDEyODE1M2E2YmU5YTRjNGIuLjIyOTQ3MWI4NTA3NjgwM2Ix
M2U1YzJlNGUyZDQwNzVkOTU1OWQ2ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKQEAgLTMyLDMwICszMiw3IEBA
IGZ1bmN0aW9uIHdyYXAoZnJvbVNoYWRvd1JlYWxtLCBzaGFkb3dSZWFsbSwgdGFyZ2V0KQogICAg
ICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmIChAaXNDYWxsYWJsZSh0YXJnZXQpKSB7Ci0gICAgICAg
IHZhciB3cmFwcGVkID0gZnVuY3Rpb24oLyogYXJncy4uLiAqLykgewotICAgICAgICAgICAgdmFy
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgd3JhcHBlZEFyZ3Mg
PSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh2YXIgaW5kZXgg
PSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRo
YXQgZm9yIGFyZ3VtZW50cywgd2UgZmxpcCBgZnJvbVNoYWRvd1JlYWxtYCBzaW5jZSB0bwotICAg
ICAgICAgICAgICAgIC8vIHdyYXAgYSBmdW5jdGlvbiBmcm9tIHJlYWxtIEEgdG8gd29yayBpbiBy
ZWFsbSBCLCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgLy8gd3JhcCB0aGUgYXJndW1lbnRz
IChmcm9tIHJlYWxtIEIpIHRvIHdvcmsgaW4gcmVhbG0gQSBiZWZvcmUKLSAgICAgICAgICAgICAg
ICAvLyBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgQHB1dEJ5
VmFsRGlyZWN0KHdyYXBwZWRBcmdzLCBpbmRleCwgQHdyYXAoIWZyb21TaGFkb3dSZWFsbSwgc2hh
ZG93UmVhbG0sIGFyZ3VtZW50c1tpbmRleF0pKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LkBhcHBseShAdW5kZWZpbmVkLCB3cmFwcGVk
QXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
bXNnID0gIndyYXBwZWQgZnVuY3Rpb24gdGhyZXc6ICIgKyBlLnRvU3RyaW5nKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGZyb21TaGFkb3dSZWFsbSkKLSAgICAgICAgICAgICAgICAgICAgQHRocm93
VHlwZUVycm9yKG1zZyk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG1rVHlwZUVycm9yID0gQGV2YWxJblJlYWxtKHNoYWRvd1JlYWxtLCAiKG1zZykg
PT4gbmV3IFR5cGVFcnJvcihtc2cpIik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9
IG1rVHlwZUVycm9yLkBhcHBseShtc2cpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEB3
cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHJlc3VsdCk7Ci0gICAgICAgIH07Cisg
ICAgICAgIHZhciB3cmFwcGVkID0gQGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKHRhcmdldCwgZnJvbVNo
YWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxtKTsKICAgICAgICAgZGVsZXRlIHdyYXBwZWRb
J25hbWUnXTsKICAgICAgICAgZGVsZXRlIHdyYXBwZWRbJ2xlbmd0aCddOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaAppbmRleCBlNjZl
OGZkYjE2YWYwZjY4OWYwYWJlYTQ4MGFlY2I0NTJhYzhiOWYxLi5kZjk5NDJmMjEyNTNiMDgyNmQz
YTdkOTAwNDg4ZjZkY2JkZDI3OWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKQEAgLTExNyw2ICsxMTcsOCBAQCBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKICAgICB2KGNyZWF0ZVByaXZhdGVTeW1ib2wsIG51bGxwdHIpIFwKICAgICB2
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvciwgbnVsbHB0cikgXAogICAgIHYoc2VudGluZWxT
dHJpbmcsIG51bGxwdHIpIFwKKyAgICB2KGNyZWF0ZVJlbW90ZUZ1bmN0aW9uLCBudWxscHRyKSBc
CisgICAgdihpc1JlbW90ZUZ1bmN0aW9uLCBudWxscHRyKSBcCiAKIAogI2RlZmluZSBERUNMQVJF
X0xJTktfVElNRV9DT05TVEFOVChuYW1lLCBjb2RlKSBuYW1lLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAppbmRleCAwYzhkMzU1OTYwNGFlZDBiMzM4YzRkOTc3YTNkNjA5N2Q5MmNlZDYz
Li42Yjg2NTQyMjg0YTA0ZDEzMzIxOGM5ZjNlYWQ4NTJlMGQ2MjYyZmVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJS
b3V0aW5lU2V0LmgiCiAjaW5jbHVkZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNGaW5hbGl6YXRpb25SZWdpc3RyeS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU1dlYWtN
YXAuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RSZWYuaCIKQEAgLTMyMTgsNiArMzIxOSw3IEBA
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhtb2R1bGVOYW1lc3BhY2VP
YmplY3RTcGFjZSwgbW9kdWxlTmFtZXNwCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSX1NMT1cobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSwgbmF0aXZlU3RkRnVuY3Rpb25IZWFwQ2Vs
bFR5cGUsIEpTTmF0aXZlU3RkRnVuY3Rpb24pIC8vIEhhc2g6MHg3MGVkNjFlNAogRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHByb3h5T2JqZWN0U3BhY2UsIGNlbGxIZWFw
Q2VsbFR5cGUsIFByb3h5T2JqZWN0KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
Ul9TTE9XKHByb3h5UmV2b2tlU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFByb3h5UmV2b2tlKSAv
LyBIYXNoOjB4YjUwNmE5MzkKK0RZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhyZW1vdGVGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBKU1JlbW90ZUZ1bmN0aW9u
KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjb3BlZEFyZ3VtZW50
c1RhYmxlU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZl
dGNoUGFyYW1ldGVyc1NwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1Njcmlw
dEZldGNoUGFyYW1ldGVycykKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
VyhzY3JpcHRGZXRjaGVyU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEpTU2Ny
aXB0RmV0Y2hlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCA0ZGU4MmViODc0OTRj
Yzc5MDZhMzZlYzk1ODI5NjU1ZmQxYmNkODBiLi5hYmJkY2JmYmVmMjhhMGQzNTVmZWNmOTE3NjRh
NTUwYjlhZjNkNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC05MjIsNiArOTIy
LDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0
aXZlU3RkRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHByb3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VC
U1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIzZTA4NzE4ZGJm
ODIwNDIzNWUzOTlhYTY1Y2IwZDk5MDgyOTcxZTAuLjc1Zjg5MDNkZmI3N2UxMDZhNWJkOGY1OGEx
NTBkYzZjNjJmNDYyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaApAQCAtMTM0NSw2ICsxMzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaml0QXNzZXJ0
SXNOdWxsKEdQUlJlZyk7CiAgICAgdm9pZCBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIHZv
aWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKKyAgICBpbmxpbmUgdm9pZCBqaXRBc3Nl
cnROb0V4Y2VwdGlvbihWTSYgdm0pIHsgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKHZtKTsg
fQogI2Vsc2UKICAgICB2b2lkIGppdEFzc2VydElzSW50MzIoR1BSUmVnKSB7IH0KICAgICB2b2lk
IGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHsgfQpAQCAtMTM1NSw2ICsxMzU2LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgaml0QXNzZXJ0SXNOdWxsKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRB
c3NlcnRUYWdzSW5QbGFjZSgpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNh
bmUoKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydE5vRXhjZXB0aW9uKFZNJikgeyB9CiAjZW5kaWYK
IAogICAgIHZvaWQgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAxZGQ3YjczYzYxNjc5NjI3
ZjMwMmQ5MTQyMmY1YmMzN2YyMTRlNGIwLi5kMjBlZDA3NzAwOTBmM2Q3NTExODNiNGRiOTIxNjI2
NzRmYmEzY2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
aXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgpAQCAtMTE1LDYgKzExNiw4MyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChK
U0dsbwogICAgIEFTU0VSVCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKK3N0YXRp
YyBKU1ZhbHVlIGdldFdyYXBwZWRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdmFsdWUpOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFi
bGUodm0pKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTUmVtb3RlRnVuY3Rp
b246OmNyZWF0ZSh2bSwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB2YWx1ZS5hc0NlbGwoKSkpOworCisg
ICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0
d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdl
dFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9u
KiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkpCit7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVGdW5jdGlvbihj
YWxsZWUpKTsKKworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSBjYWxsZWUtPnRhcmdldEZ1
bmN0aW9uKCktPmdsb2JhbE9iamVjdCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0V3JhcHBl
ZFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCkpOworCisgICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1
bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkpCit7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVGdW5j
dGlvbihjYWxsZWUpKTsKKworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCkpOworICAgIHNjb3Bl
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0
aW9uLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSkpCit7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVG
dW5jdGlvbihjYWxsZWUpKTsKKworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAvLyBXZSBzaG91bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFu
IGV4Y2VwdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmcgPSBl
eGNlcHRpb25WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKQorICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25TdHJpbmcpOwor
ICAgIGVsc2UKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisK
KyAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgdm9pZCwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggNGI1
ZDAxMWY5MDZhMzAzMmUyYTViODUwYTNhMGI5YTRjNjgzNGJmMy4uYmI1MTZmZmYxOWE4MWMzZmFk
ODA2NmFjOGM0OWU5NDZlN2ZhOWRhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIEpT
R2xvYmFsT2JqZWN0OwogY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQ7CiBjbGFzcyBKU09iamVj
dDsKK2NsYXNzIEpTUmVtb3RlRnVuY3Rpb247CiBjbGFzcyBKU1Njb3BlOwogY2xhc3MgSlNTdHJp
bmc7CiBjbGFzcyBKU1ZhbHVlOwpAQCAtOTQsNiArOTUsNyBAQCB0eXBlZGVmIGNoYXIqIFVudXNl
ZFB0cjsKICAgICBKY3A6IGNvbnN0IEpTVmFsdWUqCiAgICAgSnNjOiBKU1Njb3BlKgogICAgIEpz
ZjogSlNGdW5jdGlvbioKKyAgICBKcmY6IEpTUmVtb3RlRnVuY3Rpb24qCiAgICAgSnNzOiBKU1N0
cmluZyoKICAgICBMOiBKU0xleGljYWxFbnZpcm9ubWVudCoKICAgICBPOiBKU09iamVjdCoKQEAg
LTE0Niw2ICsxNDgsNyBAQCB1c2luZyBWX0pJVE9wZXJhdGlvbl9HQ0NKID0gdm9pZChKSVRfT1BF
UkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBKUwogdXNpbmcgSl9KSVRPcGVy
YXRpb25fR1NzaUpJID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICop
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5p
cXVlZFN0cmluZ0ltcGwqKTsKIHVzaW5nIFpfSklUT3BlcmF0aW9uX0dKWlogPSBpbnQzMl90KEpJ
VF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90LCBpbnQzMl90KTsKIHVzaW5nIEZfSklUT3BlcmF0aW9uX0dGSlpaID0gQ2FsbEZy
YW1lKihKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7Cit1c2luZyBKX0pJVE9wZXJh
dGlvbl9KcmZKID0gRW5jb2RlZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpT
UmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1ZSk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gbG9va3VwIGFuIGV4Y2VwdGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24s
IHdoaWNoIGlzCiAvLyB0aGUgcmV0dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBv
dXQgdG8gb25lIG9mIHRoZSBoZWxwZXIgb3BlcmF0aW9ucyBhYm92ZS4KQEAgLTE1NSw2ICsxNTgs
OSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhh
bmRsZXJGcm9tQ2FsbGVyRnJhbWUsIHZvaWQsCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lk
LCAoSlNHbG9iYWxPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0Kikp
OworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JD
YWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVl
KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZv
clRhcmdldCwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFs
dWUpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5j
dGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKikpOwogCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
LCB2b2lkLCAoQ29kZUJsb2NrKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25DYWxsQXJpdHlDaGVjaywgaW50MzJfdCwgKEpTR2xvYmFsT2JqZWN0KikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGM2NTcxYTZjYjU3
ZTgyNGRjYzllMWNhMjM1ZTRkYmRlYTMwOTMzYjAuLjAzYzBjYTM3ODNiMmFlOGNmZWU2Yzg2MWRk
OWM3NDQ2MWE3MDFmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAj
aW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTcGVj
aWFsaXplZFRodW5rSklULmgiCkBAIC0xNDIyLDYgKzE0MjMsMjA0IEBAIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZt
KQogICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5r
IGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQogCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KKyAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBl
cnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3Jl
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFnRm9yKENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICB1bnNpZ25l
ZCBleHRyYVN0YWNrTmVlZGVkID0gMDsKKyAgICBpZiAodW5zaWduZWQgc3RhY2tNaXNhbGlnbm1l
bnQgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5dGVzKCkpCisg
ICAgICAgIGV4dHJhU3RhY2tOZWVkZWQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSBzdGFja01p
c2FsaWdubWVudDsKKworICAgIC8vIFdlIG5lZWQgdG8gZm9yd2FyZCBhbGwgb2YgdGhlIGFyZ3Vt
ZW50cyB0aGF0IHdlIHdlcmUgcGFzc2VkLiBXZSBhcmVuJ3QgYWxsb3dlZCB0byBkbyBhIHRhaWwK
KyAgICAvLyBjYWxsIGhlcmUgYXMgZmFyIGFzIEkgY2FuIHRlbGwuIEF0IGxlYXN0IG5vdCBzbyBs
b25nIGFzIHRoZSBnZW5lcmljIHBhdGggZG9lc24ndCBkbyBhIHRhaWwKKyAgICAvLyBjYWxsLCBz
aW5jZSB0aGF0IHdvdWxkIGJlIHdheSB0b28gd2VpcmQuCisKKyAgICAvLyBUaGUgZm9ybXVsYSBm
b3IgdGhlIG51bWJlciBvZiBzdGFjayBieXRlcyBuZWVkZWQgZ2l2ZW4gc29tZSBudW1iZXIgb2Yg
cGFyYW1ldGVycyAoaW5jbHVkaW5nCisgICAgLy8gdGhpcykgaXM6CisgICAgLy8KKyAgICAvLyAg
ICAgc3RhY2tBbGlnbigobnVtUGFyYW1zICsgbnVtRnJhbWVMb2NhbHMgKyBDYWxsRnJhbWVIZWFk
ZXJTaXplKSAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpCisg
ICAgLy8KKyAgICAvLyBQcm9iYWJseSB3ZSB3YW50IHRvIHdyaXRlIHRoaXMgYXM6CisgICAgLy8K
KyAgICAvLyAgICAgc3RhY2tBbGlnbigobnVtUGFyYW1zICsgbnVtRnJhbWVMb2NhbHMgKyAoQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSAtIENhbGxlckZyYW1lQW5kUENTaXplKSkgKiBzaXplb2YoUmVnaXN0
ZXIpKQorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG51bUZyYW1lTG9jYWxzID0gMTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbG9vcEluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCk7CisK
KyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6
cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEdQ
UkluZm86OnJlZ1QxKTsKKworICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNp
emVJblJlZ2lzdGVycyArIG51bUZyYW1lTG9jYWxzKSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QyKTsKKyAgICBqaXQubHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyks
IEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQu
YW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50Qnl0ZXMoKSks
IEdQUkluZm86OnJlZ1QyKTsKKworICAgIGlmIChleHRyYVN0YWNrTmVlZGVkKQorICAgICAgICBq
aXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFja05lZWRlZCksIEdQ
UkluZm86OnJlZ1QyKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQgcmVnVDEgaGFzIHRoZSBhY3R1
YWwgYXJndW1lbnQgY291bnQsIGFuZCByZWdUMiBoYXMgdGhlIGFtb3VudCBvZiBzdGFjayB3ZSB3
aWxsIG5lZWQuCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIHN0YWNrIHNw
YWNlLgorCisgICAgaml0Lm5lZ1B0cihHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZFB0cihD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1NwYWNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhl
bHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRk
cmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIFRocm93
IFN0YWNrIE92ZXJmbG93IGV4Y2VwdGlvbgorICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQm91bmRGdW5jdGlvbjo6
b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LnNldHVwQXJn
dW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5r
KT4oR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Cisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVy
YXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9u
SGFuZGxlcih2bSk7CisKKyAgICBoYXZlU3RhY2tTcGFjZS5saW5rKCZqaXQpOworICAgIGppdC5t
b3ZlKEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KworICAgIC8vIFNldCBgdGhpc2AgdG8gdW5kZWZpbmVkCisgICAgLy8gTk9URTogbmVlZHMgY29u
Y2Vuc3VzIGluIFRDMzkgKGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3Jl
YWxtL2lzc3Vlcy8zMjgpCisgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVs
cGVyczo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5zdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgp
LCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7CisKKyAgICBKU1ZhbHVlUmVn
cyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6
cmVnVDQsIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIEJlZm9yZSBwcm9jZXNzaW5nIHRoZSBh
cmd1bWVudHMgbG9vcCwgY2hlY2sgdGhhdCB3ZSBoYXZlIGdlbmVyYXRlZCBKSVQgY29kZSBmb3Ig
Y2FsbGluZworICAgIC8vIHRvIGF2b2lkIHByb2Nlc3NpbmcgdGhlIGxvb3AgdHdpY2UgaW4gdGhl
IHNsb3cgY2FzZS4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9Db2RlOworICAgIHsKKyAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1Jl
bW90ZUZ1bmN0aW9uOjpvZmZzZXRPZlRhcmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxw
ZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNG
dW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
ICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoCisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBu
b0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJl
Z1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNr
czsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAvLyBGb3IgZWFjaCBh
cmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAgICAvLyAgICAgaWYg
dGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1l
IGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3JhcHBpbmcgbG9naWMu
IElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVtb3RlRnVuY3Rpb24s
CisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUncyBhcmd1bWVudHMs
IG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgorICAgIGppdC5zdWIz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIEND
YWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olpl
cm8sIEdQUkluZm86OnJlZ1QxKTsKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwg
bG9vcCA9IGppdC5sYWJlbCgpOworICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmlu
ZGV4ZWRCeShHUFJJbmZvOjpyZWdUMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVS
ZWdzKTsKKworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7
CisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFs
dWVSZWdzKSk7CisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5v
dE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnJlZ1QxLCBqaXQuYWRkcmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpy
ZWdUMCwgdmFsdWVSZWdzKTsKKyAgICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsK
KyAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsK
KyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2
bSkpOworCisgICAgICAgIGppdC5zZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0
LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
LCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3Io
bG9vcEluZGV4KSwgR1BSSW5mbzo6cmVnVDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUu
bGluaygmaml0KTsKKyAgICAgICAgaml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBl
cnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCkpOworICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmJyYW5jaFRlc3Qz
MihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QxKS5saW5rVG8obG9vcCwgJmpp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgIH0KKworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVGdW5jdGlvbjo6
b2Zmc2V0T2ZUYXJnZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc3RvcmVDZWxsKEdQ
UkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90
OjpjYWxsZWUpKTsKKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVn
VDApOworICAgIGhhc0V4ZWN1dGFibGUubGluaygmaml0KTsKKworICAgIGppdC5sb2FkUHRyKAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdU
MCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVG
b3JDYWxsKSksCisgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKworICAgIC8vIEJhc2VkIG9uIHRo
ZSBjaGVjayBhYm92ZSwgd2Ugc2hvdWxkIGJlIGdvb2Qgd2l0aCB0aGlzLiBPbiBBUk02NCwgZW1p
dFBvaW50ZXJWYWxpZGF0aW9uIHdpbGwgZG8gdGhpcy4KKyNpZiBFTkFCTEUoQVNTRVJUKSAmJiAh
Q1BVKEFSTTY0RSkKKyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBjaGVja05vdE51
bGwgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGdwcik7CisgICAg
ICAgIGFib3J0V2l0aFJlYXNvbihUR0ludmFsaWRQb2ludGVyKTsKKyAgICAgICAgY2hlY2tOb3RO
dWxsLmxpbmsoKQorICAgIH0KKyNlbmRpZgorCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86
OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAvLyBGSVhNRTogaWYgYW4gZXhjZXB0aW9uIGlz
IHRocm93biB3aXRoaW4gYSBKUyBjYWxsLCB3ZSdsbCBlbmQgdXAgaW4gYW4gb3V0ZXIgZXhjZXB0
aW9uIGhhbmRsZXIgYW5kIHRoZQorICAgIC8vIHJldGhyb3cgbG9naWMgd29uJ3Qgb2NjdXIgaGVy
ZS4gTmVlZCB0byBzZXQgdXAgYW4gCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRhcmdldEZ1bmN0
aW9uRXhjZXB0aW9uID0gaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pOworCisgICAgLy8gV3Jh
cCByZXR1cm4gdmFsdWUKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MoR1BSSW5mbzo6cmVnVDApOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworI2Vu
ZGlmCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdElzUHJpbWl0aXZlOworICAg
IHJlc3VsdElzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHJlc3VsdFJlZ3Mp
KTsKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90T2JqZWN0KHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yQ2FsbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisKKyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVyKT4oR1BSSW5mbzo6cmVnVDIs
IHJlc3VsdFJlZ3MpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0
LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBleGNlcHRp
b25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CisKKyAgICByZXN1
bHRJc1ByaW1pdGl2ZS5saW5rKCZqaXQpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OworICAgIGppdC5yZXQoKTsKKworICAgIHRhcmdldEZ1bmN0aW9uRXhjZXB0aW9uLmxpbmsoJmpp
dCk7CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvblRocm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24pPihHUFJJbmZvOjpy
ZWdUMik7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQuY2FsbChH
UFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIC8vIEZhbGwgdGhyb3Vn
aCB0byBqdW1wIHRvIGhhbmRsZXIKKworICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOwor
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50
b3BFbnRyeUZyYW1lKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9u
TG9va3VwRXhjZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0p
KTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAg
IGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlv
blB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRy
VGFnKTsKKworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6UmVtb3RlRnVuY3Rpb25UaHVuayk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29k
ZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWls
Q2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisg
ICAgICAgIGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9y
IHJlbW90ZSBmdW5jdGlvbiBjYWxscyIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAppbmRleCBhOWZlZWVhOTI0YWUwMDc4ZDg0NTFlMTcyYzRjNDk0NWRmMWQ1ZWUxLi41
ODllNzAwNDY0M2EyMjUzNzI1YWYyYmI4ZjBmZjA1ZDMzMWU3YTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTgyLDYgKzgyLDggQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJik7
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNh
bGxHZW5lcmF0b3IoVk0mKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKKwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4
Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDhm
OGM1ZjM2OWQ2ZWE1MjA4ODE3OGI3Y2M4NWI3MjQ3NTE0NzRjYWYuLjA5OGQ1ZjVkNjRiYjdjZDE0
ZDM2ZWY0OTMyYjZiYzk1ZTNhMDY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0
OSw3IEBACiAjaW5jbHVkZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb25J
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xv
Y2suaCIKICNpbmNsdWRlICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCkBAIC0zNjYsNiArMzY3LDcg
QEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJFdmFsU2Ny
aXB0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR0Mp
Owogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJDbGVhcktl
cHRPYmplY3RzKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyR2xvYmFsT2JqZWN0Rm9yKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlvbik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3QpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlcG9ydCk7CkBA
IC02NDksNiArNjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxh
ciwgImdjIiwgZnVuY3Rpb25Eb2xsYXJHQywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJj
bGVhcktlcHRPYmplY3RzIiwgZnVuY3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzLCAwLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sIGRvbGxhciwgImdsb2JhbE9iamVjdEZvciIsIGZ1bmN0aW9uRG9sbGFyR2xv
YmFsT2JqZWN0Rm9yLCAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6
Ok5vbmUpKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImlzUmVtb3RlRnVuY3Rp
b24iLCBmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIDEsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICAKICAgICAgICAgZG9sbGFy
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJnbG9iYWwiKSwgZ2xv
YmFsVGhpcygpKTsKICAgICAgICAgZG9sbGFyLT5wdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIklzSFRNTEREQSIpLApAQCAtMjA4Myw2ICsyMDg2
LDE4IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdsb2JhbE9iamVj
dEZvciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RG9sbGFySXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9i
YWxPYmplY3QsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyJfcykpKTsKKworICAgIEpTVmFsdWUgYXJn
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihpc1JlbW90ZUZ1bmN0aW9uKGFyZykpKTsKK30KKwogSlNDX0RFRklORV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRy
aW5zaWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcApp
bmRleCBmZjVmMTkyNDY5MGY2MmY0OGM1MTM2NWI1MmU2YzU2M2I0ZTYyODlkLi5iODE3NTliY2E3
ZWE4ZDU0MmJjOTJkMTFmZjI4N2I1MGQ4MmYzNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKQEAgLTIwNSw2ICsyMDUsOCBAQCBjb25zdCBjaGFyKiBp
bnRyaW5zaWNOYW1lKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiAiSXNUeXBl
ZEFycmF5Vmlld0ludHJpbnNpYyI7CiAgICAgY2FzZSBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNp
YzoKICAgICAgICAgcmV0dXJuICJCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYyI7CisgICAgY2Fz
ZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiAiUmVtb3RlRnVu
Y3Rpb25DYWxsSW50cmluc2ljIjsKICAgICBjYXNlIEpTTWFwR2V0SW50cmluc2ljOgogICAgICAg
ICByZXR1cm4gIkpTTWFwR2V0SW50cmluc2ljIjsKICAgICBjYXNlIEpTTWFwSGFzSW50cmluc2lj
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAppbmRleCA4ZTY4ZTdl
NzRmYjc4Y2RiZDMzMjRjZmJmMGEyNWVkNmQyMGQ2ZDU4Li40YWUzNjUxYjU3NWUyMzE1OGJmNjg5
NjBiNmRjY2MwOWE1N2JhZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRy
aW5zaWMuaApAQCAtMTE4LDYgKzExOCw3IEBAIGVudW0gSW50cmluc2ljIDogdWludDhfdCB7CiAg
ICAgVHlwZWRBcnJheUVudHJpZXNJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJp
bnNpYywKICAgICBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAgICBSZW1vdGVGdW5jdGlv
bkNhbGxJbnRyaW5zaWMsCiAgICAgSlNNYXBHZXRJbnRyaW5zaWMsCiAgICAgSlNNYXBIYXNJbnRy
aW5zaWMsCiAgICAgSlNNYXBTZXRJbnRyaW5zaWMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2FzdC5oCmluZGV4IDY4YzBlNWJjMmVhMDRiMzAyZGM0M2QyNDhhYjUxODhmNGIzZTMwZmYu
LmE2OTkzMTU5MDk5Y2NjMWI3Mzk2YTk3YzU4ZmQ0ZWUzMWE1YzE4MmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVjdCBKU1R5cGVS
YW5nZSB7CiAgICAgbWFjcm8oSlNTeW1ib2xUYWJsZU9iamVjdCwgSlNUeXBlOjpHbG9iYWxPYmpl
Y3RUeXBlLCBKU1R5cGU6Ok1vZHVsZUVudmlyb25tZW50VHlwZSkgXAogICAgIG1hY3JvKEpTU2Nv
cGUsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpXaXRoU2NvcGVUeXBlKSBcCiAg
ICAgbWFjcm8oU3RyaW5nT2JqZWN0LCBKU1R5cGU6OlN0cmluZ09iamVjdFR5cGUsIEpTVHlwZTo6
RGVyaXZlZFN0cmluZ09iamVjdFR5cGUpIFwKKyAgICBtYWNybyhTaGFkb3dSZWFsbU9iamVjdCwg
SlNUeXBlOjpTaGFkb3dSZWFsbVR5cGUsIEpTVHlwZTo6U2hhZG93UmVhbG1UeXBlKSBcCiAKIAog
Ly8gRm9yd2FyZCBkZWNsYXJlIHRoZSBjbGFzc2VzIGJlY2F1c2UgdGhleSBtYXkgbm90IGFscmVh
ZHkgZXhpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKaW5k
ZXggODQ2MGQ0MmMwN2EyMWYwYTI2M2ZmOGU4MWIyYzUwMmE5ZmNmZDhmYy4uMDJmMmU0MzE3NDE2
MzFjNjFkMjdmMTYzZjliNmUzNTEwM2ZkYzVjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaApAQCAtMTUwLDYgKzE1MCw3IEBAIHB1YmxpYzoKICAgICBib29s
IGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c0hvc3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0OwogICAgIGJvb2wgaXNDbGFzc0NvbnN0cnVj
dG9yRnVuY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzUmVtb3RlRnVuY3Rpb24oKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1lKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBuYW1l
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25Jbmxp
bmVzLmgKaW5kZXggMjVkNjA5NDMwYmI3ZGViNWVjYjBhZDk3MjEyZTg4Zjk4N2E1ZGIwOC4uNDc4
NTRhNDY1NDBmZjYzN2RkMWY1YjkxNTlkNDM3MDhhMWJhYzkyNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJOYXRpdmVFeGVjdXRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNzgsNiArNzksMTEgQEAgaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNDbGFzc0NvbnN0
cnVjdG9yRnVuY3Rpb24oKSBjb25zdAogICAgIHJldHVybiAhaXNIb3N0RnVuY3Rpb24oKSAmJiBq
c0V4ZWN1dGFibGUoKS0+aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKTsKIH0KIAoraW5saW5l
IGJvb2wgSlNGdW5jdGlvbjo6aXNSZW1vdGVGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KGpzRHluYW1pY0Nhc3Q8Y29uc3QgSlNSZW1vdGVGdW5jdGlvbio+
KGdsb2JhbE9iamVjdCgpLT52bSgpLCB0aGlzKSk7Cit9CisKIGlubGluZSBUYWdnZWROYXRpdmVG
dW5jdGlvbiBKU0Z1bmN0aW9uOjpuYXRpdmVGdW5jdGlvbigpCiB7CiAgICAgQVNTRVJUKGlzSG9z
dEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpAQCAtOTgsNiArMTA0LDE0IEBAIGlubGluZSBib29sIGlz
SG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFsdWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1
bmN0aW9uKQogICAgIHJldHVybiBmdW5jdGlvbi0+bmF0aXZlRnVuY3Rpb24oKSA9PSBuYXRpdmVG
dW5jdGlvbjsKIH0KIAoraW5saW5lIGJvb2wgaXNSZW1vdGVGdW5jdGlvbihKU1ZhbHVlIHZhbHVl
KQoreworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihnZXRK
U0Z1bmN0aW9uKHZhbHVlKSk7CisgICAgaWYgKCFmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBmdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbigpOworfQorCiBpbmxp
bmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAo
RnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDI4NjRh
MTk1ZjU0MmUwOTQzNmFmZjc4MzExYzQ5NmI1MzUwMjEzN2EuLjUyYjg1ZDFlOGUzOGQ3YjNlZjY2
NmNhYTIyZjU0ZjA3MmI5MjA1NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE0MCw2ICsxNDAsNyBAQAogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
SlNQcm9taXNlUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
U3RyaW5nSXRlcmF0b3IuaCIKQEAgLTc2OSw2ICs3NzAsMTAgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6aW5pdChWTSYgdm0pCiAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+
JiBpbml0KSB7CiAgICAgICAgICAgICBpbml0LnNldChKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSkpOwogICAgICAgICB9KTsKKyAgICBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0
dXJlLmluaXRMYXRlcigKKyAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4m
IGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSk7CisgICAgICAgIH0pOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9
IG51bGxwdHI7CiAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAg
SlNGdW5jdGlvbiogaGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9IG51bGxwdHI7CkBAIC0xNTMw
LDYgKzE1MzUsMTQgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBD
b25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAgICAgICAgICAgIGluaXQu
c2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihp
bml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVByaXZhdGVTeW1ib2wpKTsKICAgICAgICAg
fSk7CiAKKyAgICAvLyBTaGFkb3dSZWFsbXMKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRp
Y19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjpjcmVhdGVSZW1vdGVGdW5jdGlvbild
LmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgeworICAgICAg
ICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2FzdDxKU0dsb2Jh
bE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgY3JlYXRlUmVtb3RlRnVuY3Rpb24p
KTsKKyAgICAgICAgfSk7CisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oTGlua1RpbWVDb25zdGFudDo6aXNSZW1vdGVGdW5jdGlvbildLmluaXRMYXRlcihbXSAo
Y29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQo
SlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQu
b3duZXIpLCAwLCBTdHJpbmcoKSwgaXNSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKwog
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICAvLyBXZWJBc3NlbWJseSBTdHJlYW1pbmcgQVBJ
CiAgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVD
b25zdGFudDo6d2ViQXNzZW1ibHlDb21waWxlU3RyZWFtaW5nSW50ZXJuYWwpXS5pbml0TGF0ZXIo
W10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKQEAgLTIyNTgsNiArMjI3MSw3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwg
VmlzaXRvciYgdmlzaXRvcikKICAgICB0aGlzT2JqZWN0LT5tX2N1c3RvbVNldHRlckZ1bmN0aW9u
U3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYm91bmRGdW5jdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX25hdGl2ZVN0ZEZ1
bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fcmVtb3Rl
RnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBl
bmQodGhpc09iamVjdC0+bV9yZWdFeHBTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZ2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKaW5kZXggMDNlYTNhNmMzMTY5ZTU3
ZWRmNzcwMTFjYjA4YjI2MThhMDUwZjk5NC4uODEzNjUxYjI3ZDY1YzZkNjJmN2IyZTE0OTU1OTg0
OTk3N2M4YjIxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCkBAIC00MTgsNiArNDE4LDcgQEAgcHVibGljOgogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU3RydWN0dXJl
OwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2N1c3RvbVNl
dHRlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwg
U3RydWN0dXJlPiBtX25hdGl2ZVN0ZEZ1bmN0aW9uU3RydWN0dXJlOworICAgIExhenlQcm9wZXJ0
eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlOwog
ICAgIFByb3BlcnR5T2Zmc2V0IG1fZnVuY3Rpb25OYW1lT2Zmc2V0OwogICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+IG1fc2hhZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CkBAIC04NjEsNiArODYyLDcgQEAgcHVi
bGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVdpdGhJbmRpY2VzU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZS5nZXQoKTsgfQog
ICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQor
ICAgIFN0cnVjdHVyZSogcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9k
dWxlUmVjb3JkU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVSZWNvcmRTdHJ1Y3R1
cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBtb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZS5n
ZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHByb3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm94eU9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjRmYWQwNWYyMDkwMDg3MTYyMzM0MGIzNDQyM2NiOWM5Zjg1NTljZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3Bw
CkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwu
CisgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgorCisj
aW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlNoYWRvd1JlYWxtT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTUmVtb3RlRnVu
Y3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1JlbW90ZUZ1bmN0aW9uKSB9OworCitKU1JlbW90
ZUZ1bmN0aW9uOjpKU1JlbW90ZUZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQ2VsbCogdGFyZ2V0KQorICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUpCisgICAgLCBtX3RhcmdldCh2bSwgdGhpcywgdGFyZ2V0KQoreworfQor
CitKU1ZhbHVlIHdyYXBWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0dsb2Jh
bE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZSgpKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBpZiAodmFsdWUuaXNDYWxsYWJsZSh2bSkpIHsK
KyAgICAgICAgSlNDYWxsZWUqIHRhcmdldCA9IHN0YXRpY19jYXN0PEpTQ2FsbGVlKj4odmFsdWUu
YXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1JlbW90ZUZ1bmN0aW9uOjpjcmVh
dGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0KSk7CisgICAgfQorCisgICAgcmV0dXJu
IEpTVmFsdWUoKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIHdyYXBBcmd1bWVudChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB3cmFwVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIHZhbHVl
KTsKKyAgICBpZiAocmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBj
YWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUgd3JhcHJSZXR1cm5WYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB3cmFwVmFsdWUoZ2xv
YmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBpZiAocmVzdWx0Lmlz
RW1wdHkoKSkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZh
bHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUi
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVt
b3RlSlNGdW5jdGlvbkNhbGwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1JlbW90ZUZ1bmN0
aW9uKiByZW1vdGVGdW5jdGlvbiA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQocmVtb3RlRnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rp
b24oKSk7CisgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1
bmN0aW9uKCk7CisgICAgQVNTRVJUKHRhcmdldCk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogdGFy
Z2V0R2xvYmFsT2JqZWN0ID0gdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCk7CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpTVmFsdWUg
d3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIGFyZ3MuYXBwZW5k
KHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJmbG93
ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisgICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0YXJnZXQtPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAoZXhl
Y3V0YWJsZS0+aGFzSklUQ29kZUZvckNhbGwoKSkgeworICAgICAgICAvLyBGb3JjZSB0aGUgZXhl
Y3V0YWJsZSB0byBjYWNoZSBpdHMgYXJpdHkgZW50cnlwb2ludC4KKyAgICAgICAgZXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0KKwor
ICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgdGFyZ2V0KTsKKyAgICBBU1NFUlQo
Y2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1bHQg
PSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0LCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgYXJncyk7CisKKyAgICAvLyBIaWRlIGV4Y2VwdGlvbnMgZnJvbSBjYWxsaW5nIHJlYWxtCisg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJhbiBlcnJv
ciBvY2N1cnJlZCBpbiByZW1vdGUgcmVhbG0iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Zh
bHVlKCk7CisgICAgfQorCisgICAgYXV0byB3cmFwcGVkUmVzdWx0ID0gd3JhcHJSZXR1cm5WYWx1
ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh3cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGwsIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiByZW1vdGVGdW5jdGlvbiA9IGpzQ2FzdDxKU1JlbW90
ZUZ1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQocmVtb3RlRnVu
Y3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKSk7CisgICAgSlNDZWxsKiB0YXJnZXQgPSByZW1vdGVG
dW5jdGlvbi0+dGFyZ2V0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVj
dCA9IHRhcmdldC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOworCisgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1ZSA9
IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKHdyYXBwZWRWYWx1ZSk7
CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBhdXRvIGNhbGxEYXRhID0gZ2V0
Q2FsbERhdGEodm0sIHRhcmdldCk7CisgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2FsbERh
dGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2FsbCh0YXJnZXRHbG9iYWxPYmpl
Y3QsIHRhcmdldCwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworCisgICAgLy8gSGlk
ZSBleGNlcHRpb25zIGZyb20gY2FsbGluZyByZWFsbQorICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB0aHJvd1R5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiYW4gZXJyb3Igb2NjdXJyZWQgaW4gcmVtb3RlIHJl
YWxtIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIGF1
dG8gd3JhcHBlZFJlc3VsdCA9IHdyYXBWYWx1ZSh0YXJnZXRHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh3cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihpc1Jl
bW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShzdGF0aWNf
Y2FzdDxib29sPihqc0R5bmFtaWNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihnbG9iYWxPYmplY3Qt
PnZtKCksIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEFTU0VSVChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKKyAgICBK
U1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgQVNT
RVJUKHRhcmdldC5pc0NhbGxhYmxlKHZtKSk7CisKKyAgICBKU0NlbGwqIHRhcmdldENhbGxhYmxl
ID0gdGFyZ2V0LmFzQ2VsbCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBkZXN0aW5hdGlvbkdsb2Jh
bE9iamVjdCA9IGdsb2JhbE9iamVjdDsKKyAgICBpZiAoIWNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBpZiAoYXV0byBzaGFkb3dS
ZWFsbSA9IGpzRHluYW1pY0Nhc3Q8U2hhZG93UmVhbG1PYmplY3QqPih2bSwgY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgxKSkpCisgICAgICAgICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVj
dCA9IHNoYWRvd1JlYWxtLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9
IEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRh
cmdldENhbGxhYmxlKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpKTsKK30KKworaW5saW5lIFN0cnVjdHVyZSogZ2V0UmVtb3RlRnVuY3Rpb25T
dHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICAvLyBGSVhNRTog
aW1wbGVtZW50IGdsb2JhbE9iamVjdC1hd2FyZSBzdHJ1Y3R1cmUgY2FjaGluZworICAgIHJldHVy
biBnbG9iYWxPYmplY3QtPnJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCk7Cit9CisKK0pTUmVtb3Rl
RnVuY3Rpb24qIEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogdGFyZ2V0Q2FsbGFibGUpCit7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKHRhcmdldENhbGxhYmxl
ICYmIHRhcmdldENhbGxhYmxlLT5pc0NhbGxhYmxlKHZtKSk7CisgICAgaWYgKGF1dG8gcmVtb3Rl
ID0ganNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRhcmdldENhbGxhYmxlKSkg
eworICAgICAgICB0YXJnZXRDYWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0KCk7CisgICAgICAgIEFT
U0VSVCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHRhcmdldENhbGxhYmxlKSk7CisgICAgfQorCisg
ICAgYm9vbCBpc0pTRnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHRhcmdldENhbGxhYmxlKTsKKyAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0UmVtb3RlRnVuY3Rpb24oaXNK
U0Z1bmN0aW9uKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlbW90ZUZ1bmN0aW9u
U3RydWN0dXJlKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIEpTUmVtb3RlRnVuY3Rpb24odm0s
IGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB0YXJnZXRDYWxsYWJsZSk7CisK
KyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBmdW5jdGlvbjsK
K30KKwordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVu
Y3Rpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0KTsKK30KKworREVGSU5F
X1ZJU0lUX0NISUxEUkVOKEpTUmVtb3RlRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kNDYzY2NkMWYxYjg5YjZjOWIxZWVmZWNmMjhmZDljMzdjOThiNzQ1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5j
dGlvbi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlh
IFMuTC4KKyAqIEF1dGhvcjogQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihyZW1vdGVK
U0Z1bmN0aW9uQ2FsbCk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9u
Q2FsbCk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGlzUmVtb3RlRnVuY3Rpb24pOworSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbik7CisKKy8vIEpTUmVt
b3RlRnVuY3Rpb24gY3JlYXRlcyBhIGJyaWRnZSBiZXR3ZWVuIGl0cyBuYXRpdmUgUmVhbG0gYW5k
IGEgcmVtb3RlIG9uZS4KKy8vIFdoZW4gaW52b2tlZCwgYXJndW1lbnRzIGFyZSB3cmFwcGVkIHRv
IHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiBhY3Jvc3MgdGhlIHJlYWxtIGJvdW5kYXJ5Lgor
Ly8gVGhlIHJldHVybiB2YWx1ZSBhbmQgYW55IGFicnVwdCBjb21wbGV0aW9ucyBhcmUgYWxzbyBm
aWx0ZXJlZC4KK2NsYXNzIEpTUmVtb3RlRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlv
biB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Cisg
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAg
ICByZXR1cm4gdm0ucmVtb3RlRnVuY3Rpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1JlbW90ZUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgSlNDZWxsKiB0YXJn
ZXQoKSB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQorICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1
bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGdldEpTRnVuY3Rpb24o
dGFyZ2V0KCkpKTsgfQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7
IHJldHVybiB0YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQorCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsgCisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYXJn
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSZW1vdGVGdW5jdGlvbiwgbV90YXJnZXQp
OyB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCitwcml2YXRlOgorICAgIEpTUmVtb3Rl
RnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBKU0NlbGwqIHRhcmdldENhbGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV90YXJnZXQ7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
aW5kZXggZmYxYWFmNzNhNDlkM2Y3MTFmNTQyZDY1ZjBkMWRmMzc2MWNjMjBiMS4uMDVjMTU5Yzg2
ZDc4OWY0ZGNjMTY4ZWMxYmZhNmRmMjIzMjBkY2NmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcApAQCAtNjMyLDYgKzYzMiw4IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVu
a0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1
cm4gcmFuZG9tVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBCb3VuZEZ1bmN0aW9uQ2FsbEludHJp
bnNpYzoKICAgICAgICAgcmV0dXJuIGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yOworICAgIGNh
c2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4gcmVtb3RlRnVu
Y3Rpb25DYWxsR2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KQEAgLTcwOSw2ICs3MTEsMjUgQEAgTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEJv
dW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KQogICAgIHJl
dHVybiBnZXRPckNyZWF0ZShtX2Zhc3RCb3VuZEV4ZWN1dGFibGUpOwogfQogCitOYXRpdmVFeGVj
dXRhYmxlKiBWTTo6Z2V0UmVtb3RlRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24pCit7CisgICAg
Ym9vbCBzbG93Q2FzZSA9ICFpc0pTRnVuY3Rpb247CisgICAgYXV0byBnZXRPckNyZWF0ZSA9IFsm
XSAoV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgc2xvdCkgLT4gTmF0aXZlRXhlY3V0YWJsZSogewor
ICAgICAgICBpZiAoYXV0byogY2FjaGVkID0gc2xvdC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biBjYWNoZWQ7CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIHJlc3VsdCA9IGdldEhvc3RGdW5j
dGlvbigKKyAgICAgICAgICAgIHNsb3dDYXNlID8gcmVtb3RlRnVuY3Rpb25DYWxsIDogcmVtb3Rl
SlNGdW5jdGlvbkNhbGwsCisgICAgICAgICAgICBzbG93Q2FzZSA/IE5vSW50cmluc2ljIDogUmVt
b3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgICAgICAgICAgY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IsIG51bGxwdHIsIFN0cmluZygpKTsKKyAgICAgICAgc2xvdCA9IFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Owor
CisgICAgaWYgKHNsb3dDYXNlKQorICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9zbG93UmVt
b3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0UmVt
b3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50
cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCmluZGV4IGExYjBiMzg1MzhiZjIwODMyMDc5ZGZjOTQ3NGZlYTk1NTNmMzBm
MGEuLmE5NjA5NjNiM2EyZDk0ZTY1ZjYyNGFjNTU2NzU4NDllNmE5MjBkZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMyLDYgKzQzMiw3IEBAIHB1YmxpYzoKICAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVu
dHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2Ny
aXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCkBAIC01NzIsNiArNTczLDkgQEAgcHVibGljOgog
ICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Qm91bmRFeGVjdXRhYmxlOwogICAgIFdl
YWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Q2FuQ29uc3RydWN0Qm91bmRFeGVjdXRhYmxlOwog
CisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFi
bGU7CisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1
dGFibGU7CisKICAgICBSZWY8RGVmZXJyZWRXb3JrVGltZXI+IGRlZmVycmVkV29ya1RpbWVyOwog
CiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwpAQCAtNjg1
LDYgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rp
b24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Is
IGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wg
Y2FuQ29uc3RydWN0KTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRSZW1vdGVGdW5jdGlvbihi
b29sIGlzSlNGdW5jdGlvbik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENU
SUxpbmtDYWxsKCk7Cg==
</data>
<flag name="commit-queue"
          id="475635"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449522</attachid>
            <date>2022-01-19 15:14:16 -0800</date>
            <delta_ts>2022-01-19 17:27:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220119181414.patch</filename>
            <type>text/plain</type>
            <size>47737</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZWQyM2JmNjQ2OTE3N2I5OTU0ZGFmMTY2MGIyOTA5OGU0NTkyYmQxLi5jODMyYzUyYzNiZTU2NzJl
MTE0ZDFkNDdiNTI2NTQ5YWQ5MmVmZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0xOSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gdGhpcyBpbml0aWFsIHBhdGNoLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZiBKUy1i
dWlsdGluIG1hY2hpbmVyeSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgZHVwbGljYXRlZCBmdW5j
dGlvbmFsaXR5LiBBZGRpdGlvbmFsbHksIEpJVCBzdXBwb3J0CisgICAgICAgIGhhcyBub3QgYmVl
biBpbmNvcnBvcmF0ZWQgeWV0LgorCisgICAgICAgIEJyb2FkbHksIHRoZSBpZGVhIGlzIHRoYXQg
dGhlcmUgYXJlIGN1c3RvbSBob29rcyBmb3IgY2FsbGluZyBhCisgICAgICAgIEpTUmVtb3RlRnVu
Y3Rpb24sIHdoaWNoIHBlcmZvcm0gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYXZv
aWRzCisgICAgICAgIHRoZSBuZWVkIGZvciBhbGxvY2F0aW5nIGNsb3N1cmVzIHdoaWNoIGNvbnRh
aW4gdGhlIHdyYXBwaW5nIGxvZ2ljLgorCisgICAgICAgIFRPRE86CisgICAgICAgIC0gSklUL0RG
Ry9GVEwgc3VwcG9ydAorICAgICAgICAtIHN0cnVjdHVyZSBjYWNoaW5nICh1bm5lY2Vzc2FyeSBz
aW5jZSB0aGVzZSBhcmUgbm90IGNvbnN0cnVjdG9ycz8pCisgICAgICAgIC0gaW1wcm92ZWQgYmFz
ZWxpbmUgcGVyZgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBidWls
dGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlucy9TaGFkb3dSZWFsbVByb3Rv
dHlwZS5qczoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRDb21tb24uaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZpeCBZYXJySklUIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5IGJyZWFrcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBiOTg3MTIxNzVjOWE3ZDllNDQzN2ZmMzU3MjlhODRjNDFlZThjNjRm
Li4yMTQ3MjRmMDhlOTc3YjA2YTNlZjgzZTc2NWZhMzQ2M2FiZmQzYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYgKzEwODEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBy
dW50aW1lL0pTUHJveHkuaAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggOTZiZGZlMDc1Mzg0NTI4ODg4MjBjY2I2NDM5ZmIyNzAzZWM1NmZmMC4uM2M3YWNjY2NiZDJh
ZTJjNDFmNDA2MmQxZjBhYTM0MTg0Njk1Yjc3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTExMjcsNiArMTEyNyw3IEBACiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGRDA0RDQx
RDdBQjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QjQwMzI3RTI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovOyB9Owog
CQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEODFEQjY5RTVDMDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi87IH07CiAJCTVCNzBDRkUwMURCNjlFNjYwMEVD
MjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNG
dW5jdGlvblByb3RvdHlwZS5oICovOyB9OwogCQk1QjcwQ0ZFMjFEQjY5RTY2MDBFQzIzRjkgLyog
QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQzFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlv
bkNvbnN0cnVjdG9yLmggKi87IH07CkBAIC00MDcwLDYgKzQwNzEsOCBAQAogCQk1M0ZBMkFFMjFD
RjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNh
bGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0
RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3Rl
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZW1vdGVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVG
dW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlbW90ZUZ1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpT
QXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5j
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1
QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODIwLDggKzU4MjMsOCBAQAog
CQkJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAogCQkJCTkzMkY1QkQ3MDgyMkExQzcwMDczNjk3NSAvKiBsaWJpY3Vjb3Jl
LmR5bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDYwODIyQTFDNzAwNzM2OTc1IC8q
IGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKLQkJCQlBNTA5OEIwNDFDMTZBQTAyMDAw
ODc3OTcgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRERCMDRG
NDIyNzhFNTZBMjAwOEQzNjc4IC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8sCisJCQkJQTUw
OThCMDQxQzE2QUEwMjAwMDg3Nzk3IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNzM0NiwxMSArNzM0OSwxMSBAQAogCQkJCUUzODM1MDA5MjM5MEQ5MzcwMDM2MzE2
RCAvKiBXYXNtR2xvYmFsLmggKi8sCiAJCQkJMTQ4NTIxRDUyNkVBRUJERjAwQ0MxRDFBIC8qIFdh
c21IYW5kbGVySW5mby5jcHAgKi8sCiAJCQkJMTQ4NTIxRDcyNkVBRUJGRTAwQ0MxRDFBIC8qIFdh
c21IYW5kbGVySW5mby5oICovLAotCQkJCTUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAvKiBXYXNt
SVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBX
YXNtSW5zdGFuY2UuY3BwICovLAogCQkJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNt
SW5zdGFuY2UuaCAqLywKKwkJCQk1MkZEQUJDMjI3ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2Vu
ZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEMDA2NTlEMUVDQUM3RkUwMDBDQTkyNiAvKiBXYXNt
TGltaXRzLmggKi8sCiAJCQkJMTRDNUFENjgyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTEludEdl
bmVyYXRvci5jcHAgKi8sCiAJCQkJMTRDNUFENjkyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTElu
dEdlbmVyYXRvci5oICovLApAQCAtNzk1MSw2ICs3OTU0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUz
Q0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZB
QTUwMDlGMTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5
IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkz
OSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMx
IC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyog
SlNTY29wZS5jcHAgKi8sCkBAIC0xMDY1Myw2ICsxMDY1OCw3IEBACiAJCQkJOTk2QjczMUYxQkRB
MDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1v
dGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2
IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcx
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MTE1Miw2ICsxMTE1OCw3IEBACiAJCQkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21I
YW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4RkYzOTgxRUI1QkRCMjAwODdGRjgy
IC8qIFdhc21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTIxRjY5OUVD
MDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGREFCQzMy
Nzg4MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMDA2NTlFMUVDQUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDUwRkExRjIzNTdCRUM5MDA5M0NENEQgLyogV2FzbUxMSW50VGllclVwQ291
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdh
c21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTIwMiw3ICsxMTIwOSw2IEBA
CiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01h
cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJGREFCQzMyNzg4MDc2QjAwQzE1QjU5
IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOTkzMEM4
MjJBRDNCOUEwMDUxQ0RFMiAvKiBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzOUJGQkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBXZWFrT2JqZWN0UmVmUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a1NldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggN2Ew
ZWJmZTY5ODFkMzkwMTk3NGQyM2ExYjYxZTE4MDVmZmNlMWQ4NC4uM2E2MWE4Zjk5NmNmNjA5YzI3
MjQxZDZhNjk1NmYxNTUyNThkMjQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
ODk5LDYgKzg5OSw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCiBydW50aW1l
L0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcAog
cnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUv
SlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIwNTllZmM2ZWUwMGUw
Li4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFmYTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApAQCAtOTIsNiArOTIsNyBAQCBw
dWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1bmspIFwKICAgICB2KEJvdW5k
RnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25UaHVuaykgXAogICAgIHYoU3Bl
Y2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBcCiAgICAgdihXYXNtVGh1bmsp
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRl
eCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4ODhkLi5hMDUyNTc0ODc2ZmEx
NDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpIFwKICAgICBtYWNybyhlbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhzZW50aW5lbFN0cmluZykgXAor
ICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAgbWFjcm8oaXNSZW1vdGVGdW5j
dGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcwppbmRleCA4ZDg5MDY4
OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi4yMjk0NzFiODUwNzY4MDNiMTNlNWMy
ZTRlMmQ0MDc1ZDk1NTlkNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0zMiwzMCArMzIsNyBAQCBmdW5j
dGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHRhcmdldCkKICAgICAidXNl
IHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0KSkgewotICAgICAgICB2YXIg
d3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAgICAgICAgICAgIHZhciBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIHdyYXBwZWRBcmdzID0gQG5l
d0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGZv
ciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAgc2luY2UgdG8KLSAgICAgICAg
ICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBBIHRvIHdvcmsgaW4gcmVhbG0g
Qiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGFyZ3VtZW50cyAoZnJv
bSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0gICAgICAgICAgICAgICAgLy8g
Y2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgIEBwdXRCeVZhbERp
cmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1Jl
YWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVmaW5lZCwgd3JhcHBlZEFyZ3Mp
OwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9
ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmluZygpOwotICAgICAgICAgICAg
ICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAgICAgICAgIEB0aHJvd1R5cGVF
cnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBj
b25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dSZWFsbSwgIihtc2cpID0+IG5l
dyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBta1R5
cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBAd3JhcChm
cm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwotICAgICAgICB9OworICAgICAg
ICB2YXIgd3JhcHBlZCA9IEBjcmVhdGVSZW1vdGVGdW5jdGlvbih0YXJnZXQsIGZyb21TaGFkb3dS
ZWFsbSA/IG51bGwgOiBzaGFkb3dSZWFsbSk7CiAgICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1l
J107CiAgICAgICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIx
NmFmMGY2ODlmMGFiZWE0ODBhZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkw
MDQ4OGY2ZGNiZGQyNzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGlua1RpbWVDb25zdGFudC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5n
LCBudWxscHRyKSBcCisgICAgdihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAg
IHYoaXNSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5L
X1RJTUVfQ09OU1RBTlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKaW5kZXggMGM4ZDM1NTk2MDRhZWQwYjMzOGM0ZDk3N2EzZDYwOTdkOTJjZWQ2My4uNmI4
NjU0MjI4NGEwNGQxMzMyMThjOWYzZWFkODUyZTBkNjI2MmZlYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGlu
ZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCkBAIC0zMjE4LDYgKzMyMTksNyBAQCBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0
U3BhY2UsIG1vZHVsZU5hbWVzcAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBl
LCBKU05hdGl2ZVN0ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxU
eXBlLCBQcm94eU9iamVjdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyhwcm94eVJldm9rZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFz
aDoweGI1MDZhOTM5CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVt
b3RlRnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJs
ZVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJs
ZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBh
cmFtZXRlcnNTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRj
aFBhcmFtZXRlcnMpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2Ny
aXB0RmV0Y2hlclNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZl
dGNoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggNGRlODJlYjg3NDk0Y2M3OTA2
YTM2ZWM5NTgyOTY1NWZkMWJjZDgwYi4uYWJiZGNiZmJlZjI4YTBkMzU1ZmVjZjkxNzY0YTU1MGI5
YWYzZDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTIyLDYgKzkyMiw3IEBA
IHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihw
cm94eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
cHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHJlbW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyM2UwODcxOGRiZjgyMDQy
MzVlMzk5YWE2NWNiMGQ5OTA4Mjk3MWUwLi43NWY4OTAzZGZiNzdlMTA2YTViZDhmNThhMTUwZGM2
YzYyZjQ2MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVs
bChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICB2b2lkIGpp
dEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAgaW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9F
eGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbih2bSk7IH0KICNl
bHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRB
c3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEzNTUsNiArMTM1Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0
VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkg
eyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlvbihWTSYpIHsgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihWTSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMWRkN2I3M2M2MTY3OTYyN2YzMDJk
OTE0MjJmNWJjMzdmMjE0ZTRiMC4uZDIwZWQwNzcwMDkwZjNkNzUxMTgzYjRkYjkyMTYyNjc0ZmJh
M2NmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTV2l0aFNj
b3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG8K
ICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCitzdGF0aWMgSlNW
YWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAgIGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZt
KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpj
cmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUuYXNDZWxsKCkpKTsKKworICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4g
cmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFw
cGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2Fs
bGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24oY2FsbGVl
KSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBK
U0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gY2FsbGVlLT50YXJnZXRGdW5jdGlv
bigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldFdyYXBwZWRWYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpKTsKKworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlv
biogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24o
Y2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldFdyYXBwZWRWYWx1ZShnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpKTsKKyAgICBzY29wZS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwg
RW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUpKQoreworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rp
b24oY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUgaGVyZSB3aGVuICJyZXRocm93aW5nIiBhbiBleGNl
cHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CisgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZXhjZXB0aW9uU3RyaW5nID0gZXhjZXB0
aW9uVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICBl
bHNlCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCisgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cit9CisKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFm
OTA2YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLmJiNTE2ZmZmMTlhODFjM2ZhZDgwNjZh
YzhjNDllOTQ2ZTdmYTlkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEpTRnVuY3Rpb247CiBjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50OwogY2xhc3MgSlNPYmplY3Q7Citj
bGFzcyBKU1JlbW90ZUZ1bmN0aW9uOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIEpTU3RyaW5nOwog
Y2xhc3MgSlNWYWx1ZTsKQEAgLTk0LDYgKzk1LDcgQEAgdHlwZWRlZiBjaGFyKiBVbnVzZWRQdHI7
CiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzYzogSlNTY29wZSoKICAgICBKc2Y6IEpT
RnVuY3Rpb24qCisgICAgSnJmOiBKU1JlbW90ZUZ1bmN0aW9uKgogICAgIEpzczogSlNTdHJpbmcq
CiAgICAgTDogSlNMZXhpY2FsRW52aXJvbm1lbnQqCiAgICAgTzogSlNPYmplY3QqCkBAIC0xNDYs
NiArMTQ4LDcgQEAgdXNpbmcgVl9KSVRPcGVyYXRpb25fR0NDSiA9IHZvaWQoSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgSlMKIHVzaW5nIEpfSklUT3BlcmF0aW9u
X0dTc2lKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKik7CiB1c2luZyBaX0pJVE9wZXJhdGlvbl9HSlpaID0gaW50MzJfdChKSVRfT1BF
UkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCwgaW50MzJfdCk7CiB1c2luZyBGX0pJVE9wZXJhdGlvbl9HRkpaWiA9IENhbGxGcmFtZSoo
SklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwordXNpbmcgSl9KSVRPcGVyYXRpb25f
SnJmSiA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU1JlbW90
ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv
IGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGlj
aCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRv
IG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkBAIC0xNTUsNiArMTU4LDkgQEAg
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVjdCopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVy
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1ZSkpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJn
ZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVlKSk7
CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVuY3Rpb25F
eGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgdm9p
ZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCBjNjU3MWE2Y2I1N2U4MjRk
Y2M5ZTFjYTIzNWU0ZGJkZWEzMDkzM2IwLi4wM2MwY2EzNzgzYjJhZThjZmVlNmM4NjFkZDljNzQ0
NjFhNzAxZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1
ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6
ZWRUaHVua0pJVC5oIgpAQCAtMTQyMiw2ICsxNDIzLDIwNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2bSkKICAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
Ym91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3Io
Vk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5zaWduZWQgZXh0
cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxpZ25tZW50ID0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKQorICAgICAg
ICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3RhY2tNaXNhbGln
bm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBhcmd1bWVudHMg
dGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0YWlsCisgICAg
Ly8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qgc28gbG9uZyBh
cyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2FsbCwgc2luY2Ug
dGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11bGEgZm9yIHRo
ZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAgLy8gICAgIHN0
YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1lSGVhZGVyU2l6
ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKQorICAgIC8v
CisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAgIC8vCisgICAg
Ly8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgKENhbGxGcmFt
ZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJlZ2lzdGVyKSkK
KyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApOworCisgICAg
aml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBHUFJJbmZv
OjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFuZDMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVzKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQpLCBHUFJJbmZv
OjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUgYWN0dWFsIGFy
Z3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sgd2Ugd2lsbCBu
ZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFjayBzcGFjZS4K
KworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NP
ZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBUaHJvdyBTdGFj
ayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuayk+KEdQ
UkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZv
Ojpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBqaXQubW92ZShH
UFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAg
ICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRzIGNvbmNlbnN1
cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dyZWFsbS9p
c3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6
OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQ0Nh
bGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUkluZm86OnJlZ1Q0
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0aGUgYXJndW1l
bnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUgZm9yIGNhbGxp
bmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGluIHRoZSBzbG93
IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7CisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVG
dW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
WmVybywgR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAg
aGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
Z1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29k
ZUZvckNhbGwpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgbm9Db2Rl
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisK
KyAgICAvLyBBcmd1bWVudCBwcm9jZXNzaW5nIGxvb3A6CisgICAgLy8gRm9yIGVhY2ggYXJndW1l
bnQgKG9yZGVyIHNob3VsZCBub3QgYmUgb2JzZXJ2YWJsZSk6CisgICAgLy8gICAgIGlmIHRoZSB2
YWx1ZSBpcyBhIFByaW1pdGl2ZSwgY29weSBpdCBpbnRvIHRoZSBuZXcgY2FsbCBmcmFtZSBhcmd1
bWVudHMsIG90aGVyd2lzZQorICAgIC8vICAgICBwZXJmb3JtIHdyYXBwaW5nIGxvZ2ljLiBJZiB0
aGUgd3JhcHBpbmcgbG9naWMgcmVzdWx0cyBpbiBhIG5ldyBKU1JlbW90ZUZ1bmN0aW9uLAorICAg
IC8vICAgICBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1lJ3MgYXJndW1lbnRzLCBvdGhl
cndpc2UgaXQgbXVzdCBoYXZlIHRocm93biBhIFR5cGVFcnJvci4KKyAgICBqaXQuc3ViMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3Ag
PSBqaXQubGFiZWwoKTsKKyAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDApKS5pbmRleGVk
QnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7
CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB2YWx1ZUlzUHJpbWl0aXZlOworICAg
ICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVn
cykpOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMSwgaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSk7CisKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KT4oR1BSSW5mbzo6cmVnVDAs
IHZhbHVlUmVncyk7CisgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAg
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsK
KworICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgIGppdC5sb2Fk
Q2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BS
SW5mbzo6cmVnVDApOworCisgICAgICAgIGppdC5sb2FkUHRyKGppdC5hZGRyZXNzRm9yKGxvb3BJ
bmRleCksIEdQUkluZm86OnJlZ1QxKTsKKworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmxpbmso
JmppdCk7CisgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpj
YWxsZWVBcmd1bWVudFNsb3QoMCkuaW5kZXhlZEJ5KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMSkubGlua1RvKGxvb3AsICZqaXQpOwor
CisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICB9CisKKyAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTUmVtb3RlRnVuY3Rpb246Om9mZnNl
dE9mVGFyZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZv
OjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNoVGVzdFB0cihD
Q2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlRm9yQ2Fs
bCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNlZCBvbiB0aGUgY2hl
Y2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJNNjQsIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgRU5BQkxFKEFTU0VSVCkgJiYgIUNQVShB
Uk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hlY2tOb3ROdWxsID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBncHIpOworICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7CisgICAgICAgIGNoZWNrTm90TnVsbC5s
aW5rKCkKKyAgICB9CisjZW5kaWYKKworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdU
MCwgSlNFbnRyeVB0clRhZyk7CisgICAgLy8gRklYTUU6IGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJv
d24gd2l0aGluIGEgSlMgY2FsbCwgd2UnbGwgZW5kIHVwIGluIGFuIG91dGVyIGV4Y2VwdGlvbiBo
YW5kbGVyIGFuZCB0aGUKKyAgICAvLyByZXRocm93IGxvZ2ljIHdvbid0IG9jY3VyIGhlcmUuIE5l
ZWQgdG8gc2V0IHVwIGFuIAorICAgIENDYWxsSGVscGVyczo6SnVtcCB0YXJnZXRGdW5jdGlvbkV4
Y2VwdGlvbiA9IGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKTsKKworICAgIC8vIFdyYXAgcmV0
dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KEdQUkluZm86OnJlZ1QwKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyNlbmRpZgor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1ByaW1pdGl2ZTsKKyAgICByZXN1
bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2VsbChyZXN1bHRSZWdzKSk7Cisg
ICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdChyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdyYXBwZWRW
YWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworCisg
ICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQUkluZm86OnJlZ1QyLCByZXN1
bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgcmVzdWx0SXNQ
cmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICBqaXQucmV0KCk7CisKKyAgICB0YXJnZXRGdW5jdGlvbkV4Y2VwdGlvbi5saW5rKCZqaXQpOwor
ICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKT4oR1BSSW5mbzo6cmVnVDIp
OworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAvLyBGYWxsIHRocm91Z2ggdG8g
anVtcCB0byBoYW5kbGVyCisKKyAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSk7Cisg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlJl
bW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAorICAgICAg
ICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciByZW1v
dGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5NDVkZjFkNWVlMS4uNTg5ZTcw
MDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4Miw4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSYpOwogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmVt
b3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA4ZjhjNWYz
NjlkNmVhNTIwODgxNzhiN2NjODViNzI0NzUxNDc0Y2FmLi4wOThkNWY1ZDY0YmI3Y2QxNGQzNmVm
NDkzMmI2YmM5NWUzYTA2NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBA
QAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAtMzY2LDYgKzM2Nyw3IEBAIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyRXZhbFNjcmlwdCk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdDKTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2Jq
ZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckds
b2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZXBvcnQpOwpAQCAtNjQ5
LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJn
YyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiY2xlYXJL
ZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2JqZWN0cywgMCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5jdGlvbkRvbGxhckdsb2JhbE9i
amVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25l
KSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJpc1JlbW90ZUZ1bmN0aW9uIiwg
ZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAgICAgICAgIGRvbGxhci0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xvYmFsIiksIGdsb2JhbFRo
aXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAgLTIwODMsNiArMjA4NiwxOCBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3Is
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxh
cklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAgICBKU1ZhbHVlIGFyZyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oaXNSZW1vdGVGdW5jdGlvbihhcmcpKSk7Cit9CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKaW5kZXgg
ZmY1ZjE5MjQ2OTBmNjJmNDhjNTEzNjViNTJlNmM1NjNiNGU2Mjg5ZC4uYjgxNzU5YmNhN2VhOGQ1
NDJiYzkyZDExZmYyODdiNTBkODJmMzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuY3BwCkBAIC0yMDUsNiArMjA1LDggQEAgY29uc3QgY2hhciogaW50cmlu
c2ljTmFtZShJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gIklzVHlwZWRBcnJh
eVZpZXdJbnRyaW5zaWMiOwogICAgIGNhc2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAg
ICAgICAgIHJldHVybiAiQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOworICAgIGNhc2UgUmVt
b3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4gIlJlbW90ZUZ1bmN0aW9u
Q2FsbEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzoKICAgICAgICAgcmV0
dXJuICJKU01hcEdldEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggOGU2OGU3ZTc0ZmI3
OGNkYmQzMzI0Y2ZiZjBhMjVlZDZkMjBkNmQ1OC4uNGFlMzY1MWI1NzVlMjMxNThiZjY4OTYwYjZk
Y2NjMDlhNTdiYWYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgKQEAgLTExOCw2ICsxMTgsNyBAQCBlbnVtIEludHJpbnNpYyA6IHVpbnQ4X3QgewogICAgIFR5
cGVkQXJyYXlFbnRyaWVzSW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMs
CiAgICAgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgUmVtb3RlRnVuY3Rpb25DYWxs
SW50cmluc2ljLAogICAgIEpTTWFwR2V0SW50cmluc2ljLAogICAgIEpTTWFwSGFzSW50cmluc2lj
LAogICAgIEpTTWFwU2V0SW50cmluc2ljLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nh
c3QuaAppbmRleCA2OGMwZTViYzJlYTA0YjMwMmRjNDNkMjQ4YWI1MTg4ZjRiM2UzMGZmLi5hNjk5
MzE1OTA5OWNjYzFiNzM5NmE5N2M1OGZkNGVlMzFhNWMxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Nhc3QuaApAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgSlNUeXBlUmFuZ2Ug
ewogICAgIG1hY3JvKEpTU3ltYm9sVGFibGVPYmplY3QsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlw
ZSwgSlNUeXBlOjpNb2R1bGVFbnZpcm9ubWVudFR5cGUpIFwKICAgICBtYWNybyhKU1Njb3BlLCBK
U1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6V2l0aFNjb3BlVHlwZSkgXAogICAgIG1h
Y3JvKFN0cmluZ09iamVjdCwgSlNUeXBlOjpTdHJpbmdPYmplY3RUeXBlLCBKU1R5cGU6OkRlcml2
ZWRTdHJpbmdPYmplY3RUeXBlKSBcCisgICAgbWFjcm8oU2hhZG93UmVhbG1PYmplY3QsIEpTVHlw
ZTo6U2hhZG93UmVhbG1UeXBlLCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSkgXAogCiAKIC8vIEZv
cndhcmQgZGVjbGFyZSB0aGUgY2xhc3NlcyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBhbHJlYWR5IGV4
aXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDg0
NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJhOWZjZmQ4ZmMuLjAyZjJlNDMxNzQxNjMxYzYx
ZDI3ZjE2M2Y5YjZlMzUxMDNmZGM1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0J1
aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0
RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1
bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlbW90ZUZ1bmN0aW9uKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25Jbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2IwYWQ5NzIxMmU4OGY5ODdhNWRiMDguLjQ3ODU0YTQ2
NTQwZmY2MzdkZDFmNWI5MTU5ZDQzNzA4YTFiYWM5MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0YWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTc4LDYgKzc5LDExIEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gIWlzSG9zdEZ1bmN0aW9uKCkgJiYganNFeGVj
dXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7CiB9CiAKK2lubGluZSBib29s
IEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxib29sPihqc0R5bmFtaWNDYXN0PGNvbnN0IEpTUmVtb3RlRnVuY3Rpb24qPihnbG9i
YWxPYmplY3QoKS0+dm0oKSwgdGhpcykpOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5j
dGlvbk5vbklubGluZSgpKTsKQEAgLTk4LDYgKzEwNCwxNCBAQCBpbmxpbmUgYm9vbCBpc0hvc3RG
dW5jdGlvbihKU1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
bikKICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rp
b247CiB9CiAKK2lubGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZ2V0SlNGdW5j
dGlvbih2YWx1ZSkpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKTsKK30KKwogaW5saW5lIGJv
b2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0
aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyODY0YTE5NWY1
NDJlMDk0MzZhZmY3ODMxMWM0OTZiNTM1MDIxMzdhLi41MmI4NWQxZThlMzhkN2IzZWY2NjZjYWEy
MmY1NGYwNzJiOTIwNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21p
c2UuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJv
bWlzZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmlu
Z0l0ZXJhdG9yLmgiCkBAIC03NjksNiArNzcwLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5p
dCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5p
bml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0
KSB7CisgICAgICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOworICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxs
cHRyOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVu
Y3Rpb24qIGhhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMCw2ICsx
NTM1LDE0IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3Ry
dWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChK
U0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5v
d25lciksIDAsIFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwog
CisgICAgLy8gU2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0
TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAg
IGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7Cisg
ICAgICAgIH0pOworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KExpbmtUaW1lQ29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0
IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVu
Y3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVy
KSwgMCwgU3RyaW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAg
IG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3Rh
bnQ6OndlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChj
b25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0yMjU4LDYgKzIyNzEsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1
Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0
aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc2hhZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDAzZWEzYTZjMzE2OWU1N2VkZjc3
MDExY2IwOGIyNjE4YTA1MGY5OTQuLjgxMzY1MWIyN2Q2NWM2ZDYyZjdiMmUxNDk1NTk4NDk5Nzdj
OGIyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaApAQCAtNDE4LDYgKzQxOCw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9i
YWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJG
dW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVj
dHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBQ
cm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODYxLDYgKzg2Miw3IEBAIHB1YmxpYzoK
ICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJl
KiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBT
dHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBT
dHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1v
dGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZVJl
Y29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLmdl
dCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKaW5kZXggZmYxYWFmNzNhNDlkM2Y3MTFmNTQyZDY1ZjBkMWRmMzc2MWNj
MjBiMS4uMDVjMTU5Yzg2ZDc4OWY0ZGNjMTY4ZWMxYmZhNmRmMjIzMjBkY2NmNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNjMyLDYgKzYzMiw4IEBAIHN0YXRpYyBUaHVu
a0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2lj
KQogICAgICAgICByZXR1cm4gcmFuZG9tVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBCb3VuZEZ1
bmN0aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuIGJvdW5kRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICBy
ZXR1cm4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTcwOSw2ICs3MTEsMjUgQEAgTmF0aXZlRXhlY3V0
YWJsZSogVk06OmdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29u
c3RydWN0KQogICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RCb3VuZEV4ZWN1dGFibGUpOwog
fQogCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0UmVtb3RlRnVuY3Rpb24oYm9vbCBpc0pTRnVu
Y3Rpb24pCit7CisgICAgYm9vbCBzbG93Q2FzZSA9ICFpc0pTRnVuY3Rpb247CisgICAgYXV0byBn
ZXRPckNyZWF0ZSA9IFsmXSAoV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgc2xvdCkgLT4gTmF0aXZl
RXhlY3V0YWJsZSogeworICAgICAgICBpZiAoYXV0byogY2FjaGVkID0gc2xvdC5nZXQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjYWNoZWQ7CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIHJlc3Vs
dCA9IGdldEhvc3RGdW5jdGlvbigKKyAgICAgICAgICAgIHNsb3dDYXNlID8gcmVtb3RlRnVuY3Rp
b25DYWxsIDogcmVtb3RlSlNGdW5jdGlvbkNhbGwsCisgICAgICAgICAgICBzbG93Q2FzZSA/IE5v
SW50cmluc2ljIDogUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgICAgICAgICAgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIFN0cmluZygpKTsKKyAgICAgICAg
c2xvdCA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9OworCisgICAgaWYgKHNsb3dDYXNlKQorICAgICAgICByZXR1cm4gZ2V0T3JD
cmVhdGUobV9zbG93UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICByZXR1cm4gZ2V0T3JD
cmVhdGUobV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKK30KKwogTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBv
bGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGExYjBiMzg1MzhiZjIwODMyMDc5ZGZj
OTQ3NGZlYTk1NTNmMzBmMGEuLmE5NjA5NjNiM2EyZDk0ZTY1ZjYyNGFjNTU2NzU4NDllNmE5MjBk
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMyLDYgKzQzMiw3IEBAIHB1
YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1
bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94
eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJv
eHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJl
bW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCkBAIC01NzIsNiArNTcz
LDkgQEAgcHVibGljOgogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Qm91bmRFeGVj
dXRhYmxlOwogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Q2FuQ29uc3RydWN0Qm91
bmRFeGVjdXRhYmxlOwogCisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX2Zhc3RSZW1vdGVG
dW5jdGlvbkV4ZWN1dGFibGU7CisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dSZW1v
dGVGdW5jdGlvbkV4ZWN1dGFibGU7CisKICAgICBSZWY8RGVmZXJyZWRXb3JrVGltZXI+IGRlZmVy
cmVkV29ya1RpbWVyOwogCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNr
T2JqZWN0OwpAQCAtNjg1LDYgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pT
RnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRS
ZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50
cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449533</attachid>
            <date>2022-01-19 17:27:21 -0800</date>
            <delta_ts>2022-01-19 18:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220119202720.patch</filename>
            <type>text/plain</type>
            <size>60777</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZWQyM2JmNjQ2OTE3N2I5OTU0ZGFmMTY2MGIyOTA5OGU0NTkyYmQxLi5jODMyYzUyYzNiZTU2NzJl
MTE0ZDFkNDdiNTI2NTQ5YWQ5MmVmZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0xOSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gdGhpcyBpbml0aWFsIHBhdGNoLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZiBKUy1i
dWlsdGluIG1hY2hpbmVyeSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgZHVwbGljYXRlZCBmdW5j
dGlvbmFsaXR5LiBBZGRpdGlvbmFsbHksIEpJVCBzdXBwb3J0CisgICAgICAgIGhhcyBub3QgYmVl
biBpbmNvcnBvcmF0ZWQgeWV0LgorCisgICAgICAgIEJyb2FkbHksIHRoZSBpZGVhIGlzIHRoYXQg
dGhlcmUgYXJlIGN1c3RvbSBob29rcyBmb3IgY2FsbGluZyBhCisgICAgICAgIEpTUmVtb3RlRnVu
Y3Rpb24sIHdoaWNoIHBlcmZvcm0gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYXZv
aWRzCisgICAgICAgIHRoZSBuZWVkIGZvciBhbGxvY2F0aW5nIGNsb3N1cmVzIHdoaWNoIGNvbnRh
aW4gdGhlIHdyYXBwaW5nIGxvZ2ljLgorCisgICAgICAgIFRPRE86CisgICAgICAgIC0gSklUL0RG
Ry9GVEwgc3VwcG9ydAorICAgICAgICAtIHN0cnVjdHVyZSBjYWNoaW5nICh1bm5lY2Vzc2FyeSBz
aW5jZSB0aGVzZSBhcmUgbm90IGNvbnN0cnVjdG9ycz8pCisgICAgICAgIC0gaW1wcm92ZWQgYmFz
ZWxpbmUgcGVyZgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBidWls
dGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlucy9TaGFkb3dSZWFsbVByb3Rv
dHlwZS5qczoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRDb21tb24uaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZpeCBZYXJySklUIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5IGJyZWFrcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBiOTg3MTIxNzVjOWE3ZDllNDQzN2ZmMzU3MjlhODRjNDFlZThjNjRm
Li4yMTQ3MjRmMDhlOTc3YjA2YTNlZjgzZTc2NWZhMzQ2M2FiZmQzYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYgKzEwODEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBy
dW50aW1lL0pTUHJveHkuaAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggOTZiZGZlMDc1Mzg0NTI4ODg4MjBjY2I2NDM5ZmIyNzAzZWM1NmZmMC4uM2M3YWNjY2NiZDJh
ZTJjNDFmNDA2MmQxZjBhYTM0MTg0Njk1Yjc3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTExMjcsNiArMTEyNyw3IEBACiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGRDA0RDQx
RDdBQjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QjQwMzI3RTI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovOyB9Owog
CQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEODFEQjY5RTVDMDBF
QzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi87IH07CiAJCTVCNzBDRkUwMURCNjlFNjYwMEVD
MjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNG
dW5jdGlvblByb3RvdHlwZS5oICovOyB9OwogCQk1QjcwQ0ZFMjFEQjY5RTY2MDBFQzIzRjkgLyog
QXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQzFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlv
bkNvbnN0cnVjdG9yLmggKi87IH07CkBAIC00MDcwLDYgKzQwNzEsOCBAQAogCQk1M0ZBMkFFMjFD
RjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJv
dG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNh
bGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0
RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3Rl
RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZW1vdGVGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVG
dW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlbW90ZUZ1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpT
QXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5j
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1
QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODIwLDggKzU4MjMsOCBAQAog
CQkJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAogCQkJCTkzMkY1QkQ3MDgyMkExQzcwMDczNjk3NSAvKiBsaWJpY3Vjb3Jl
LmR5bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDYwODIyQTFDNzAwNzM2OTc1IC8q
IGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKLQkJCQlBNTA5OEIwNDFDMTZBQTAyMDAw
ODc3OTcgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJRERCMDRG
NDIyNzhFNTZBMjAwOEQzNjc4IC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8sCisJCQkJQTUw
OThCMDQxQzE2QUEwMjAwMDg3Nzk3IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtNzM0NiwxMSArNzM0OSwxMSBAQAogCQkJCUUzODM1MDA5MjM5MEQ5MzcwMDM2MzE2
RCAvKiBXYXNtR2xvYmFsLmggKi8sCiAJCQkJMTQ4NTIxRDUyNkVBRUJERjAwQ0MxRDFBIC8qIFdh
c21IYW5kbGVySW5mby5jcHAgKi8sCiAJCQkJMTQ4NTIxRDcyNkVBRUJGRTAwQ0MxRDFBIC8qIFdh
c21IYW5kbGVySW5mby5oICovLAotCQkJCTUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAvKiBXYXNt
SVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQ4RkYzOTYxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUxRUI1QkQ4NTAwODdGRjgyIC8q
IFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2OTlFQjYwMDBCQ0FBRiAvKiBX
YXNtSW5zdGFuY2UuY3BwICovLAogCQkJCUFENUMzNkRGMUY2OTlFQjYwMDBCQ0FBRiAvKiBXYXNt
SW5zdGFuY2UuaCAqLywKKwkJCQk1MkZEQUJDMjI3ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2Vu
ZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEMDA2NTlEMUVDQUM3RkUwMDBDQTkyNiAvKiBXYXNt
TGltaXRzLmggKi8sCiAJCQkJMTRDNUFENjgyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTEludEdl
bmVyYXRvci5jcHAgKi8sCiAJCQkJMTRDNUFENjkyMkYzM0ZCRjAwRjFGQjgzIC8qIFdhc21MTElu
dEdlbmVyYXRvci5oICovLApAQCAtNzk1MSw2ICs3OTU0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUz
Q0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZB
QTUwMDlGMTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5
IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkz
OSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMx
IC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEg
LyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyog
SlNTY29wZS5jcHAgKi8sCkBAIC0xMDY1Myw2ICsxMDY1OCw3IEBACiAJCQkJOTk2QjczMUYxQkRB
MDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1v
dGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2
IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcx
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MTE1Miw2ICsxMTE1OCw3IEBACiAJCQkJMTQ4NTIxRDgyNkVBRUJGRTAwQ0MxRDFBIC8qIFdhc21I
YW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4RkYzOTgxRUI1QkRCMjAwODdGRjgy
IC8qIFdhc21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ1QzM2RTIxRjY5OUVD
MDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJGREFCQzMy
Nzg4MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEMDA2NTlFMUVDQUM4MTIwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDUwRkExRjIzNTdCRUM5MDA5M0NENEQgLyogV2FzbUxMSW50VGllclVwQ291
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdh
c21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTIwMiw3ICsxMTIwOSw2IEBA
CiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01hcEltcGxJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01h
cFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJGREFCQzMyNzg4MDc2QjAwQzE1QjU5
IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOTkzMEM4
MjJBRDNCOUEwMDUxQ0RFMiAvKiBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzOUJGQkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBXZWFrT2JqZWN0UmVmUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a1NldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggN2Ew
ZWJmZTY5ODFkMzkwMTk3NGQyM2ExYjYxZTE4MDVmZmNlMWQ4NC4uM2E2MWE4Zjk5NmNmNjA5YzI3
MjQxZDZhNjk1NmYxNTUyNThkMjQxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAt
ODk5LDYgKzg5OSw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCiBydW50aW1l
L0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcAog
cnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUv
SlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIwNTllZmM2ZWUwMGUw
Li4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFmYTczIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApAQCAtOTIsNiArOTIsNyBAQCBw
dWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1bmspIFwKICAgICB2KEJvdW5k
RnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25UaHVuaykgXAogICAgIHYoU3Bl
Y2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBcCiAgICAgdihXYXNtVGh1bmsp
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRl
eCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4ODhkLi5hMDUyNTc0ODc2ZmEx
NDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpIFwKICAgICBtYWNybyhlbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhzZW50aW5lbFN0cmluZykgXAor
ICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAgbWFjcm8oaXNSZW1vdGVGdW5j
dGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcwppbmRleCA4ZDg5MDY4
OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi4yMjk0NzFiODUwNzY4MDNiMTNlNWMy
ZTRlMmQ0MDc1ZDk1NTlkNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0zMiwzMCArMzIsNyBAQCBmdW5j
dGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHRhcmdldCkKICAgICAidXNl
IHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0KSkgewotICAgICAgICB2YXIg
d3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAgICAgICAgICAgIHZhciBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIHdyYXBwZWRBcmdzID0gQG5l
d0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGZv
ciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAgc2luY2UgdG8KLSAgICAgICAg
ICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBBIHRvIHdvcmsgaW4gcmVhbG0g
Qiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGFyZ3VtZW50cyAoZnJv
bSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0gICAgICAgICAgICAgICAgLy8g
Y2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAgICAgICAgIEBwdXRCeVZhbERp
cmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1Jl
YWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVmaW5lZCwgd3JhcHBlZEFyZ3Mp
OwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9
ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmluZygpOwotICAgICAgICAgICAg
ICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAgICAgICAgIEB0aHJvd1R5cGVF
cnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBj
b25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dSZWFsbSwgIihtc2cpID0+IG5l
dyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBta1R5
cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBAd3JhcChm
cm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwotICAgICAgICB9OworICAgICAg
ICB2YXIgd3JhcHBlZCA9IEBjcmVhdGVSZW1vdGVGdW5jdGlvbih0YXJnZXQsIGZyb21TaGFkb3dS
ZWFsbSA/IG51bGwgOiBzaGFkb3dSZWFsbSk7CiAgICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1l
J107CiAgICAgICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIx
NmFmMGY2ODlmMGFiZWE0ODBhZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkw
MDQ4OGY2ZGNiZGQyNzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGlua1RpbWVDb25zdGFudC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5n
LCBudWxscHRyKSBcCisgICAgdihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAg
IHYoaXNSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5L
X1RJTUVfQ09OU1RBTlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAKaW5kZXggMGM4ZDM1NTk2MDRhZWQwYjMzOGM0ZDk3N2EzZDYwOTdkOTJjZWQ2My4uNmI4
NjU0MjI4NGEwNGQxMzMyMThjOWYzZWFkODUyZTBkNjI2MmZlYyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGlu
ZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmlu
YWxpemF0aW9uUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCkBAIC0zMjE4LDYgKzMyMTksNyBAQCBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0
U3BhY2UsIG1vZHVsZU5hbWVzcAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBl
LCBKU05hdGl2ZVN0ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxU
eXBlLCBQcm94eU9iamVjdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xP
Vyhwcm94eVJldm9rZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFz
aDoweGI1MDZhOTM5CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVt
b3RlRnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJs
ZVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJs
ZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBh
cmFtZXRlcnNTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRj
aFBhcmFtZXRlcnMpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2Ny
aXB0RmV0Y2hlclNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZl
dGNoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggNGRlODJlYjg3NDk0Y2M3OTA2
YTM2ZWM5NTgyOTY1NWZkMWJjZDgwYi4uYWJiZGNiZmJlZjI4YTBkMzU1ZmVjZjkxNzY0YTU1MGI5
YWYzZDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTIyLDYgKzkyMiw3IEBA
IHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihw
cm94eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
cHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KHJlbW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCAyM2UwODcxOGRiZjgyMDQy
MzVlMzk5YWE2NWNiMGQ5OTA4Mjk3MWUwLi43NWY4OTAzZGZiNzdlMTA2YTViZDhmNThhMTUwZGM2
YzYyZjQ2MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVs
bChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICB2b2lkIGpp
dEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAgaW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9F
eGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbih2bSk7IH0KICNl
bHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRB
c3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEzNTUsNiArMTM1Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0
VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkg
eyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlvbihWTSYpIHsgfQogI2VuZGlmCiAKICAg
ICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihWTSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMWRkN2I3M2M2MTY3OTYyN2YzMDJk
OTE0MjJmNWJjMzdmMjE0ZTRiMC4uZDIwZWQwNzcwMDkwZjNkNzUxMTgzYjRkYjkyMTYyNjc0ZmJh
M2NmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTV2l0aFNj
b3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODMgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG8K
ICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCitzdGF0aWMgSlNW
YWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAgIGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZt
KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpj
cmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUuYXNDZWxsKCkpKTsKKworICAgIHRo
cm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4g
cmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFw
cGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2Fs
bGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24oY2FsbGVl
KSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBK
U0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gY2FsbGVlLT50YXJnZXRGdW5jdGlv
bigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldFdyYXBwZWRWYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpKTsKKworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlv
biogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24o
Y2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldFdyYXBwZWRWYWx1ZShnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpKTsKKyAgICBzY29wZS5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwg
RW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUpKQoreworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rp
b24oY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUgaGVyZSB3aGVuICJyZXRocm93aW5nIiBhbiBleGNl
cHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CisgICAgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZXhjZXB0aW9uU3RyaW5nID0gZXhjZXB0
aW9uVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICBl
bHNlCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworCisgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cit9CisKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFm
OTA2YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLmJiNTE2ZmZmMTlhODFjM2ZhZDgwNjZh
YzhjNDllOTQ2ZTdmYTlkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEpTRnVuY3Rpb247CiBjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50OwogY2xhc3MgSlNPYmplY3Q7Citj
bGFzcyBKU1JlbW90ZUZ1bmN0aW9uOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIEpTU3RyaW5nOwog
Y2xhc3MgSlNWYWx1ZTsKQEAgLTk0LDYgKzk1LDcgQEAgdHlwZWRlZiBjaGFyKiBVbnVzZWRQdHI7
CiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzYzogSlNTY29wZSoKICAgICBKc2Y6IEpT
RnVuY3Rpb24qCisgICAgSnJmOiBKU1JlbW90ZUZ1bmN0aW9uKgogICAgIEpzczogSlNTdHJpbmcq
CiAgICAgTDogSlNMZXhpY2FsRW52aXJvbm1lbnQqCiAgICAgTzogSlNPYmplY3QqCkBAIC0xNDYs
NiArMTQ4LDcgQEAgdXNpbmcgVl9KSVRPcGVyYXRpb25fR0NDSiA9IHZvaWQoSklUX09QRVJBVElP
Tl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgSlMKIHVzaW5nIEpfSklUT3BlcmF0aW9u
X0dTc2lKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIFVuaXF1ZWRT
dHJpbmdJbXBsKik7CiB1c2luZyBaX0pJVE9wZXJhdGlvbl9HSlpaID0gaW50MzJfdChKSVRfT1BF
UkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCwgaW50MzJfdCk7CiB1c2luZyBGX0pJVE9wZXJhdGlvbl9HRkpaWiA9IENhbGxGcmFtZSoo
SklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwordXNpbmcgSl9KSVRPcGVyYXRpb25f
SnJmSiA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRUUklCVVRFUyAqKShKU1JlbW90
ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpOwogCiAvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv
IGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBmYXVsdExvY2F0aW9uLCB3aGlj
aCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBvZiB0aGUgY2FsbHMgb3V0IHRv
IG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkBAIC0xNTUsNiArMTU4LDkgQEAg
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVy
RnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywgdm9pZCwgKEpT
R2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJv
d0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVjdCopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVy
LCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1ZSkpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJn
ZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVlKSk7
CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVuY3Rpb25F
eGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsKIAogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciwgdm9p
ZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCBjNjU3MWE2Y2I1N2U4MjRk
Y2M5ZTFjYTIzNWU0ZGJkZWEzMDkzM2IwLi4wM2MwY2EzNzgzYjJhZThjZmVlNmM4NjFkZDljNzQ0
NjFhNzAxZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1
ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3BlY2lhbGl6
ZWRUaHVua0pJVC5oIgpAQCAtMTQyMiw2ICsxNDIzLDIwNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2bSkKICAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
Ym91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3Io
Vk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAgaml0LnN0b3Jl
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9yZTMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5zaWduZWQgZXh0
cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxpZ25tZW50ID0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKQorICAgICAg
ICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3RhY2tNaXNhbGln
bm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBhcmd1bWVudHMg
dGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0YWlsCisgICAg
Ly8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qgc28gbG9uZyBh
cyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2FsbCwgc2luY2Ug
dGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11bGEgZm9yIHRo
ZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAgLy8gICAgIHN0
YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1lSGVhZGVyU2l6
ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKQorICAgIC8v
CisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAgIC8vCisgICAg
Ly8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgKENhbGxGcmFt
ZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJlZ2lzdGVyKSkK
KyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApOworCisgICAg
aml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OnBheWxv
YWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBHUFJJbmZv
OjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2Fs
bEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5S
ZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFuZDMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVzKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAgICAgaml0LmFk
ZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQpLCBHUFJJbmZv
OjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUgYWN0dWFsIGFy
Z3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sgd2Ugd2lsbCBu
ZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFjayBzcGFjZS4K
KworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFkZHJlc3NP
ZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBUaHJvdyBTdGFj
ayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1cEFyZ3VtZW50
czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuayk+KEdQ
UkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykpLCBHUFJJ
bmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZv
Ojpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5v
bkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBqaXQubW92ZShH
UFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAg
ICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRzIGNvbmNlbnN1
cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dyZWFsbS9p
c3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6
OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQ0Nh
bGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1ZVJlZ3MgdmFs
dWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUkluZm86OnJlZ1Q0
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0aGUgYXJndW1l
bnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUgZm9yIGNhbGxp
bmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGluIHRoZSBzbG93
IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7CisgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVG
dW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
ICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6
WmVybywgR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpyZWdUMiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAg
aGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
Z1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29k
ZUZvckNhbGwpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgbm9Db2Rl
ID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisK
KyAgICAvLyBBcmd1bWVudCBwcm9jZXNzaW5nIGxvb3A6CisgICAgLy8gRm9yIGVhY2ggYXJndW1l
bnQgKG9yZGVyIHNob3VsZCBub3QgYmUgb2JzZXJ2YWJsZSk6CisgICAgLy8gICAgIGlmIHRoZSB2
YWx1ZSBpcyBhIFByaW1pdGl2ZSwgY29weSBpdCBpbnRvIHRoZSBuZXcgY2FsbCBmcmFtZSBhcmd1
bWVudHMsIG90aGVyd2lzZQorICAgIC8vICAgICBwZXJmb3JtIHdyYXBwaW5nIGxvZ2ljLiBJZiB0
aGUgd3JhcHBpbmcgbG9naWMgcmVzdWx0cyBpbiBhIG5ldyBKU1JlbW90ZUZ1bmN0aW9uLAorICAg
IC8vICAgICBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1lJ3MgYXJndW1lbnRzLCBvdGhl
cndpc2UgaXQgbXVzdCBoYXZlIHRocm93biBhIFR5cGVFcnJvci4KKyAgICBqaXQuc3ViMzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3Ag
PSBqaXQubGFiZWwoKTsKKyAgICAgICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRpbmdUaGlzKDApKS5pbmRleGVk
QnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7
CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB2YWx1ZUlzUHJpbWl0aXZlOworICAg
ICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVn
cykpOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmpl
Y3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMSwgaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSk7CisKKyAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJU
YWc+KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCkpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KT4oR1BSSW5mbzo6cmVnVDAs
IHZhbHVlUmVncyk7CisgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAg
ICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsK
KworICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7CisgICAgICAgIGppdC5sb2Fk
Q2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BS
SW5mbzo6cmVnVDApOworCisgICAgICAgIGppdC5sb2FkUHRyKGppdC5hZGRyZXNzRm9yKGxvb3BJ
bmRleCksIEdQUkluZm86OnJlZ1QxKTsKKworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmxpbmso
JmppdCk7CisgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpj
YWxsZWVBcmd1bWVudFNsb3QoMCkuaW5kZXhlZEJ5KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBl
cnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMSkubGlua1RvKGxvb3AsICZqaXQpOwor
CisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICB9CisKKyAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTUmVtb3RlRnVuY3Rpb246Om9mZnNl
dE9mVGFyZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3JlQ2VsbChHUFJJbmZv
OjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNoVGVzdFB0cihD
Q2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QwKTsK
KyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9hZFB0cigKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsIEV4
ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlRm9yQ2Fs
bCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNlZCBvbiB0aGUgY2hl
Y2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJNNjQsIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgRU5BQkxFKEFTU0VSVCkgJiYgIUNQVShB
Uk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hlY2tOb3ROdWxsID0g
aml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBncHIpOworICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7CisgICAgICAgIGNoZWNrTm90TnVsbC5s
aW5rKCkKKyAgICB9CisjZW5kaWYKKworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdU
MCwgSlNFbnRyeVB0clRhZyk7CisgICAgLy8gRklYTUU6IGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJv
d24gd2l0aGluIGEgSlMgY2FsbCwgd2UnbGwgZW5kIHVwIGluIGFuIG91dGVyIGV4Y2VwdGlvbiBo
YW5kbGVyIGFuZCB0aGUKKyAgICAvLyByZXRocm93IGxvZ2ljIHdvbid0IG9jY3VyIGhlcmUuIE5l
ZWQgdG8gc2V0IHVwIGFuIAorICAgIENDYWxsSGVscGVyczo6SnVtcCB0YXJnZXRGdW5jdGlvbkV4
Y2VwdGlvbiA9IGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKTsKKworICAgIC8vIFdyYXAgcmV0
dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KEdQUkluZm86OnJlZ1QwKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyNlbmRpZgor
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1ByaW1pdGl2ZTsKKyAgICByZXN1
bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2VsbChyZXN1bHRSZWdzKSk7Cisg
ICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdChyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdyYXBwZWRW
YWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworCisg
ICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQUkluZm86OnJlZ1QyLCByZXN1
bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgcmVzdWx0SXNQ
cmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAg
ICBqaXQucmV0KCk7CisKKyAgICB0YXJnZXRGdW5jdGlvbkV4Y2VwdGlvbi5saW5rKCZqaXQpOwor
ICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlw
ZShvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKT4oR1BSSW5mbzo6cmVnVDIp
OworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAvLyBGYWxsIHRocm91Z2ggdG8g
anVtcCB0byBoYW5kbGVyCisKKyAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50
cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnZtKSk7Cisg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
TG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OlJl
bW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGluayhub0NvZGUsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxX
aXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAorICAgICAg
ICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciByZW1v
dGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5NDVkZjFkNWVlMS4uNTg5ZTcw
MDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4Miw4IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVyYXRvcihWTSYpOwogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmVt
b3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RI
VU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA4ZjhjNWYz
NjlkNmVhNTIwODgxNzhiN2NjODViNzI0NzUxNDc0Y2FmLi4wOThkNWY1ZDY0YmI3Y2QxNGQzNmVm
NDkzMmI2YmM5NWUzYTA2NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNDksNiArNDksNyBA
QAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgi
CiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAtMzY2LDYgKzM2Nyw3IEBAIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyRXZhbFNjcmlwdCk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdDKTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2Jq
ZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckds
b2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZXBvcnQpOwpAQCAtNjQ5
LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJn
YyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiY2xlYXJL
ZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2JqZWN0cywgMCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5jdGlvbkRvbGxhckdsb2JhbE9i
amVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25l
KSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJpc1JlbW90ZUZ1bmN0aW9uIiwg
ZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAgICAgICAgIGRvbGxhci0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xvYmFsIiksIGdsb2JhbFRo
aXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAgLTIwODMsNiArMjA4NiwxOCBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3Is
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxh
cklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAgICBKU1ZhbHVlIGFyZyA9IGNh
bGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oaXNSZW1vdGVGdW5jdGlvbihhcmcpKSk7Cit9CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKaW5kZXgg
ZmY1ZjE5MjQ2OTBmNjJmNDhjNTEzNjViNTJlNmM1NjNiNGU2Mjg5ZC4uYjgxNzU5YmNhN2VhOGQ1
NDJiYzkyZDExZmYyODdiNTBkODJmMzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuY3BwCkBAIC0yMDUsNiArMjA1LDggQEAgY29uc3QgY2hhciogaW50cmlu
c2ljTmFtZShJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gIklzVHlwZWRBcnJh
eVZpZXdJbnRyaW5zaWMiOwogICAgIGNhc2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAg
ICAgICAgIHJldHVybiAiQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOworICAgIGNhc2UgUmVt
b3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4gIlJlbW90ZUZ1bmN0aW9u
Q2FsbEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzoKICAgICAgICAgcmV0
dXJuICJKU01hcEdldEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggOGU2OGU3ZTc0ZmI3
OGNkYmQzMzI0Y2ZiZjBhMjVlZDZkMjBkNmQ1OC4uNGFlMzY1MWI1NzVlMjMxNThiZjY4OTYwYjZk
Y2NjMDlhNTdiYWYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgKQEAgLTExOCw2ICsxMTgsNyBAQCBlbnVtIEludHJpbnNpYyA6IHVpbnQ4X3QgewogICAgIFR5
cGVkQXJyYXlFbnRyaWVzSW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMs
CiAgICAgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgUmVtb3RlRnVuY3Rpb25DYWxs
SW50cmluc2ljLAogICAgIEpTTWFwR2V0SW50cmluc2ljLAogICAgIEpTTWFwSGFzSW50cmluc2lj
LAogICAgIEpTTWFwU2V0SW50cmluc2ljLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nh
c3QuaAppbmRleCA2OGMwZTViYzJlYTA0YjMwMmRjNDNkMjQ4YWI1MTg4ZjRiM2UzMGZmLi5hNjk5
MzE1OTA5OWNjYzFiNzM5NmE5N2M1OGZkNGVlMzFhNWMxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Nhc3QuaApAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgSlNUeXBlUmFuZ2Ug
ewogICAgIG1hY3JvKEpTU3ltYm9sVGFibGVPYmplY3QsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlw
ZSwgSlNUeXBlOjpNb2R1bGVFbnZpcm9ubWVudFR5cGUpIFwKICAgICBtYWNybyhKU1Njb3BlLCBK
U1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6V2l0aFNjb3BlVHlwZSkgXAogICAgIG1h
Y3JvKFN0cmluZ09iamVjdCwgSlNUeXBlOjpTdHJpbmdPYmplY3RUeXBlLCBKU1R5cGU6OkRlcml2
ZWRTdHJpbmdPYmplY3RUeXBlKSBcCisgICAgbWFjcm8oU2hhZG93UmVhbG1PYmplY3QsIEpTVHlw
ZTo6U2hhZG93UmVhbG1UeXBlLCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSkgXAogCiAKIC8vIEZv
cndhcmQgZGVjbGFyZSB0aGUgY2xhc3NlcyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBhbHJlYWR5IGV4
aXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDg0
NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJhOWZjZmQ4ZmMuLjAyZjJlNDMxNzQxNjMxYzYx
ZDI3ZjE2M2Y5YjZlMzUxMDNmZGM1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0J1
aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0
RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAgICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1
bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlbW90ZUZ1bmN0aW9uKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25Jbmxp
bmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2IwYWQ5NzIxMmU4OGY5ODdhNWRiMDguLjQ3ODU0YTQ2
NTQwZmY2MzdkZDFmNWI5MTU5ZDQzNzA4YTFiYWM5MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0YWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTc4LDYgKzc5LDExIEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gIWlzSG9zdEZ1bmN0aW9uKCkgJiYganNFeGVj
dXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7CiB9CiAKK2lubGluZSBib29s
IEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxib29sPihqc0R5bmFtaWNDYXN0PGNvbnN0IEpTUmVtb3RlRnVuY3Rpb24qPihnbG9i
YWxPYmplY3QoKS0+dm0oKSwgdGhpcykpOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5j
dGlvbk5vbklubGluZSgpKTsKQEAgLTk4LDYgKzEwNCwxNCBAQCBpbmxpbmUgYm9vbCBpc0hvc3RG
dW5jdGlvbihKU1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
bikKICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rp
b247CiB9CiAKK2lubGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZ2V0SlNGdW5j
dGlvbih2YWx1ZSkpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKTsKK30KKwogaW5saW5lIGJv
b2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0
aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyODY0YTE5NWY1
NDJlMDk0MzZhZmY3ODMxMWM0OTZiNTM1MDIxMzdhLi41MmI4NWQxZThlMzhkN2IzZWY2NjZjYWEy
MmY1NGYwNzJiOTIwNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21p
c2UuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJv
bWlzZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmlu
Z0l0ZXJhdG9yLmgiCkBAIC03NjksNiArNzcwLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5p
dCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3Ry
dWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5p
bml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0
KSB7CisgICAgICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSkpOworICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxs
cHRyOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVu
Y3Rpb24qIGhhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMCw2ICsx
NTM1LDE0IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3Ry
dWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChK
U0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5v
d25lciksIDAsIFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwog
CisgICAgLy8gU2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0
TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAg
IGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7Cisg
ICAgICAgIH0pOworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KExpbmtUaW1lQ29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0
IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVu
Y3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVy
KSwgMCwgU3RyaW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAg
IG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3Rh
bnQ6OndlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChj
b25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0yMjU4LDYgKzIyNzEsNyBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0
b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1
Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0
aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fc2hhZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDAzZWEzYTZjMzE2OWU1N2VkZjc3
MDExY2IwOGIyNjE4YTA1MGY5OTQuLjgxMzY1MWIyN2Q2NWM2ZDYyZjdiMmUxNDk1NTk4NDk5Nzdj
OGIyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaApAQCAtNDE4LDYgKzQxOCw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9i
YWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJG
dW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVj
dHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBQ
cm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODYxLDYgKzg2Miw3IEBAIHB1YmxpYzoK
ICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJl
KiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBT
dHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBT
dHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1v
dGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZVJl
Y29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLmdl
dCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFk
Yjg3MzYwYmMxNWYzZjAxNDBjOThiODc3NjM5YWIxZTkxNDJjYWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcApAQCAt
MCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICog
QXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKKworI2luY2x1
ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1JlbW90ZUZ1bmN0aW9u
OjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKworSlNSZW1vdGVGdW5j
dGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0NlbGwqIHRhcmdldCkKKyAgICA6IEJhc2Uodm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKQorICAgICwgbV90YXJnZXQodm0sIHRoaXMsIHRhcmdldCkKK3sKK30KKworc3Rh
dGljIEpTVmFsdWUgd3JhcFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlKCkp
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkg
eworICAgICAgICBKU0NhbGxlZSogdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8SlNDYWxsZWUqPih2YWx1
ZS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTUmVtb3RlRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB0YXJnZXQpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFyZ3VtZW50KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFs
dWUpOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJl
IGNhbGxhYmxlIG9yIHByaW1pdGl2ZSIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSB3cmFwclJldHVyblZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShn
bG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQu
aXNFbXB0eSgpKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
dmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1pdGl2
ZSIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihy
ZW1vdGVKU0Z1bmN0aW9uQ2FsbCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3RlRnVu
Y3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5j
dGlvbigpKTsKKyAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSByZW1vdGVGdW5jdGlvbi0+dGFyZ2V0
RnVuY3Rpb24oKTsKKyAgICBBU1NFUlQodGFyZ2V0KTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiB0
YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXQtPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKTsK
KworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgYXJncy5hcHBl
bmQod3JhcHBlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZs
b3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHRhcmdldC0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChl
eGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBl
eGVjdXRhYmxlIHRvIGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQor
CisgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXQpOworICAgIEFTU0VS
VChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpOb25lKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGNhbGwodGFyZ2V0R2xvYmFsT2JqZWN0LCB0YXJnZXQsIGNhbGxEYXRhLCBqc1VuZGVmaW5l
ZCgpLCBhcmdzKTsKKworICAgIC8vIEhpZGUgZXhjZXB0aW9ucyBmcm9tIGNhbGxpbmcgcmVhbG0K
KyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImFuIGVy
cm9yIG9jY3VycmVkIGluIHJlbW90ZSByZWFsbSIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKKyAgICB9CisKKyAgICBhdXRvIHdyYXBwZWRSZXN1bHQgPSB3cmFwclJldHVyblZh
bHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBwZWRSZXN1bHQpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9uQ2FsbCwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVt
b3RlRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVG
dW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbigpKTsKKyAgICBKU0NlbGwqIHRhcmdldCA9IHJlbW90
ZUZ1bmN0aW9uLT50YXJnZXQoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2Jq
ZWN0ID0gdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgd3JhcHBlZFZhbHVl
ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQod3JhcHBlZFZhbHVl
KTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSkgeworICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIGF1dG8gY2FsbERhdGEgPSBn
ZXRDYWxsRGF0YSh2bSwgdGFyZ2V0KTsKKyAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxs
RGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9i
amVjdCwgdGFyZ2V0LCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisKKyAgICAvLyBI
aWRlIGV4Y2VwdGlvbnMgZnJvbSBjYWxsaW5nIHJlYWxtCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJhbiBlcnJvciBvY2N1cnJlZCBpbiByZW1vdGUg
cmVhbG0iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAg
YXV0byB3cmFwcGVkUmVzdWx0ID0gd3JhcFZhbHVlKHRhcmdldEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCByZXN1bHQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKHdyYXBwZWRSZXN1bHQpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGlz
UmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKHN0YXRp
Y19jYXN0PGJvb2w+KGpzRHluYW1pY0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGdsb2JhbE9iamVj
dC0+dm0oKSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKSk7Cit9CisKK0pTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID09IDIpOworICAg
IEpTVmFsdWUgdGFyZ2V0ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICBB
U1NFUlQodGFyZ2V0LmlzQ2FsbGFibGUodm0pKTsKKworICAgIEpTQ2VsbCogdGFyZ2V0Q2FsbGFi
bGUgPSB0YXJnZXQuYXNDZWxsKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIGRlc3RpbmF0aW9uR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmIChhdXRvIHNoYWRv
d1JlYWxtID0ganNEeW5hbWljQ2FzdDxTaGFkb3dSZWFsbU9iamVjdCo+KHZtLCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2Jq
ZWN0ID0gc2hhZG93UmVhbG0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0
ID0gSlNSZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCwg
dGFyZ2V0Q2FsbGFibGUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCkpOworfQorCitpbmxpbmUgU3RydWN0dXJlKiBnZXRSZW1vdGVGdW5jdGlv
blN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgZ2xvYmFsT2JqZWN0LWF3YXJlIHN0cnVjdHVyZSBjYWNoaW5nCisgICAgcmV0
dXJuIGdsb2JhbE9iamVjdC0+cmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUoKTsKK30KKworSlNSZW1v
dGVGdW5jdGlvbiogSlNSZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiB0YXJnZXRDYWxsYWJsZSkKK3sKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQodGFyZ2V0Q2FsbGFi
bGUgJiYgdGFyZ2V0Q2FsbGFibGUtPmlzQ2FsbGFibGUodm0pKTsKKyAgICBpZiAoYXV0byByZW1v
dGUgPSBqc0R5bmFtaWNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPih2bSwgdGFyZ2V0Q2FsbGFibGUp
KSB7CisgICAgICAgIHRhcmdldENhbGxhYmxlID0gcmVtb3RlLT50YXJnZXQoKTsKKyAgICAgICAg
QVNTRVJUKCFKU0M6OmlzUmVtb3RlRnVuY3Rpb24odGFyZ2V0Q2FsbGFibGUpKTsKKyAgICB9CisK
KyAgICBib29sIGlzSlNGdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odGFyZ2V0Q2FsbGFibGUpOwor
ICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRSZW1vdGVGdW5jdGlvbihp
c0pTRnVuY3Rpb24pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVtb3RlRnVuY3Rp
b25TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgSlNSZW1vdGVGdW5jdGlvbih2
bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHRhcmdldENhbGxhYmxlKTsK
KworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
OworfQorCit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBp
bmZvKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZW1vdGVG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNSZW1vdGVG
dW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworCisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXQpOworfQorCitERUZJ
TkVfVklTSVRfQ0hJTERSRU4oSlNSZW1vdGVGdW5jdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5j
dGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ0NjNjY2QxZjFiODliNmM5YjFlZWZlY2YyOGZkOWMzN2M5OGI3NDUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1
bmN0aW9uLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdXhpbGlhcnlCYXJyaWVyLmgiCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvVGFnZ2VkQXJyYXlTdG9yYWdlUHRy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJlbW90
ZUpTRnVuY3Rpb25DYWxsKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rp
b25DYWxsKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbik7CitK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKTsKKworLy8gSlNS
ZW1vdGVGdW5jdGlvbiBjcmVhdGVzIGEgYnJpZGdlIGJldHdlZW4gaXRzIG5hdGl2ZSBSZWFsbSBh
bmQgYSByZW1vdGUgb25lLgorLy8gV2hlbiBpbnZva2VkLCBhcmd1bWVudHMgYXJlIHdyYXBwZWQg
dG8gcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uIGFjcm9zcyB0aGUgcmVhbG0gYm91bmRhcnku
CisvLyBUaGUgcmV0dXJuIHZhbHVlIGFuZCBhbnkgYWJydXB0IGNvbXBsZXRpb25zIGFyZSBhbHNv
IGZpbHRlcmVkLgorY2xhc3MgSlNSZW1vdGVGdW5jdGlvbiBmaW5hbCA6IHB1YmxpYyBKU0Z1bmN0
aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4K
KyAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2bS5yZW1vdGVGdW5jdGlvblNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTUmVtb3RlRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNDZWxsKiB0YXJnZXRDYWxsYWJsZSk7CisKKyAgICBKU0NlbGwqIHRh
cmdldCgpIHsgcmV0dXJuIG1fdGFyZ2V0LmdldCgpOyB9CisgICAgSlNGdW5jdGlvbiogdGFyZ2V0
RnVuY3Rpb24oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oZ2V0SlNGdW5jdGlv
bih0YXJnZXQoKSkpOyB9CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCgp
IHsgcmV0dXJuIHRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVjdCgpOyB9CisKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9i
YWxPYmplY3QpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOyAKKyAgICB9CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRh
cmdldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1JlbW90ZUZ1bmN0aW9uLCBtX3Rhcmdl
dCk7IH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKK3ByaXZhdGU6CisgICAgSlNSZW1v
dGVGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIEpTQ2VsbCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICBXcml0ZUJhcnJpZXI8
SlNDZWxsPiBtX3RhcmdldDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAppbmRleCBmZjFhYWY3M2E0OWQzZjcxMWY1NDJkNjVmMGQxZGYzNzYxY2MyMGIxLi4wNWMxNTlj
ODZkNzg5ZjRkY2MxNjhlYzFiZmE2ZGYyMjMyMGRjY2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCkBAIC02MzIsNiArNjMyLDggQEAgc3RhdGljIFRodW5rR2VuZXJhdG9yIHRo
dW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJl
dHVybiByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVuY3Rpb25DYWxsSW50
cmluc2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CisgICAg
Y2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiByZW1vdGVG
dW5jdGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQpAQCAtNzA5LDYgKzcxMSwyNSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0
Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpCiAgICAg
cmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9CiAKK05hdGl2ZUV4
ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKK3sKKyAg
ICBib29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdldE9yQ3JlYXRlID0g
WyZdIChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVFeGVjdXRhYmxlKiB7
CisgICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAgICAgICAgICAgcmV0
dXJuIGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0ID0gZ2V0SG9zdEZ1
bmN0aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlvbkNhbGwgOiByZW1v
dGVKU0Z1bmN0aW9uQ2FsbCwKKyAgICAgICAgICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMgOiBS
ZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgICAgICAgICBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3RyaW5nKCkpOworICAgICAgICBzbG90ID0gV2VhazxO
YXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07
CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAgICAgIHJldHVybiBnZXRPckNyZWF0ZShtX3Nsb3dS
ZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RS
ZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKaW5kZXggYTFiMGIzODUzOGJmMjA4MzIwNzlkZmM5NDc0ZmVhOTU1M2Yz
MGYwYS4uYTk2MDk2M2IzYTJkOTRlNjVmNjI0YWM1NTY3NTg0OWU2YTkyMGRmYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00MzIsNiArNDMyLDcgQEAgcHVibGljOgogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2Up
CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25T
cGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihz
Y3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKQEAgLTU3Miw2ICs1NzMsOSBAQCBwdWJsaWM6
CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dCb3VuZEV4ZWN1dGFibGU7CiAgICAg
V2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dDYW5Db25zdHJ1Y3RCb3VuZEV4ZWN1dGFibGU7
CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhlY3V0
YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd1JlbW90ZUZ1bmN0aW9uRXhl
Y3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJlZFdvcmtUaW1lcj4gZGVmZXJyZWRXb3JrVGltZXI7
CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CkBAIC02
ODUsNiArNjg5LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5j
dGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rv
ciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9v
bCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9u
KGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0
Q1RJTGlua0NhbGwoKTsK
</data>
<flag name="commit-queue"
          id="475656"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449540</attachid>
            <date>2022-01-19 18:16:02 -0800</date>
            <delta_ts>2022-01-20 06:41:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220119211600.patch</filename>
            <type>text/plain</type>
            <size>60818</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZWQyM2JmNjQ2OTE3N2I5OTU0ZGFmMTY2MGIyOTA5OGU0NTkyYmQxLi5jODMyYzUyYzNiZTU2NzJl
MTE0ZDFkNDdiNTI2NTQ5YWQ5MmVmZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0xOSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gdGhpcyBpbml0aWFsIHBhdGNoLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZiBKUy1i
dWlsdGluIG1hY2hpbmVyeSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgZHVwbGljYXRlZCBmdW5j
dGlvbmFsaXR5LiBBZGRpdGlvbmFsbHksIEpJVCBzdXBwb3J0CisgICAgICAgIGhhcyBub3QgYmVl
biBpbmNvcnBvcmF0ZWQgeWV0LgorCisgICAgICAgIEJyb2FkbHksIHRoZSBpZGVhIGlzIHRoYXQg
dGhlcmUgYXJlIGN1c3RvbSBob29rcyBmb3IgY2FsbGluZyBhCisgICAgICAgIEpTUmVtb3RlRnVu
Y3Rpb24sIHdoaWNoIHBlcmZvcm0gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYXZv
aWRzCisgICAgICAgIHRoZSBuZWVkIGZvciBhbGxvY2F0aW5nIGNsb3N1cmVzIHdoaWNoIGNvbnRh
aW4gdGhlIHdyYXBwaW5nIGxvZ2ljLgorCisgICAgICAgIFRPRE86CisgICAgICAgIC0gSklUL0RG
Ry9GVEwgc3VwcG9ydAorICAgICAgICAtIHN0cnVjdHVyZSBjYWNoaW5nICh1bm5lY2Vzc2FyeSBz
aW5jZSB0aGVzZSBhcmUgbm90IGNvbnN0cnVjdG9ycz8pCisgICAgICAgIC0gaW1wcm92ZWQgYmFz
ZWxpbmUgcGVyZgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBidWls
dGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlucy9TaGFkb3dSZWFsbVByb3Rv
dHlwZS5qczoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRDb21tb24uaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEZpeCBZYXJySklUIGJhY2t0cmFj
a0NoYXJhY3RlckNsYXNzTm9uR3JlZWR5IGJyZWFrcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBiOTg3MTIxNzVjOWE3ZDllNDQzN2ZmMzU3MjlhODRjNDFlZThjNjRm
Li4yMTQ3MjRmMDhlOTc3YjA2YTNlZjgzZTc2NWZhMzQ2M2FiZmQzYWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDgxLDYgKzEwODEsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBy
dW50aW1lL0pTUHJveHkuaAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVu
dGltZS9KU1J1bkxvb3BUaW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1l
L0pTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggOTZiZGZlMDc1Mzg0NTI4ODg4MjBjY2I2NDM5ZmIyNzAzZWM1NmZmMC4uYzc5MDI3MjYzMDNl
ZTkyNGEwZGUzYmFjNTJjZDNiYmY0YzdmODAwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTExMjcsNiArMTEyNyw3IEBACiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJ
bnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJ
bnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcx
MUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGRDA0RDQx
RDdBQjI5MTAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1QjQwMzI3RTI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVCNzBDRkRFMURCNjlF
NjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5j
RnVuY3Rpb24uaCAqLzsgfTsKIAkJNUI3MENGRTAxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVCNzBDRkRBMURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBl
LmggKi87IH07CiAJCTVCNzBDRkUyMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVCNzBDRkRDMURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuaCAq
LzsgfTsKQEAgLTQwNzAsNiArNDA3MSw4IEBACiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAv
KiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTNGRDA0RDExRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3
RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1QjQwMzI3RTI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1JlbW90ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVCNDAzMjdGMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTUmVtb3RlRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QjcwQ0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEOTFEQjY5RTVDMDBFQzIzRjkgLyogSlNB
c3luY0Z1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
QXN5bmNGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkRB
MURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MjAsOCArNTgyMyw4IEBACiAJCQkJQTczMUIyNUExMzAw
OTM4ODAwNDBBN0ZBIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJ
CQkJOTMyRjVCRDcwODIyQTFDNzAwNzM2OTc1IC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3
b3JrcyAqLywKIAkJCQk5MzJGNUJENjA4MjJBMUM3MDA3MzY5NzUgLyogbGlib2JqYy5keWxpYiBp
biBGcmFtZXdvcmtzICovLAotCQkJCUE1MDk4QjA0MUMxNkFBMDIwMDA4Nzc5NyAvKiBTZWN1cml0
eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQlEREIwNEY0MjI3OEU1NkEyMDA4RDM2
NzggLyogbGliV1RGLmEgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBNTA5OEIwNDFDMTZBQTAyMDAw
ODc3OTcgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03MzQ2LDEx
ICs3MzQ5LDExIEBACiAJCQkJRTM4MzUwMDkyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwu
aCAqLywKIAkJCQkxNDg1MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNw
cCAqLywKIAkJCQkxNDg1MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmgg
Ki8sCi0JCQkJNTJGREFCQzIyNzg4MDc2OTAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBl
cnMuaCAqLywKIAkJCQlBRDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1l
LmNwcCAqLywKIAkJCQlBRDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1l
LmggKi8sCiAJCQkJQUQ1QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAg
Ki8sCiAJCQkJQUQ1QzM2REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAor
CQkJCTUyRkRBQkMyMjc4ODA3NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmgg
Ki8sCiAJCQkJQUQwMDY1OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJ
CQkxNEM1QUQ2ODIyRjMzRkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmNwcCAqLywK
IAkJCQkxNEM1QUQ2OTIyRjMzRkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmggKi8s
CkBAIC03OTUxLDYgKzc5NTQsOCBAQAogCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLywKIAkJCQk4NjI1NTNDRTE2MTM2QUE1MDA5RjE3
RDAgLyogSlNQcm94eS5jcHAgKi8sCiAJCQkJODYyNTUzQ0YxNjEzNkFBNTAwOUYxN0QwIC8qIEpT
UHJveHkuaCAqLywKKwkJCQk1QjQwMzI3RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5j
dGlvbi5jcHAgKi8sCisJCQkJNUI0MDMyN0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVu
Y3Rpb24uaCAqLywKIAkJCQk1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGlt
ZXIuY3BwICovLAogCQkJCTUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1l
ci5oICovLAogCQkJCTE0ODc0QUUxMTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLywK
QEAgLTEwNjUzLDYgKzEwNjU4LDcgQEAKIAkJCQk5OTZCNzMxRjFCREEwOEVGMDAzMzFCODQgLyog
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYx
REYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYyNTUzRDIxNjEzNkUxQTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTUyQzM4MDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1JldGFpblB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMx
IC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTExMTUyLDYgKzExMTU4LDcg
QEAKIAkJCQkxNDg1MjFEODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JO
YW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2Fz
bUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkg
LyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQwMDY1OUUx
RUNBQzgxMjAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTBG
QTFGMjM1N0JFQzkwMDkzQ0Q0RCAvKiBXYXNtTExJbnRUaWVyVXBDb3VudGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1M0U5RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRz
LmggaW4gSGVhZGVycyAqLywKQEAgLTExMjAyLDcgKzExMjA5LDYgQEAKIAkJCQlFM0EzMkJDNzFG
QzgzMTQ3MDA3RDdFNzYgLyogV2Vha01hcEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOTNB
REQ4MUZFNzAyRDAwMDIyRDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3Q0EzQUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKLQkJCQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyogV2FzbUlSR2VuZXJh
dG9ySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5OTMwQzgyMkFEM0I5QTAwNTFDREUy
IC8qIFdlYWtPYmplY3RSZWZDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZC
QUUyMkFEM0MzQTAwMjNGNEMwIC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0LmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3YTBlYmZlNjk4MWQzOTAxOTc0
ZDIzYTFiNjFlMTgwNWZmY2UxZDg0Li4zYTYxYThmOTk2Y2Y2MDljMjcyNDFkNmE2OTU2ZjE1NTI1
OGQyNDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC04OTksNiArODk5LDcgQEAg
cnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90
eXBlLmNwcAogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCiBydW50aW1lL0pT
UHJveHkuY3BwCitydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTUnVuTG9v
cFRpbWVyLmNwcAogcnVudGltZS9KU1Njb3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4
IDI4NWRmMGQxYTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZlZTAwZTAuLjE4NWFhMzFmNjFkOTA0
NzVjOTdhZjBhMWJiMjYzZjdiMGE5YWZhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2KERG
R1RodW5rKSBcCiAgICAgdihGVExUaHVuaykgXAogICAgIHYoQm91bmRGdW5jdGlvblRodW5rKSBc
CisgICAgdihSZW1vdGVGdW5jdGlvblRodW5rKSBcCiAgICAgdihTcGVjaWFsaXplZFRodW5rKSBc
CiAgICAgdihWaXJ0dWFsVGh1bmspIFwKICAgICB2KFdhc21UaHVuaykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDgwYTg3ZWIwMDdhOWQz
OGM3MTU0Mjg5NjU4Zjg4MTM4NDZiYzg4OGQuLmEwNTI1NzQ4NzZmYTE0OGFjOTgzYmM0MTcxZjQx
NTVhNzBkM2YwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmgKQEAgLTE4OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhv
dXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAogICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvcikgXAogICAgIG1hY3JvKHNlbnRpbmVsU3RyaW5nKSBcCisgICAgbWFjcm8oY3JlYXRl
UmVtb3RlRnVuY3Rpb24pIFwKKyAgICBtYWNybyhpc1JlbW90ZUZ1bmN0aW9uKSBcCiAKIAogbmFt
ZXNwYWNlIFN5bWJvbHMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCmluZGV4IDhkODkwNjg4ZDdhN2QxNzNhZmRiZjRm
MDEyODE1M2E2YmU5YTRjNGIuLjIyOTQ3MWI4NTA3NjgwM2IxM2U1YzJlNGUyZDQwNzVkOTU1OWQ2
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFs
bVByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93
UmVhbG1Qcm90b3R5cGUuanMKQEAgLTMyLDMwICszMiw3IEBAIGZ1bmN0aW9uIHdyYXAoZnJvbVNo
YWRvd1JlYWxtLCBzaGFkb3dSZWFsbSwgdGFyZ2V0KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAg
IGlmIChAaXNDYWxsYWJsZSh0YXJnZXQpKSB7Ci0gICAgICAgIHZhciB3cmFwcGVkID0gZnVuY3Rp
b24oLyogYXJncy4uLiAqLykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGg7Ci0gICAgICAgICAgICB2YXIgd3JhcHBlZEFyZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZShs
ZW5ndGgpOwotICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
KytpbmRleCkKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIGFyZ3VtZW50cywgd2Ug
ZmxpcCBgZnJvbVNoYWRvd1JlYWxtYCBzaW5jZSB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAg
YSBmdW5jdGlvbiBmcm9tIHJlYWxtIEEgdG8gd29yayBpbiByZWFsbSBCLCB3ZSBuZWVkIHRvCi0g
ICAgICAgICAgICAgICAgLy8gd3JhcCB0aGUgYXJndW1lbnRzIChmcm9tIHJlYWxtIEIpIHRvIHdv
cmsgaW4gcmVhbG0gQSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSB3cmFw
cGVkIGZ1bmN0aW9uCi0gICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHdyYXBwZWRBcmdz
LCBpbmRleCwgQHdyYXAoIWZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIGFyZ3VtZW50c1tp
bmRleF0pKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
ID0gdGFyZ2V0LkBhcHBseShAdW5kZWZpbmVkLCB3cmFwcGVkQXJncyk7Ci0gICAgICAgICAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gIndyYXBwZWQgZnVuY3Rp
b24gdGhyZXc6ICIgKyBlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb21TaGFk
b3dSZWFsbSkKLSAgICAgICAgICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKG1zZyk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1rVHlwZUVycm9y
ID0gQGV2YWxJblJlYWxtKHNoYWRvd1JlYWxtLCAiKG1zZykgPT4gbmV3IFR5cGVFcnJvcihtc2cp
Iik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG1rVHlwZUVycm9yLkBhcHBseSht
c2cpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEB3cmFwKGZyb21TaGFkb3dSZWFsbSwg
c2hhZG93UmVhbG0sIHJlc3VsdCk7Ci0gICAgICAgIH07CisgICAgICAgIHZhciB3cmFwcGVkID0g
QGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNo
YWRvd1JlYWxtKTsKICAgICAgICAgZGVsZXRlIHdyYXBwZWRbJ25hbWUnXTsKICAgICAgICAgZGVs
ZXRlIHdyYXBwZWRbJ2xlbmd0aCddOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaAppbmRleCBlNjZlOGZkYjE2YWYwZjY4OWYwYWJlYTQ4
MGFlY2I0NTJhYzhiOWYxLi5kZjk5NDJmMjEyNTNiMDgyNmQzYTdkOTAwNDg4ZjZkY2JkZDI3OWQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25z
dGFudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0
YW50LmgKQEAgLTExNyw2ICsxMTcsOCBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICB2KGNy
ZWF0ZVByaXZhdGVTeW1ib2wsIG51bGxwdHIpIFwKICAgICB2KGVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbnVsbHB0cikgXAogICAgIHYoc2VudGluZWxTdHJpbmcsIG51bGxwdHIpIFwKKyAg
ICB2KGNyZWF0ZVJlbW90ZUZ1bmN0aW9uLCBudWxscHRyKSBcCisgICAgdihpc1JlbW90ZUZ1bmN0
aW9uLCBudWxscHRyKSBcCiAKIAogI2RlZmluZSBERUNMQVJFX0xJTktfVElNRV9DT05TVEFOVChu
YW1lLCBjb2RlKSBuYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCAwYzhk
MzU1OTYwNGFlZDBiMzM4YzRkOTc3YTNkNjA5N2Q5MmNlZDYzLi42Yjg2NTQyMjg0YTA0ZDEzMzIx
OGM5ZjNlYWQ4NTJlMGQ2MjYyZmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApA
QCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCiAjaW5jbHVk
ZSAiSklUV29ya2xpc3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaW5hbGl6YXRpb25SZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaCIKICNpbmNsdWRlICJKU1dlYWtNYXAuaCIKICNpbmNsdWRlICJKU1dl
YWtPYmplY3RSZWYuaCIKQEAgLTMyMTgsNiArMzIxOSw3IEBAIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhtb2R1bGVOYW1lc3BhY2VPYmplY3RTcGFjZSwgbW9kdWxlTmFt
ZXNwCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobmF0aXZlU3RkRnVu
Y3Rpb25TcGFjZSwgbmF0aXZlU3RkRnVuY3Rpb25IZWFwQ2VsbFR5cGUsIEpTTmF0aXZlU3RkRnVu
Y3Rpb24pIC8vIEhhc2g6MHg3MGVkNjFlNAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHByb3h5T2JqZWN0U3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFByb3h5T2JqZWN0
KQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHByb3h5UmV2b2tlU3Bh
Y2UsIGNlbGxIZWFwQ2VsbFR5cGUsIFByb3h5UmV2b2tlKSAvLyBIYXNoOjB4YjUwNmE5MzkKK0RZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhyZW1vdGVGdW5jdGlvblNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBKU1JlbW90ZUZ1bmN0aW9uKQogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UsIGRlc3RydWN0
aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKQogRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoUGFyYW1ldGVycykKIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaGVyU3BhY2Us
IGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEpTU2NyaXB0RmV0Y2hlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAppbmRleCA0ZGU4MmViODc0OTRjYzc5MDZhMzZlYzk1ODI5NjU1ZmQx
YmNkODBiLi5hYmJkY2JmYmVmMjhhMGQzNTVmZWNmOTE3NjRhNTUwYjlhZjNkNTNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC05MjIsNiArOTIyLDcgQEAgcHVibGljOgogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2Up
CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNl
KQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25T
cGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3Vt
ZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihz
Y3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIzZTA4NzE4ZGJmODIwNDIzNWUzOTlhYTY1Y2IwZDk5
MDgyOTcxZTAuLjc1Zjg5MDNkZmI3N2UxMDZhNWJkOGY1OGExNTBkYzZjNjJmNDYyYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtMTM0NSw2ICsx
MzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaml0QXNzZXJ0SXNOdWxsKEdQUlJlZyk7CiAgICAg
dm9pZCBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIHZvaWQgaml0QXNzZXJ0QXJndW1lbnRD
b3VudFNhbmUoKTsKKyAgICBpbmxpbmUgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlvbihWTSYgdm0p
IHsgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKHZtKTsgfQogI2Vsc2UKICAgICB2b2lkIGpp
dEFzc2VydElzSW50MzIoR1BSUmVnKSB7IH0KICAgICB2b2lkIGppdEFzc2VydElzSlNJbnQzMihH
UFJSZWcpIHsgfQpAQCAtMTM1NSw2ICsxMzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgaml0QXNz
ZXJ0SXNOdWxsKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpIHsg
fQogICAgIHZvaWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKSB7IH0KKyAgICB2b2lkIGpp
dEFzc2VydE5vRXhjZXB0aW9uKFZNJikgeyB9CiAjZW5kaWYKIAogICAgIHZvaWQgaml0UmVsZWFz
ZUFzc2VydE5vRXhjZXB0aW9uKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAppbmRleCAxZGQ3YjczYzYxNjc5NjI3ZjMwMmQ5MTQyMmY1YmMzN2YyMTRl
NGIwLi5kMjBlZDA3NzAwOTBmM2Q3NTExODNiNGRiOTIxNjI2NzRmYmEzY2YwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTU1LDYgKzU1LDcgQEAK
ICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTSW50ZXJu
YWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRl
ICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgpAQCAt
MTE1LDYgKzExNiw4MyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChKU0dsbwogICAgIEFTU0VSVCh2bS50
YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGdldFdyYXBwZWRW
YWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0
R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgdmFsdWUpOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0pKQorICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGFyZ2V0
R2xvYmFsT2JqZWN0LCB2YWx1ZS5hc0NlbGwoKSkpOworCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBj
YWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdl
dCwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwor
ICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVGdW5jdGlvbihjYWxsZWUpKTsKKworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiB0
YXJnZXRHbG9iYWxPYmplY3QgPSBjYWxsZWUtPnRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVj
dCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwg
dGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCkpOworCisg
ICAgc2NvcGUucmVsZWFzZSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
K30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZv
ckNhbGxlciwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
Y2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVGdW5jdGlvbihjYWxsZWUpKTsKKworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgcmVz
dWx0ID0gZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCkpOworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uLCBFbmNvZGVkSlNWYWx1ZSwg
KEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSkpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1vdGVGdW5jdGlvbihjYWxsZWUpKTsKKwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAvLyBXZSBzaG91
bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJFTEVB
U0VfQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
ID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKKworICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmcgPSBleGNlcHRpb25WYWx1ZS50b1dURlN0
cmluZyhnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBp
ZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKQorICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25TdHJpbmcpOworICAgIGVsc2UKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisKKyAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRl
cmF0b3JSZXN1bHRJc05vdE9iamVjdCwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggNGI1ZDAxMWY5MDZhMzAzMmUyYTViODUw
YTNhMGI5YTRjNjgzNGJmMy4uYmI1MTZmZmYxOWE4MWMzZmFkODA2NmFjOGM0OWU5NDZlN2ZhOWRh
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTUyLDYg
KzUyLDcgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3Mg
SlNMZXhpY2FsRW52aXJvbm1lbnQ7CiBjbGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUmVtb3RlRnVu
Y3Rpb247CiBjbGFzcyBKU1Njb3BlOwogY2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBKU1ZhbHVlOwpA
QCAtOTQsNiArOTUsNyBAQCB0eXBlZGVmIGNoYXIqIFVudXNlZFB0cjsKICAgICBKY3A6IGNvbnN0
IEpTVmFsdWUqCiAgICAgSnNjOiBKU1Njb3BlKgogICAgIEpzZjogSlNGdW5jdGlvbioKKyAgICBK
cmY6IEpTUmVtb3RlRnVuY3Rpb24qCiAgICAgSnNzOiBKU1N0cmluZyoKICAgICBMOiBKU0xleGlj
YWxFbnZpcm9ubWVudCoKICAgICBPOiBKU09iamVjdCoKQEAgLTE0Niw2ICsxNDgsNyBAQCB1c2lu
ZyBWX0pJVE9wZXJhdGlvbl9HQ0NKID0gdm9pZChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKiko
SlNHbG9iYWxPYmplY3QqLCBKUwogdXNpbmcgSl9KSVRPcGVyYXRpb25fR1NzaUpJID0gRW5jb2Rl
ZEpTVmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKIHVz
aW5nIFpfSklUT3BlcmF0aW9uX0dKWlogPSBpbnQzMl90KEpJVF9PUEVSQVRJT05fQVRUUklCVVRF
UyAqKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90KTsK
IHVzaW5nIEZfSklUT3BlcmF0aW9uX0dGSlpaID0gQ2FsbEZyYW1lKihKSVRfT1BFUkFUSU9OX0FU
VFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSwg
aW50MzJfdCwgaW50MzJfdCk7Cit1c2luZyBKX0pJVE9wZXJhdGlvbl9KcmZKID0gRW5jb2RlZEpT
VmFsdWUoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNv
ZGVkSlNWYWx1ZSk7CiAKIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9va3VwIGFuIGV4Y2Vw
dGlvbiBoYW5kZXIsIGtleWVkIGJ5IGZhdWx0TG9jYXRpb24sIHdoaWNoIGlzCiAvLyB0aGUgcmV0
dXJuIGxvY2F0aW9uIGZyb20gb25lIG9mIHRoZSBjYWxscyBvdXQgdG8gb25lIG9mIHRoZSBoZWxw
ZXIgb3BlcmF0aW9ucyBhYm92ZS4KQEAgLTE1NSw2ICsxNTgsOSBAQCBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUs
IHZvaWQsCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0
aW9uLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqKSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJ
c05vdE9iamVjdCwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVl
LCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpTVmFs
dWUsIChKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2Rl
ZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCB2b2lkLCAoQ29kZUJsb2NrKikp
OwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgaW50
MzJfdCwgKEpTR2xvYmFsT2JqZWN0KikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IGM2NTcxYTZjYjU3ZTgyNGRjYzllMWNhMjM1ZTRkYmRl
YTMwOTMzYjAuLjAzYzBjYTM3ODNiMmFlOGNmZWU2Yzg2MWRkOWM3NDQ2MWE3MDFmODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtz
LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRl
bnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5rSklULmgiCkBA
IC0xNDIyLDYgKzE0MjMsMjA0IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICBsaW5rQnVmZmVy
LCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBj
YWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklU
VGh1bmtQdHJUYWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAg
IC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrTmVlZGVkID0g
MDsKKyAgICBpZiAodW5zaWduZWQgc3RhY2tNaXNhbGlnbm1lbnQgPSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5dGVzKCkpCisgICAgICAgIGV4dHJhU3RhY2tOZWVk
ZWQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSBzdGFja01pc2FsaWdubWVudDsKKworICAgIC8v
IFdlIG5lZWQgdG8gZm9yd2FyZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IHdlIHdlcmUgcGFz
c2VkLiBXZSBhcmVuJ3QgYWxsb3dlZCB0byBkbyBhIHRhaWwKKyAgICAvLyBjYWxsIGhlcmUgYXMg
ZmFyIGFzIEkgY2FuIHRlbGwuIEF0IGxlYXN0IG5vdCBzbyBsb25nIGFzIHRoZSBnZW5lcmljIHBh
dGggZG9lc24ndCBkbyBhIHRhaWwKKyAgICAvLyBjYWxsLCBzaW5jZSB0aGF0IHdvdWxkIGJlIHdh
eSB0b28gd2VpcmQuCisKKyAgICAvLyBUaGUgZm9ybXVsYSBmb3IgdGhlIG51bWJlciBvZiBzdGFj
ayBieXRlcyBuZWVkZWQgZ2l2ZW4gc29tZSBudW1iZXIgb2YgcGFyYW1ldGVycyAoaW5jbHVkaW5n
CisgICAgLy8gdGhpcykgaXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tBbGlnbigobnVtUGFy
YW1zICsgbnVtRnJhbWVMb2NhbHMgKyBDYWxsRnJhbWVIZWFkZXJTaXplKSAqIHNpemVvZihSZWdp
c3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpCisgICAgLy8KKyAgICAvLyBQcm9iYWJs
eSB3ZSB3YW50IHRvIHdyaXRlIHRoaXMgYXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tBbGln
bigobnVtUGFyYW1zICsgbnVtRnJhbWVMb2NhbHMgKyAoQ2FsbEZyYW1lSGVhZGVyU2l6ZSAtIENh
bGxlckZyYW1lQW5kUENTaXplKSkgKiBzaXplb2YoUmVnaXN0ZXIpKQorICAgIHN0YXRpYyBjb25z
dGV4cHIgaW50IG51bUZyYW1lTG9jYWxzID0gMTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9vcElu
ZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCk7CisKKyAgICBqaXQubG9hZENlbGwoQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJl
Z1QwKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEdQUkluZm86OnJlZ1QxKTsKKworICAg
IGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyArIG51bUZy
YW1lTG9jYWxzKSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubHNo
aWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRl
cygpIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIEdQUkluZm86OnJlZ1QyKTsKKwor
ICAgIGlmIChleHRyYVN0YWNrTmVlZGVkKQorICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFja05lZWRlZCksIEdQUkluZm86OnJlZ1QyKTsKKworICAg
IC8vIEF0IHRoaXMgcG9pbnQgcmVnVDEgaGFzIHRoZSBhY3R1YWwgYXJndW1lbnQgY291bnQsIGFu
ZCByZWdUMiBoYXMgdGhlIGFtb3VudCBvZiBzdGFjayB3ZSB3aWxsIG5lZWQuCisgICAgLy8gQ2hl
Y2sgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIHN0YWNrIHNwYWNlLgorCisgICAgaml0Lm5lZ1B0
cihHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhh
dmVTdGFja1NwYWNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwg
Q0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQo
KSksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4Y2Vw
dGlvbgorICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIEpTQm91bmRGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkp
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKT4oR1BSSW5mbzo6cmVnVDMpOwor
ICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKSksIEdQUkluZm86Om5vbkFyZ0dQUjAp
OworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0
aW9uUHRyVGFnKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBo
YXZlU3RhY2tTcGFjZS5saW5rKCZqaXQpOworICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QyLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFNldCBgdGhpc2Ag
dG8gdW5kZWZpbmVkCisgICAgLy8gTk9URTogbmVlZHMgY29uY2Vuc3VzIGluIFRDMzkgKGh0dHBz
Oi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL2lzc3Vlcy8zMjgpCisgICAg
aml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVQYXls
b2FkU2xvdChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAg
IGppdC5zdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBDQ2FsbEhlbHBlcnM6OmNhbGxl
ZUFyZ3VtZW50U2xvdCgwKSk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVl
UmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6cmVnVDQsIEdQUkluZm86OnJlZ1Qy
KTsKKworICAgIC8vIEJlZm9yZSBwcm9jZXNzaW5nIHRoZSBhcmd1bWVudHMgbG9vcCwgY2hlY2sg
dGhhdCB3ZSBoYXZlIGdlbmVyYXRlZCBKSVQgY29kZSBmb3IgY2FsbGluZworICAgIC8vIHRvIGF2
b2lkIHByb2Nlc3NpbmcgdGhlIGxvb3AgdHdpY2UgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgbm9Db2RlOworICAgIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZzZXRP
ZlRhcmdldCgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZU9yUmFyZURhdGEoKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVj
dXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpy
ZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcp
KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxp
bmsoJmppdCk7CisKKyAgICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVC
YXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAg
ICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVz
dFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50
IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAvLyBGb3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxk
IG5vdCBiZSBvYnNlcnZhYmxlKToKKyAgICAvLyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0
aXZlLCBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNl
CisgICAgLy8gICAgIHBlcmZvcm0gd3JhcHBpbmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dp
YyByZXN1bHRzIGluIGEgbmV3IEpTUmVtb3RlRnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQg
aW50byB0aGUgbmV3IGNhbGwgZnJhbWUncyBhcmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhh
dmUgdGhyb3duIGEgVHlwZUVycm9yLgorICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
ID0gaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QxKTsK
KyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOwor
ICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdU
MSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmlt
aXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZh
bHVlSXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQu
YWRkcmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0
V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25Q
dHJUYWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6
cmVnVDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAg
aml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xv
dCgwKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkp
OworICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIEdQUkluZm86OnJlZ1QxKS5saW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgIH0KKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKworICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAg
IGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVy
bywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246
OnJhcmVEYXRhVGFnKSk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpT
RnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGhhc0V4ZWN1dGFi
bGUubGluaygmaml0KTsKKworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJhc2U6Om9m
ZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVGb3JDYWxsKSksCisgICAgICAgIEdQ
UkluZm86OnJlZ1QwKTsKKworICAgIC8vIEJhc2VkIG9uIHRoZSBjaGVjayBhYm92ZSwgd2Ugc2hv
dWxkIGJlIGdvb2Qgd2l0aCB0aGlzLiBPbiBBUk02NCwgZW1pdFBvaW50ZXJWYWxpZGF0aW9uIHdp
bGwgZG8gdGhpcy4KKyNpZiBFTkFCTEUoQVNTRVJUKSAmJiAhQ1BVKEFSTTY0RSkKKyAgICB7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBjaGVja05vdE51bGwgPSBqaXQuYnJhbmNoVGVzdFB0
cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGdwcik7CisgICAgICAgIGFib3J0V2l0aFJlYXNvbihU
R0ludmFsaWRQb2ludGVyKTsKKyAgICAgICAgY2hlY2tOb3ROdWxsLmxpbmsoKQorICAgIH0KKyNl
bmRpZgorCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpT
RW50cnlQdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFn
KTsKKyAgICAvLyBGSVhNRTogaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aXRoaW4gYSBKUyBj
YWxsLCB3ZSdsbCBlbmQgdXAgaW4gYW4gb3V0ZXIgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIHRoZQor
ICAgIC8vIHJldGhyb3cgbG9naWMgd29uJ3Qgb2NjdXIgaGVyZS4gTmVlZCB0byBzZXQgdXAgYW4g
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHRhcmdldEZ1bmN0aW9uRXhjZXB0aW9uID0gaml0LmVt
aXRKdW1wSWZFeGNlcHRpb24odm0pOworCisgICAgLy8gV3JhcCByZXR1cm4gdmFsdWUKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmVnVDAp
OworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworI2VuZGlmCisKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHJlc3VsdElzUHJpbWl0aXZlOworICAgIHJlc3VsdElzUHJpbWl0aXZlLmFw
cGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHJlc3VsdFJlZ3MpKTsKKyAgICByZXN1bHRJc1ByaW1p
dGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90T2JqZWN0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0
aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVyKSks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQubG9hZENlbGwo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yQ2FsbGVyKT4oR1BSSW5mbzo6cmVnVDIsIHJlc3VsdFJlZ3MpOworICAgIGpp
dC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5l
bWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CisKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5saW5rKCZq
aXQpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKwor
ICAgIHRhcmdldEZ1bmN0aW9uRXhjZXB0aW9uLmxpbmsoJmppdCk7CisgICAgaml0LmxvYWRDZWxs
KENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93
UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24pPihHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnByZXBh
cmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBP
cGVyYXRpb25QdHJUYWcpOworICAgIC8vIEZhbGwgdGhyb3VnaCB0byBqdW1wIHRvIGhhbmRsZXIK
KworICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxl
cik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pKTsKKyAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6UmVtb3RlRnVuY3Rpb25UaHVu
ayk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Mo
dm0pKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIGxpbmtCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIHJlbW90ZSBmdW5jdGlvbiBjYWxs
cyIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCBhOWZlZWVh
OTI0YWUwMDc4ZDg0NTFlMTcyYzRjNDk0NWRmMWQ1ZWUxLi41ODllNzAwNDY0M2EyMjUzNzI1YWYy
YmI4ZjBmZjA1ZDMzMWU3YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgKQEAgLTgyLDYgKzgyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0mKTsKKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDhmOGM1ZjM2OWQ2ZWE1MjA4ODE3OGI3
Y2M4NWI3MjQ3NTE0NzRjYWYuLjA5OGQ1ZjVkNjRiYjdjZDE0ZDM2ZWY0OTMyYjZiYzk1ZTNhMDY0
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNC
aWdJbnQuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmgiCkBAIC0zNjYsNiArMzY3LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJFdmFsU2NyaXB0KTsKIHN0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR0MpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzKTsKIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVG
dW5jdGlvbik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxh
ckFnZW50U3RhcnQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25E
b2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlcG9ydCk7CkBAIC02NDksNiArNjUxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImdjIiwgZnVuY3Rpb25Eb2xs
YXJHQywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7
CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJjbGVhcktlcHRPYmplY3RzIiwgZnVu
Y3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwg
Imdsb2JhbE9iamVjdEZvciIsIGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yLCAxLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sIGRvbGxhciwgImlzUmVtb3RlRnVuY3Rpb24iLCBmdW5jdGlvbkRvbGxhcklz
UmVtb3RlRnVuY3Rpb24sIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6Tm9uZSkpOwogICAgICAgICAKICAgICAgICAgZG9sbGFyLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJnbG9iYWwiKSwgZ2xvYmFsVGhpcygpKTsKICAgICAgICAg
ZG9sbGFyLT5wdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIklzSFRNTEREQSIpLApAQCAtMjA4Myw2ICsyMDg2LDE4IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvciwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlv
biwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyJfcykpKTsKKworICAgIEpTVmFsdWUgYXJnID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc1JlbW90ZUZ1bmN0
aW9uKGFyZykpKTsKK30KKwogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFy
QWdlbnRTdGFydCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcAppbmRleCBmZjVmMTkyNDY5MGY2MmY0
OGM1MTM2NWI1MmU2YzU2M2I0ZTYyODlkLi5iODE3NTliY2E3ZWE4ZDU0MmJjOTJkMTFmZjI4N2I1
MGQ4MmYzNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRy
aW5zaWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5j
cHAKQEAgLTIwNSw2ICsyMDUsOCBAQCBjb25zdCBjaGFyKiBpbnRyaW5zaWNOYW1lKEludHJpbnNp
YyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiAiSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYyI7
CiAgICAgY2FzZSBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJC
b3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYyI7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJ
bnRyaW5zaWM6CisgICAgICAgIHJldHVybiAiUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljIjsK
ICAgICBjYXNlIEpTTWFwR2V0SW50cmluc2ljOgogICAgICAgICByZXR1cm4gIkpTTWFwR2V0SW50
cmluc2ljIjsKICAgICBjYXNlIEpTTWFwSGFzSW50cmluc2ljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaAppbmRleCA4ZTY4ZTdlNzRmYjc4Y2RiZDMzMjRjZmJmMGEy
NWVkNmQyMGQ2ZDU4Li40YWUzNjUxYjU3NWUyMzE1OGJmNjg5NjBiNmRjY2MwOWE1N2JhZjFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaApAQCAtMTE4LDYgKzEx
OCw3IEBAIGVudW0gSW50cmluc2ljIDogdWludDhfdCB7CiAgICAgVHlwZWRBcnJheUVudHJpZXNJ
bnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZEZ1bmN0
aW9uQ2FsbEludHJpbnNpYywKKyAgICBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCiAgICAg
SlNNYXBHZXRJbnRyaW5zaWMsCiAgICAgSlNNYXBIYXNJbnRyaW5zaWMsCiAgICAgSlNNYXBTZXRJ
bnRyaW5zaWMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nh
c3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCmluZGV4IDY4YzBl
NWJjMmVhMDRiMzAyZGM0M2QyNDhhYjUxODhmNGIzZTMwZmYuLmE2OTkzMTU5MDk5Y2NjMWI3Mzk2
YTk3YzU4ZmQ0ZWUzMWE1YzE4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Fz
dC5oCkBAIC05OSw2ICs5OSw3IEBAIHN0cnVjdCBKU1R5cGVSYW5nZSB7CiAgICAgbWFjcm8oSlNT
eW1ib2xUYWJsZU9iamVjdCwgSlNUeXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5cGU6Ok1vZHVs
ZUVudmlyb25tZW50VHlwZSkgXAogICAgIG1hY3JvKEpTU2NvcGUsIEpTVHlwZTo6R2xvYmFsT2Jq
ZWN0VHlwZSwgSlNUeXBlOjpXaXRoU2NvcGVUeXBlKSBcCiAgICAgbWFjcm8oU3RyaW5nT2JqZWN0
LCBKU1R5cGU6OlN0cmluZ09iamVjdFR5cGUsIEpTVHlwZTo6RGVyaXZlZFN0cmluZ09iamVjdFR5
cGUpIFwKKyAgICBtYWNybyhTaGFkb3dSZWFsbU9iamVjdCwgSlNUeXBlOjpTaGFkb3dSZWFsbVR5
cGUsIEpTVHlwZTo6U2hhZG93UmVhbG1UeXBlKSBcCiAKIAogLy8gRm9yd2FyZCBkZWNsYXJlIHRo
ZSBjbGFzc2VzIGJlY2F1c2UgdGhleSBtYXkgbm90IGFscmVhZHkgZXhpc3QuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKaW5kZXggODQ2MGQ0MmMwN2EyMWYwYTI2
M2ZmOGU4MWIyYzUwMmE5ZmNmZDhmYy4uMDJmMmU0MzE3NDE2MzFjNjFkMjdmMTYzZjliNmUzNTEw
M2ZkYzVjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaApA
QCAtMTUwLDYgKzE1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkg
Y29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hvc3RGdW5jdGlvbk5vbklubGlu
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdDsK
KyAgICBib29sIGlzUmVtb3RlRnVuY3Rpb24oKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RnVuY3Rp
b25OYW1lKEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBuYW1lKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggMjVkNjA5NDMw
YmI3ZGViNWVjYjBhZDk3MjEyZTg4Zjk4N2E1ZGIwOC4uNDc4NTRhNDY1NDBmZjYzN2RkMWY1Yjkx
NTlkNDM3MDhhMWJhYzkyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uSW5saW5lcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rp
b25FeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJO
YXRpdmVFeGVjdXRhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzgsNiArNzksMTEgQEAg
aW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25z
dAogICAgIHJldHVybiAhaXNIb3N0RnVuY3Rpb24oKSAmJiBqc0V4ZWN1dGFibGUoKS0+aXNDbGFz
c0NvbnN0cnVjdG9yRnVuY3Rpb24oKTsKIH0KIAoraW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNS
ZW1vdGVGdW5jdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KGpz
RHluYW1pY0Nhc3Q8Y29uc3QgSlNSZW1vdGVGdW5jdGlvbio+KGdsb2JhbE9iamVjdCgpLT52bSgp
LCB0aGlzKSk7Cit9CisKIGlubGluZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9uOjpu
YXRpdmVGdW5jdGlvbigpCiB7CiAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkp
OwpAQCAtOTgsNiArMTA0LDE0IEBAIGlubGluZSBib29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUg
dmFsdWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKQogICAgIHJldHVybiBm
dW5jdGlvbi0+bmF0aXZlRnVuY3Rpb24oKSA9PSBuYXRpdmVGdW5jdGlvbjsKIH0KIAoraW5saW5l
IGJvb2wgaXNSZW1vdGVGdW5jdGlvbihKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihnZXRKU0Z1bmN0aW9uKHZhbHVlKSk7Cisg
ICAgaWYgKCFmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmdW5j
dGlvbi0+aXNSZW1vdGVGdW5jdGlvbigpOworfQorCiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpo
YXNSZWlmaWVkTGVuZ3RoKCkgY29uc3QKIHsKICAgICBpZiAoRnVuY3Rpb25SYXJlRGF0YSogcmFy
ZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDI4NjRhMTk1ZjU0MmUwOTQzNmFmZjc4MzEx
YzQ5NmI1MzUwMjEzN2EuLjUyYjg1ZDFlOGUzOGQ3YjNlZjY2NmNhYTIyZjU0ZjA3MmI5MjA1NDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKQEAgLTE0MCw2ICsxNDAsNyBAQAogI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlUHJvdG90eXBlLmgi
CisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5j
bHVkZSAiSlNTZXRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nSXRlcmF0b3IuaCIKQEAg
LTc2OSw2ICs3NzAsMTAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAg
ICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CiAgICAgICAgICAg
ICBpbml0LnNldChKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwg
aW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAg
ICAgICB9KTsKKyAgICBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLmluaXRMYXRlcigKKyAgICAg
ICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAgICAgICAgICAg
IGluaXQuc2V0KEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0
Lm93bmVyLCBpbml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CisgICAgICAg
IH0pOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgSlNGdW5j
dGlvbiogYXBwbHlGdW5jdGlvbiA9IG51bGxwdHI7CiAgICAgSlNGdW5jdGlvbiogaGFzSW5zdGFu
Y2VTeW1ib2xGdW5jdGlvbiA9IG51bGxwdHI7CkBAIC0xNTMwLDYgKzE1MzUsMTQgQEAgY2FwaXRh
bE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVG
bGFnID8gY2FwaXRhbE5hbWUKICAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0
ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5n
KCksIGNyZWF0ZVByaXZhdGVTeW1ib2wpKTsKICAgICAgICAgfSk7CiAKKyAgICAvLyBTaGFkb3dS
ZWFsbXMKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5r
VGltZUNvbnN0YW50OjpjcmVhdGVSZW1vdGVGdW5jdGlvbildLmluaXRMYXRlcihbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5j
dGlvbjo6Y3JlYXRlKGluaXQudm0sIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIp
LCAwLCBTdHJpbmcoKSwgY3JlYXRlUmVtb3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisgICAg
bV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFu
dDo6aXNSZW1vdGVGdW5jdGlvbildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlND
ZWxsPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGlu
aXQudm0sIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwg
aXNSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKwogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKICAgICAvLyBXZWJBc3NlbWJseSBTdHJlYW1pbmcgQVBJCiAgICAgbV9saW5rVGltZUNvbnN0
YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6d2ViQXNzZW1ibHlD
b21waWxlU3RyZWFtaW5nSW50ZXJuYWwpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVy
PEpTQ2VsbD4mIGluaXQpIHsKQEAgLTIyNTgsNiArMjI3MSw3IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKICAg
ICB0aGlzT2JqZWN0LT5tX2N1c3RvbVNldHRlckZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0
b3IpOwogICAgIHRoaXNPYmplY3QtPm1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX25hdGl2ZVN0ZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0
KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9zaGFkb3dSZWFs
bU9iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9yZWdF
eHBTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZ2VuZXJhdG9y
RnVuY3Rpb25TdHJ1Y3R1cmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgKaW5kZXggMDNlYTNhNmMzMTY5ZTU3ZWRmNzcwMTFjYjA4YjI2MThhMDUw
Zjk5NC4uODEzNjUxYjI3ZDY1YzZkNjJmN2IyZTE0OTU1OTg0OTk3N2M4YjIxNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00MTgsNiAr
NDE4LDcgQEAgcHVibGljOgogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0
dXJlPiBtX2N1c3RvbUdldHRlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2N1c3RvbVNldHRlckZ1bmN0aW9uU3RydWN0dXJl
OwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX25hdGl2ZVN0
ZEZ1bmN0aW9uU3RydWN0dXJlOworICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1f
ZnVuY3Rpb25OYW1lT2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc2hhZG93
UmVhbG1PYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdF
eHBTdHJ1Y3R1cmU7CkBAIC04NjEsNiArODYyLDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSog
cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRj
aGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNB
cnJheVdpdGhJbmRpY2VzU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVz
QXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVnRXhw
TWF0Y2hlc0luZGljZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0
Y2hlc0luZGljZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogcmVtb3Rl
RnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0
dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlUmVjb3JkU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAg
U3RydWN0dXJlKiBtb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX21vZHVsZU5hbWVzcGFjZU9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1
Y3R1cmUqIHByb3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eU9iamVj
dFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRiODczNjBiYzE1ZjNmMDE0
MGM5OGI4Nzc2MzlhYjFlOTE0MmNhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsMjI4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBBdXRob3I6IENhaXRsaW4g
UG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJh
c2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNoYWRvd1Jl
YWxtT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTUmVtb3RlRnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1
bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1JlbW90ZUZ1bmN0aW9uKSB9OworCitKU1JlbW90ZUZ1bmN0aW9uOjpKU1JlbW90ZUZ1
bmN0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQ2VsbCogdGFyZ2V0KQor
ICAgIDogQmFzZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCisgICAg
LCBtX3RhcmdldCh2bSwgdGhpcywgdGFyZ2V0KQoreworfQorCitzdGF0aWMgSlNWYWx1ZSB3cmFw
VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdl
dEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0pKSB7CisgICAgICAgIEpTQ2Fs
bGVlKiB0YXJnZXQgPSBzdGF0aWNfY2FzdDxKU0NhbGxlZSo+KHZhbHVlLmFzQ2VsbCgpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoSlNSZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJnZXRH
bG9iYWxPYmplY3QsIHRhcmdldCkpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSB3cmFwQXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZh
bHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHJl
c3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJp
bWl0aXZlIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVl
IHdyYXByUmV0dXJuVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFy
Z2V0R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCisgICAg
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJl
dHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUpTRnVuY3Rpb25D
YWxsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9uKCkpOworICAgIEpT
RnVuY3Rpb24qIHRhcmdldCA9IHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpOworICAg
IEFTU0VSVCh0YXJnZXQpOworCisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVj
dCA9IHRhcmdldC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOworCisgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1ZSA9
IHdyYXBBcmd1bWVudChnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUp
OworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAg
ICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlID0gdGFyZ2V0LT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1dGFibGUtPmhhc0pJ
VENvZGVGb3JDYWxsKCkpIHsKKyAgICAgICAgLy8gRm9yY2UgdGhlIGV4ZWN1dGFibGUgdG8gY2Fj
aGUgaXRzIGFyaXR5IGVudHJ5cG9pbnQuCisgICAgICAgIGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9CisKKyAgICBhdXRvIGNhbGxE
YXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldCk7CisgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUg
IT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2FsbCh0YXJnZXRH
bG9iYWxPYmplY3QsIHRhcmdldCwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworCisg
ICAgLy8gSGlkZSBleGNlcHRpb25zIGZyb20gY2FsbGluZyByZWFsbQorICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiYW4gZXJyb3Igb2NjdXJyZWQgaW4g
cmVtb3RlIHJlYWxtIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0K
KworICAgIGF1dG8gd3JhcHBlZFJlc3VsdCA9IHdyYXByUmV0dXJuVmFsdWUoZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QsIHJlc3VsdCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUod3JhcHBlZFJlc3VsdCkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVO
Q1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1v
dGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNh
bGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90
ZUZ1bmN0aW9uKCkpOworICAgIEpTQ2VsbCogdGFyZ2V0ID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdl
dCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXQtPnN0
cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwVmFsdWUoZ2xv
YmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoaSkpOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUpOworICAgIH0KKyAgICBp
ZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZN
ZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgfQorCisgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0
YXJnZXQpOworICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpOb25l
KTsKKyAgICBhdXRvIHJlc3VsdCA9IGNhbGwodGFyZ2V0R2xvYmFsT2JqZWN0LCB0YXJnZXQsIGNh
bGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKworICAgIC8vIEhpZGUgZXhjZXB0aW9ucyBm
cm9tIGNhbGxpbmcgcmVhbG0KKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgImFuIGVycm9yIG9jY3VycmVkIGluIHJlbW90ZSByZWFsbSIpOworICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBhdXRvIHdyYXBwZWRSZXN1
bHQgPSB3cmFwVmFsdWUodGFyZ2V0R2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUod3JhcHBlZFJl
c3VsdCkpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoc3RhdGljX2Nhc3Q8Ym9vbD4oanNE
eW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oZ2xvYmFsT2JqZWN0LT52bSgpLCBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NF
UlQoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgSlNWYWx1ZSB0YXJnZXQg
PSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIEFTU0VSVCh0YXJnZXQuaXND
YWxsYWJsZSh2bSkpOworCisgICAgSlNDZWxsKiB0YXJnZXRDYWxsYWJsZSA9IHRhcmdldC5hc0Nl
bGwoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CisgICAgaWYgKCFjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gc2hhZG93UmVhbG0gPSBqc0R5bmFt
aWNDYXN0PFNoYWRvd1JlYWxtT2JqZWN0Kj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQoMSkpKQorICAgICAgICAgICAgZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBzaGFkb3dSZWFs
bS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
R2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBKU1JlbW90ZUZ1bmN0
aW9uOjpjcmVhdGUodm0sIGRlc3RpbmF0aW9uR2xvYmFsT2JqZWN0LCB0YXJnZXRDYWxsYWJsZSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KSk7
Cit9CisKK2lubGluZSBTdHJ1Y3R1cmUqIGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBnbG9i
YWxPYmplY3QtYXdhcmUgc3RydWN0dXJlIGNhY2hpbmcKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LT5yZW1vdGVGdW5jdGlvblN0cnVjdHVyZSgpOworfQorCitKU1JlbW90ZUZ1bmN0aW9uKiBKU1Jl
bW90ZUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0NlbGwqIHRhcmdldENhbGxhYmxlKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVCh0YXJnZXRDYWxsYWJsZSAmJiB0YXJnZXRDYWxs
YWJsZS0+aXNDYWxsYWJsZSh2bSkpOworICAgIGlmIChhdXRvIHJlbW90ZSA9IGpzRHluYW1pY0Nh
c3Q8SlNSZW1vdGVGdW5jdGlvbio+KHZtLCB0YXJnZXRDYWxsYWJsZSkpIHsKKyAgICAgICAgdGFy
Z2V0Q2FsbGFibGUgPSByZW1vdGUtPnRhcmdldCgpOworICAgICAgICBBU1NFUlQoIUpTQzo6aXNS
ZW1vdGVGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSkpOworICAgIH0KKworICAgIGJvb2wgaXNKU0Z1
bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSk7CisgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJlbW90ZUZ1bmN0aW9uKGlzSlNGdW5jdGlvbik7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShnbG9i
YWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAg
IEpTUmVtb3RlRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNSZW1vdGVGdW5jdGlvbj4odm0pKSBKU1JlbW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24t
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNS
ZW1vdGVGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPgordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjp2aXNpdENo
aWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNSZW1v
dGVGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhcmdldCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJF
TihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ2
M2NjZDFmMWI4OWI2YzliMWVlZmVjZjI4ZmQ5YzM3Yzk4Yjc0NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApAQCAtMCww
ICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBBdXRo
b3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaD4KKworbmFtZXNwYWNl
IEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlSlNGdW5jdGlvbkNhbGwp
OworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGwpOworSlNDX0RF
Q0xBUkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1Rf
RlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24pOworCisvLyBKU1JlbW90ZUZ1bmN0aW9uIGNy
ZWF0ZXMgYSBicmlkZ2UgYmV0d2VlbiBpdHMgbmF0aXZlIFJlYWxtIGFuZCBhIHJlbW90ZSBvbmUu
CisvLyBXaGVuIGludm9rZWQsIGFyZ3VtZW50cyBhcmUgd3JhcHBlZCB0byBwcmV2ZW50IGxlYWtp
bmcgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSByZWFsbSBib3VuZGFyeS4KKy8vIFRoZSByZXR1cm4g
dmFsdWUgYW5kIGFueSBhYnJ1cHQgY29tcGxldGlvbnMgYXJlIGFsc28gZmlsdGVyZWQuCitjbGFz
cyBKU1JlbW90ZUZ1bmN0aW9uIGZpbmFsIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29T
dWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnJl
bW90ZUZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSlNSZW1vdGVGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqIHRhcmdldENhbGxhYmxlKTsKKworICAgIEpTQ2VsbCogdGFyZ2V0KCkgeyByZXR1cm4g
bV90YXJnZXQuZ2V0KCk7IH0KKyAgICBKU0Z1bmN0aW9uKiB0YXJnZXRGdW5jdGlvbigpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihnZXRKU0Z1bmN0aW9uKHRhcmdldCgpKSk7IH0K
KyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGFyZ2V0
RnVuY3Rpb24oKS0+Z2xvYmFsT2JqZWN0KCk7IH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAorICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFyZ2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTUmVtb3RlRnVuY3Rpb24sIG1fdGFyZ2V0KTsgfQorCisgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKFZNJiwg
TmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNDZWxsKiB0
YXJnZXRDYWxsYWJsZSk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKKworICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdGFyZ2V0
OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGZmMWFhZjcz
YTQ5ZDNmNzExZjU0MmQ2NWYwZDFkZjM3NjFjYzIwYjEuLjA1YzE1OWM4NmQ3ODlmNGRjYzE2OGVj
MWJmYTZkZjIyMzIwZGNjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAg
LTYzMiw2ICs2MzIsOCBAQCBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJ
bnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAgcmV0dXJuIHJhbmRvbVRodW5r
R2VuZXJhdG9yOwogICAgIGNhc2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAgICAgICAg
IHJldHVybiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcjsKKyAgICBjYXNlIFJlbW90ZUZ1bmN0
aW9uQ2FsbEludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVy
YXRvcjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC03
MDksNiArNzExLDI1IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRCb3VuZEZ1bmN0aW9uKGJv
b2wgaXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCkKICAgICByZXR1cm4gZ2V0T3JDcmVh
dGUobV9mYXN0Qm91bmRFeGVjdXRhYmxlKTsKIH0KIAorTmF0aXZlRXhlY3V0YWJsZSogVk06Omdl
dFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKQoreworICAgIGJvb2wgc2xvd0Nhc2Ug
PSAhaXNKU0Z1bmN0aW9uOworICAgIGF1dG8gZ2V0T3JDcmVhdGUgPSBbJl0gKFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4mIHNsb3QpIC0+IE5hdGl2ZUV4ZWN1dGFibGUqIHsKKyAgICAgICAgaWYgKGF1
dG8qIGNhY2hlZCA9IHNsb3QuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkOworICAg
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiByZXN1bHQgPSBnZXRIb3N0RnVuY3Rpb24oCisgICAgICAg
ICAgICBzbG93Q2FzZSA/IHJlbW90ZUZ1bmN0aW9uQ2FsbCA6IHJlbW90ZUpTRnVuY3Rpb25DYWxs
LAorICAgICAgICAgICAgc2xvd0Nhc2UgPyBOb0ludHJpbnNpYyA6IFJlbW90ZUZ1bmN0aW9uQ2Fs
bEludHJpbnNpYywKKyAgICAgICAgICAgIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBu
dWxscHRyLCBTdHJpbmcoKSk7CisgICAgICAgIHNsb3QgPSBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+
KHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIGlmIChzbG93
Q2FzZSkKKyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fc2xvd1JlbW90ZUZ1bmN0aW9uRXhl
Y3V0YWJsZSk7CisgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhl
Y3V0YWJsZSk7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6
Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQogewogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCBhMWIwYjM4NTM4YmYyMDgzMjA3OWRmYzk0NzRmZWE5NTUzZjMwZjBhLi5hOTYwOTYzYjNh
MmQ5NGU2NWY2MjRhYzU1Njc1ODQ5ZTZhOTIwZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTQzMiw2ICs0MzIsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQogICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1l
dGVyc1NwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0
RmV0Y2hlclNwYWNlKQpAQCAtNTcyLDYgKzU3Myw5IEBAIHB1YmxpYzoKICAgICBXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+IG1fc2xvd0JvdW5kRXhlY3V0YWJsZTsKICAgICBXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+IG1fc2xvd0NhbkNvbnN0cnVjdEJvdW5kRXhlY3V0YWJsZTsKIAorICAgIFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4gbV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlOworICAgIFdlYWs8
TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlOworCiAgICAg
UmVmPERlZmVycmVkV29ya1RpbWVyPiBkZWZlcnJlZFdvcmtUaW1lcjsKIAogICAgIEpTQ2VsbCog
Y3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdDsKQEAgLTY4NSw2ICs2ODksNyBAQCBw
dWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0aW9uKE5hdGl2ZUZ1bmN0
aW9uLCBJbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBET01KSVQ6
OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCk7
CisgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0UmVtb3RlRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rp
b24pOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGdldENUSUlu
dGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRDVElMaW5rQ2FsbCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449569</attachid>
            <date>2022-01-20 06:41:45 -0800</date>
            <delta_ts>2022-01-26 11:01:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220120144144.patch</filename>
            <type>text/plain</type>
            <size>60748</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4Mjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MWMyZTY2NTlmNDFiMDYyYjE5YmRjM2Q5MWMzZTQ0MjI3NTM3NDhmLi40NDkyM2U0YmU0OTZkYzAw
NGIzMWEzNzJmZDFjMWYxMmJjODZmM2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0yMCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSW4gdGhpcyBpbml0aWFsIHBhdGNoLCB0aGVyZSBpcyBzdGlsbCBhIGxvdCBvZiBKUy1i
dWlsdGluIG1hY2hpbmVyeSwKKyAgICAgICAgaW5jbHVkaW5nIHNvbWUgZHVwbGljYXRlZCBmdW5j
dGlvbmFsaXR5LiBBZGRpdGlvbmFsbHksIEpJVCBzdXBwb3J0CisgICAgICAgIGhhcyBub3QgYmVl
biBpbmNvcnBvcmF0ZWQgeWV0LgorCisgICAgICAgIEJyb2FkbHksIHRoZSBpZGVhIGlzIHRoYXQg
dGhlcmUgYXJlIGN1c3RvbSBob29rcyBmb3IgY2FsbGluZyBhCisgICAgICAgIEpTUmVtb3RlRnVu
Y3Rpb24sIHdoaWNoIHBlcmZvcm0gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uYWxpdHkuIFRoaXMgYXZv
aWRzCisgICAgICAgIHRoZSBuZWVkIGZvciBhbGxvY2F0aW5nIGNsb3N1cmVzIHdoaWNoIGNvbnRh
aW4gdGhlIHdyYXBwaW5nIGxvZ2ljLgorCisgICAgICAgIFRPRE86CisgICAgICAgIC0gSklUL0RG
Ry9GVEwgc3VwcG9ydAorICAgICAgICAtIHN0cnVjdHVyZSBjYWNoaW5nICh1bm5lY2Vzc2FyeSBz
aW5jZSB0aGVzZSBhcmUgbm90IGNvbnN0cnVjdG9ycz8pCisgICAgICAgIC0gaW1wcm92ZWQgYmFz
ZWxpbmUgcGVyZgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKiBidWls
dGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBidWlsdGlucy9TaGFkb3dSZWFsbVByb3Rv
dHlwZS5qczoKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBqaXQv
QXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRDb21tb24uaDoKKyAgICAgICAgKiBydW50aW1lL0lu
dHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgICogcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMi0wMS0xOSAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEltcGxlbWVudCBUZW1wb3JhbC5O
b3cuaW5zdGFudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMzdjZTc1
Mzc0M2MzNTNkNThmNjYxMThiNzgzN2M4Nzg4ZTQ4MTk3ZS4uOWYwMWM4ZjM3MDRlOWMxMzY1ZGJi
OWE2OGJiYjkzZGVmYmM3OTFiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTA4Miw2ICsxMDgyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgKICAgICBydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCiAgICAgcnVudGltZS9KU1Byb3h5LmgKKyAgICBy
dW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaAogICAgIHJ1bnRpbWUvSlNSdW5Mb29wVGltZXIuaAog
ICAgIHJ1bnRpbWUvSlNTY29wZS5oCiAgICAgcnVudGltZS9KU1NjcmlwdEZldGNoUGFyYW1ldGVy
cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhNWNiMWU2YWJiYmRkNzZlZWY3
YzVmMDBiMjVjY2Q1MjFlOTBmZGUuLjAyMzcxNzQyZDEyMGE4MzdiYTVkMmQzNGQzNGQ5YzE3MjBh
YTI5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTI5LDYgKzExMjksNyBA
QAogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRp
b25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Q
cm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZl
U3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI0MDMyN0UyNzk4RDFGRDAwRjM3
OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkgLyogSlNBc3luY0Z1
bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QjcwQ0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi87IH07CiAJCTVC
NzBDRkUwMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQTFEQjY5RTVD
MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovOyB9OwogCQk1QjcwQ0ZFMjFE
QjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQzFEQjY5RTVDMDBFQzIz
RjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CkBAIC00MDc0LDYgKzQwNzUs
OCBAQAogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRh
cHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdE
MyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVu
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0UyNzk4RDFGRDAw
RjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZW1vdGVGdW5j
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3RjI3OThEMUZEMDBG
Mzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlbW90
ZUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDgxREI2
OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5
bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
c3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
ODIzLDggKzU4MjYsOCBAQAogCQkJCUE3MzFCMjVBMTMwMDkzODgwMDQwQTdGQSAvKiBGb3VuZGF0
aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTkzMkY1QkQ3MDgyMkExQzcwMDcz
Njk3NSAvKiBsaWJpY3Vjb3JlLmR5bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDYw
ODIyQTFDNzAwNzM2OTc1IC8qIGxpYm9iamMuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKLQkJCQlB
NTA5OEIwNDFDMTZBQTAyMDAwODc3OTcgLyogU2VjdXJpdHkuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8sCiAJCQkJRERCMDRGNDIyNzhFNTZBMjAwOEQzNjc4IC8qIGxpYldURi5hIGluIEZyYW1l
d29ya3MgKi8sCisJCQkJQTUwOThCMDQxQzE2QUEwMjAwMDg3Nzk3IC8qIFNlY3VyaXR5LmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNzM0OSwxMSArNzM1MiwxMSBAQAogCQkJCUUzODM1
MDA5MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggKi8sCiAJCQkJMTQ4NTIxRDUyNkVB
RUJERjAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5jcHAgKi8sCiAJCQkJMTQ4NTIxRDcyNkVB
RUJGRTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oICovLAotCQkJCTUyRkRBQkMyMjc4ODA3
NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQ4RkYzOTYx
RUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5jcHAgKi8sCiAJCQkJQUQ4RkYzOTUx
RUI1QkQ4NTAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oICovLAogCQkJCUFENUMzNkRFMUY2
OTlFQjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuY3BwICovLAogCQkJCUFENUMzNkRGMUY2OTlF
QjYwMDBCQ0FBRiAvKiBXYXNtSW5zdGFuY2UuaCAqLywKKwkJCQk1MkZEQUJDMjI3ODgwNzY5MDBD
MTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEMDA2NTlEMUVDQUM3
RkUwMDBDQTkyNiAvKiBXYXNtTGltaXRzLmggKi8sCiAJCQkJMTRDNUFENjgyMkYzM0ZCRjAwRjFG
QjgzIC8qIFdhc21MTEludEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJMTRDNUFENjkyMkYzM0ZCRjAw
RjFGQjgzIC8qIFdhc21MTEludEdlbmVyYXRvci5oICovLApAQCAtNzk1Myw2ICs3OTU2LDggQEAK
IAkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmggKi8sCiAJCQkJODYyNTUzQ0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAog
CQkJCTg2MjU1M0NGMTYxMzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMy
N0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAz
MjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4
NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3
MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1
RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgKi8sCkBAIC0xMDY1OCw2ICsxMDY2Myw3IEBA
CiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEw
MDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2
MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMz
ODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xMTE1Nyw2ICsxMTE2Myw3IEBACiAJCQkJMTQ4NTIxRDgyNkVBRUJG
RTAwQ0MxRDFBIC8qIFdhc21IYW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4RkYz
OTgxRUI1QkRCMjAwODdGRjgyIC8qIFdhc21JbmRleE9yTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ1QzM2RTIxRjY5OUVDMDAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTJGREFCQzMyNzg4MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBl
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMDA2NTlFMUVDQUM4MTIwMDBDQTkyNiAvKiBXYXNt
TGltaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDUwRkExRjIzNTdCRUM5MDA5M0NENEQgLyog
V2FzbUxMSW50VGllclVwQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTNFOUUwQUMxRUFF
ODNERjAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MTIwOCw3ICsxMTIxNSw2IEBACiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtN
YXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyog
V2Vha01hcEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFF
MDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJGREFC
QzMyNzg4MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUzOTkzMEM4MjJBRDNCOUEwMDUxQ0RFMiAvKiBXZWFrT2JqZWN0UmVmQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBX
ZWFrT2JqZWN0UmVmUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUx
QUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKaW5kZXggODc4MWZiNDcxMDQwZWNlZTAxOGRjNzExYzU0Y2Y2YjUzMTQ5NDY1Ni4u
YTk4OTAwNTQ5MGFlM2I1YjhjMjk4MzA3ZTAzZTYwY2U4YzMwODg0NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTAwLDYgKzkwMCw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1Jl
bW90ZUZ1bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNT
Y29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0
Y2QzMTIwNTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFm
YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1
bmspIFwKICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25U
aHVuaykgXAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBc
CiAgICAgdihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4
ODhkLi5hMDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMp
IFwKICAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhz
ZW50aW5lbFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAg
bWFjcm8oaXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcwppbmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi4yMjk0
NzFiODUwNzY4MDNiMTNlNWMyZTRlMmQ0MDc1ZDk1NTlkNmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0z
MiwzMCArMzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0s
IHRhcmdldCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0
KSkgewotICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFy
IHdyYXBwZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAg
c2luY2UgdG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBB
IHRvIHdvcmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAg
dGhlIGFyZ3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0g
ICAgICAgICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgIEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hh
ZG93UmVhbG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVm
aW5lZCwgd3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dS
ZWFsbSwgIihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwot
ICAgICAgICB9OworICAgICAgICB2YXIgd3JhcHBlZCA9IEBjcmVhdGVSZW1vdGVGdW5jdGlvbih0
YXJnZXQsIGZyb21TaGFkb3dSZWFsbSA/IG51bGwgOiBzaGFkb3dSZWFsbSk7CiAgICAgICAgIGRl
bGV0ZSB3cmFwcGVkWyduYW1lJ107CiAgICAgICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29u
c3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50
LmgKaW5kZXggZTY2ZThmZGIxNmFmMGY2ODlmMGFiZWE0ODBhZWNiNDUyYWM4YjlmMS4uZGY5OTQy
ZjIxMjUzYjA4MjZkM2E3ZDkwMDQ4OGY2ZGNiZGQyNzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCkBAIC0xMTcsNiArMTE3LDgg
QEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxs
cHRyKSBcCiAgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKICAg
ICB2KHNlbnRpbmVsU3RyaW5nLCBudWxscHRyKSBcCisgICAgdihjcmVhdGVSZW1vdGVGdW5jdGlv
biwgbnVsbHB0cikgXAorICAgIHYoaXNSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAogCiAKICNk
ZWZpbmUgREVDTEFSRV9MSU5LX1RJTUVfQ09OU1RBTlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMGM4ZDM1NTk2MDRhZWQwYjMzOGM0ZDk3N2Ez
ZDYwOTdkOTJjZWQ2My4uNmI4NjU0MjI4NGEwNGQxMzMyMThjOWYzZWFkODUyZTBkNjI2MmZlYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNs
dWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUgIkpJVFdvcmtsaXN0SW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJKU1JlbW90
ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5j
bHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0UmVmLmgiCkBAIC0zMjE4
LDYgKzMyMTksNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobW9k
dWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVsZU5hbWVzcAogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1
bmN0aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4NzBlZDYx
ZTQKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eU9iamVjdFNw
YWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9iamVjdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQ
cm94eVJldm9rZSkgLy8gSGFzaDoweGI1MDZhOTM5CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cocmVtb3RlRnVuY3Rpb25TcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNS
ZW1vdGVGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhz
Y29wZWRBcmd1bWVudHNUYWJsZVNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBT
Y29wZWRBcmd1bWVudHNUYWJsZSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hlclNwYWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENl
bGxUeXBlLCBKU1NjcmlwdEZldGNoZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXgg
NGRlODJlYjg3NDk0Y2M3OTA2YTM2ZWM5NTgyOTY1NWZkMWJjZDgwYi4uYWJiZGNiZmJlZjI4YTBk
MzU1ZmVjZjkxNzY0YTU1MGI5YWYzZDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApA
QCAtOTIyLDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09f
U1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZ
TkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVy
U3BhY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRl
eCAyM2UwODcxOGRiZjgyMDQyMzVlMzk5YWE2NWNiMGQ5OTA4Mjk3MWUwLi43NWY4OTAzZGZiNzdl
MTA2YTViZDhmNThhMTUwZGM2YzYyZjQ2MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxh
Y2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAgaW5saW5l
IHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3NlcnROb0V4
Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykg
eyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEzNTUsNiAr
MTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpIHsgfQog
ICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFzc2VydEFy
Z3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlvbihWTSYp
IHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbihWTSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMWRk
N2I3M2M2MTY3OTYyN2YzMDJkOTE0MjJmNWJjMzdmMjE0ZTRiMC4uZDIwZWQwNzcwMDkwZjNkNzUx
MTgzYjRkYjkyMTYyNjc0ZmJhM2NmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2luY2x1ZGUg
IkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAj
aW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODMgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRo
dW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cp
OwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAgIGlmICh2
YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUuYXND
ZWxsKCkpKTsKKworICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1
ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNS
ZW1vdGVGdW5jdGlvbiogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQorewor
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVt
b3RlRnVuY3Rpb24oY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gY2Fs
bGVlLT50YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGdldFdyYXBwZWRWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpKTsKKworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVl
LCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
KQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9i
amVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Q
cm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJU
KGlzUmVtb3RlRnVuY3Rpb24oY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldFdyYXBwZWRWYWx1ZShn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
KTsKKyAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVG
dW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxs
ZWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2Jh
bE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRp
b25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNT
RVJUKGlzUmVtb3RlRnVuY3Rpb24oY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUgaGVyZSB3aGVuICJy
ZXRocm93aW5nIiBhbiBleGNlcHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChzY29wZS5leGNlcHRp
b24oKSk7CisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZXhjZXB0
aW9uU3RyaW5nID0gZXhjZXB0aW9uVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5n
dGgoKSkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0
aW9uU3RyaW5nKTsKKyAgICBlbHNlCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOworCisgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Cit9CisKIEpTQ19ERUZJ
TkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3Qs
IHZvaWQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCmluZGV4IDRiNWQwMTFmOTA2YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLmJiNTE2
ZmZmMTlhODFjM2ZhZDgwNjZhYzhjNDllOTQ2ZTdmYTlkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEpTRnVuY3Rp
b247CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50Owog
Y2xhc3MgSlNPYmplY3Q7CitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uOwogY2xhc3MgSlNTY29wZTsK
IGNsYXNzIEpTU3RyaW5nOwogY2xhc3MgSlNWYWx1ZTsKQEAgLTk0LDYgKzk1LDcgQEAgdHlwZWRl
ZiBjaGFyKiBVbnVzZWRQdHI7CiAgICAgSmNwOiBjb25zdCBKU1ZhbHVlKgogICAgIEpzYzogSlNT
Y29wZSoKICAgICBKc2Y6IEpTRnVuY3Rpb24qCisgICAgSnJmOiBKU1JlbW90ZUZ1bmN0aW9uKgog
ICAgIEpzczogSlNTdHJpbmcqCiAgICAgTDogSlNMZXhpY2FsRW52aXJvbm1lbnQqCiAgICAgTzog
SlNPYmplY3QqCkBAIC0xNDYsNiArMTQ4LDcgQEAgdXNpbmcgVl9KSVRPcGVyYXRpb25fR0NDSiA9
IHZvaWQoSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2JqZWN0KiwgSlMKIHVz
aW5nIEpfSklUT3BlcmF0aW9uX0dTc2lKSSA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05f
QVRUUklCVVRFUyAqKShKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2Rl
ZEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKik7CiB1c2luZyBaX0pJVE9wZXJhdGlvbl9HSlpa
ID0gaW50MzJfdChKSVRfT1BFUkFUSU9OX0FUVFJJQlVURVMgKikoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7CiB1c2luZyBGX0pJVE9wZXJhdGlvbl9H
RkpaWiA9IENhbGxGcmFtZSooSklUX09QRVJBVElPTl9BVFRSSUJVVEVTICopKEpTR2xvYmFsT2Jq
ZWN0KiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QpOwordXNp
bmcgSl9KSVRPcGVyYXRpb25fSnJmSiA9IEVuY29kZWRKU1ZhbHVlKEpJVF9PUEVSQVRJT05fQVRU
UklCVVRFUyAqKShKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpOwogCiAvLyBUaGlz
IG1ldGhvZCBpcyB1c2VkIHRvIGxvb2t1cCBhbiBleGNlcHRpb24gaGFuZGVyLCBrZXllZCBieSBm
YXVsdExvY2F0aW9uLCB3aGljaCBpcwogLy8gdGhlIHJldHVybiBsb2NhdGlvbiBmcm9tIG9uZSBv
ZiB0aGUgY2FsbHMgb3V0IHRvIG9uZSBvZiB0aGUgaGVscGVyIG9wZXJhdGlvbnMgYWJvdmUuCkBA
IC0xNTUsNiArMTU4LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29r
dXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZy
b21UaHVuaywgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0ds
b2JhbE9iamVjdCopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yQ2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBF
bmNvZGVkSlNWYWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbios
IEVuY29kZWRKU1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRo
cm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5j
dGlvbiopKTsKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNr
T3ZlcmZsb3dFcnJvciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCop
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRl
eCBjNjU3MWE2Y2I1N2U4MjRkY2M5ZTFjYTIzNWU0ZGJkZWEzMDkzM2IwLi4wM2MwY2EzNzgzYjJh
ZThjZmVlNmM4NjFkZDljNzQ0NjFhNzAxZjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklU
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRG
dW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTElu
dFRodW5rcy5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiU3BlY2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMiw2ICsxNDIzLDIwNCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNJiB2bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVj
aWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMi
KTsKIH0KIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5j
dGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAg
aml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJh
bWUuCisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRy
KSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgIGppdC5zdG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwor
CisgICAgdW5zaWduZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0
YWNrTWlzYWxpZ25tZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1l
bnRCeXRlcygpKQorICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRl
cygpIC0gc3RhY2tNaXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxs
IG9mIHRoZSBhcmd1bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQg
dG8gZG8gYSB0YWlsCisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBs
ZWFzdCBub3Qgc28gbG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisg
ICAgLy8gY2FsbCwgc2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8g
VGhlIGZvcm11bGEgZm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNv
bWUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAg
IC8vCisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsg
Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKQorICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlz
IGFzOgorICAgIC8vCisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1l
TG9jYWxzICsgKENhbGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICog
c2l6ZW9mKFJlZ2lzdGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2Fs
cyA9IDE7CisgICAgVmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKDApOworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihD
Q2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMpLCBHUFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJG
cmFtZUFuZFBDOjpzaXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdu
bWVudEJ5dGVzKCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRl
ZCkKKyAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3Rh
Y2tOZWVkZWQpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1Qx
IGhhcyB0aGUgYWN0dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQg
b2Ygc3RhY2sgd2Ugd2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVu
b3VnaCBzdGFjayBzcGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
cmVnVDIpOworICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVB
ZGRyZXNzKHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisK
KyAgICAvLyBUaHJvdyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7Cisg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Jv
dW5kRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvckZyb21UaHVuayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVy
YXRpb24odm0pOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdD
RnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ckZyb21UaHVuaykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlk
YXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0
KTsKKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5P
VEU6IG5lZWRzIGNvbmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9w
b3NhbC1zaGFkb3dyZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJl
Z1QxLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUo
anNVbmRlZmluZWQoKSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVS
ZWdzKEdQUkluZm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJv
Y2Vzc2luZyB0aGUgYXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQg
SklUIGNvZGUgZm9yIGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29w
IHR3aWNlIGluIHRoZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsK
KyAgICB7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgSlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSksIEdQUkluZm86OnJl
Z1QyKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QyLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgICAgIGpp
dC5sb2FkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJlZ1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0
aEFyaXR5Q2hlY2tGb3IoQ29kZUZvckNhbGwpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1Qy
KTsKKyAgICAgICAgbm9Db2RlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJv
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBl
eGNlcHRpb25DaGVja3M7CisKKyAgICAvLyBBcmd1bWVudCBwcm9jZXNzaW5nIGxvb3A6CisgICAg
Ly8gRm9yIGVhY2ggYXJndW1lbnQgKG9yZGVyIHNob3VsZCBub3QgYmUgb2JzZXJ2YWJsZSk6Cisg
ICAgLy8gICAgIGlmIHRoZSB2YWx1ZSBpcyBhIFByaW1pdGl2ZSwgY29weSBpdCBpbnRvIHRoZSBu
ZXcgY2FsbCBmcmFtZSBhcmd1bWVudHMsIG90aGVyd2lzZQorICAgIC8vICAgICBwZXJmb3JtIHdy
YXBwaW5nIGxvZ2ljLiBJZiB0aGUgd3JhcHBpbmcgbG9naWMgcmVzdWx0cyBpbiBhIG5ldyBKU1Jl
bW90ZUZ1bmN0aW9uLAorICAgIC8vICAgICBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1l
J3MgYXJndW1lbnRzLCBvdGhlcndpc2UgaXQgbXVzdCBoYXZlIHRocm93biBhIFR5cGVFcnJvci4K
KyAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgeworICAgICAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgaml0LmxvYWRWYWx1ZShD
Q2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnRJbmNsdWRp
bmdUaGlzKDApKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNF
aWdodCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB2YWx1
ZUlzUHJpbWl0aXZlOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMSwgaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSk7
CisKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5j
dGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCkp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGpp
dCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0
KT4oR1BSSW5mbzo6cmVnVDAsIHZhbHVlUmVncyk7CisgICAgICAgIGppdC5wcmVwYXJlQ2FsbE9w
ZXJhdGlvbih2bSk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJh
dGlvblB0clRhZyk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1w
SWZFeGNlcHRpb24odm0pKTsKKworICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZhbHVlUmVncyk7
CisgICAgICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGppdC5sb2FkUHRyKGpp
dC5hZGRyZXNzRm9yKGxvb3BJbmRleCksIEdQUkluZm86OnJlZ1QxKTsKKworICAgICAgICB2YWx1
ZUlzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zdG9yZVZhbHVlKHZhbHVlUmVn
cywgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkuaW5kZXhlZEJ5KEdQUkluZm86
OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgaml0LnN1YjMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGpp
dC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMSkubGlu
a1RvKGxvb3AsICZqaXQpOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAgICB9CisKKyAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTUmVt
b3RlRnVuY3Rpb246Om9mZnNldE9mVGFyZ2V0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0
LnN0b3JlQ2VsbChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3Qo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9y
UmFyZURhdGEoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBq
aXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25S
YXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyks
IEdQUkluZm86OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBq
aXQubG9hZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAg
R1BSSW5mbzo6cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlD
aGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAv
LyBCYXNlZCBvbiB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4g
T24gQVJNNjQsIGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgRU5BQkxF
KEFTU0VSVCkgJiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgY2hlY2tOb3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJv
LCBncHIpOworICAgICAgICBhYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7CisgICAg
ICAgIGNoZWNrTm90TnVsbC5saW5rKCkKKyAgICB9CisjZW5kaWYKKworICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBqaXQu
Y2FsbChHUFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisgICAgLy8gRklYTUU6IGlmIGFu
IGV4Y2VwdGlvbiBpcyB0aHJvd24gd2l0aGluIGEgSlMgY2FsbCwgd2UnbGwgZW5kIHVwIGluIGFu
IG91dGVyIGV4Y2VwdGlvbiBoYW5kbGVyIGFuZCB0aGUKKyAgICAvLyByZXRocm93IGxvZ2ljIHdv
bid0IG9jY3VyIGhlcmUuIE5lZWQgdG8gc2V0IHVwIGFuIAorICAgIENDYWxsSGVscGVyczo6SnVt
cCB0YXJnZXRGdW5jdGlvbkV4Y2VwdGlvbiA9IGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKTsK
KworICAgIC8vIFdyYXAgcmV0dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJlZ1QwKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1By
aW1pdGl2ZTsKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2Vs
bChyZXN1bHRSZWdzKSk7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdE9iamVjdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQ
UkluZm86OnJlZ1QyLCByZXN1bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkp
OworCisgICAgcmVzdWx0SXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICB0YXJnZXRGdW5jdGlvbkV4Y2Vw
dGlvbi5saW5rKCZqaXQpOworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0aW9u
KT4oR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Cisg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAv
LyBGYWxsIHRocm91Z2ggdG8ganVtcCB0byBoYW5kbGVyCisKKyAgICBleGNlcHRpb25DaGVja3Mu
bGluaygmaml0KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0
eXBlKG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoJnZtKSk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlv
blB0clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7
CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OlJlbW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGlu
ayhub0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKAorICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxp
emVkIHRodW5rIGZvciByZW1vdGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5
NDVkZjFkNWVlMS4uNTg5ZTcwMDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4
Miw4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dl
bmVyYXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJv
dW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBF
TkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAppbmRleCA4ZjhjNWYzNjlkNmVhNTIwODgxNzhiN2NjODViNzI0NzUxNDc0Y2FmLi4wOThk
NWY1ZDY0YmI3Y2QxNGQzNmVmNDkzMmI2YmM5NWUzYTA2NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNG
aW5hbGl6YXRpb25SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRl
ICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAj
aW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAt
MzY2LDYgKzM2Nyw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RG9sbGFyRXZhbFNjcmlwdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5j
dGlvbkRvbGxhckdDKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9u
RG9sbGFyQ2xlYXJLZXB0T2JqZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRj
YXN0KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdl
bnRSZXBvcnQpOwpAQCAtNjQ5LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCBkb2xsYXIsICJnYyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2
bSwgZG9sbGFyLCAiY2xlYXJLZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2Jq
ZWN0cywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7
CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5j
dGlvbkRvbGxhckdsb2JhbE9iamVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3Bl
cnR5QXR0cmlidXRlOjpOb25lKSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJp
c1JlbW90ZUZ1bmN0aW9uIiwgZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAg
ICAgICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
Z2xvYmFsIiksIGdsb2JhbFRoaXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9t
QWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAg
LTIwODMsNiArMjA4NiwxOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xs
YXJHbG9iYWxPYmplY3RGb3IsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3Jl
YXRlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAg
ICBKU1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oaXNSZW1vdGVGdW5jdGlvbihhcmcpKSk7Cit9CisKIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50cmluc2ljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5jcHAKaW5kZXggZmY1ZjE5MjQ2OTBmNjJmNDhjNTEzNjViNTJlNmM1NjNiNGU2Mjg5
ZC4uYjgxNzU5YmNhN2VhOGQ1NDJiYzkyZDExZmYyODdiNTBkODJmMzc2YyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCkBAIC0yMDUsNiArMjA1LDggQEAg
Y29uc3QgY2hhciogaW50cmluc2ljTmFtZShJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICBy
ZXR1cm4gIklzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMiOwogICAgIGNhc2UgQm91bmRGdW5jdGlv
bkNhbGxJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5z
aWMiOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1
cm4gIlJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEdldEludHJp
bnNpYzoKICAgICAgICAgcmV0dXJuICJKU01hcEdldEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01h
cEhhc0ludHJpbnNpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgK
aW5kZXggOGU2OGU3ZTc0ZmI3OGNkYmQzMzI0Y2ZiZjBhMjVlZDZkMjBkNmQ1OC4uNGFlMzY1MWI1
NzVlMjMxNThiZjY4OTYwYjZkY2NjMDlhNTdiYWYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50cmluc2ljLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBlbnVtIEludHJpbnNpYyA6
IHVpbnQ4X3QgewogICAgIFR5cGVkQXJyYXlFbnRyaWVzSW50cmluc2ljLAogICAgIElzVHlwZWRB
cnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAg
UmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAogICAgIEpTTWFwR2V0SW50cmluc2ljLAogICAg
IEpTTWFwSGFzSW50cmluc2ljLAogICAgIEpTTWFwU2V0SW50cmluc2ljLApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCA2OGMwZTViYzJlYTA0YjMwMmRjNDNkMjQ4YWI1
MTg4ZjRiM2UzMGZmLi5hNjk5MzE1OTA5OWNjYzFiNzM5NmE5N2M1OGZkNGVlMzFhNWMxODJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApAQCAtOTksNiArOTksNyBAQCBz
dHJ1Y3QgSlNUeXBlUmFuZ2UgewogICAgIG1hY3JvKEpTU3ltYm9sVGFibGVPYmplY3QsIEpTVHlw
ZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpNb2R1bGVFbnZpcm9ubWVudFR5cGUpIFwKICAg
ICBtYWNybyhKU1Njb3BlLCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6V2l0aFNj
b3BlVHlwZSkgXAogICAgIG1hY3JvKFN0cmluZ09iamVjdCwgSlNUeXBlOjpTdHJpbmdPYmplY3RU
eXBlLCBKU1R5cGU6OkRlcml2ZWRTdHJpbmdPYmplY3RUeXBlKSBcCisgICAgbWFjcm8oU2hhZG93
UmVhbG1PYmplY3QsIEpTVHlwZTo6U2hhZG93UmVhbG1UeXBlLCBKU1R5cGU6OlNoYWRvd1JlYWxt
VHlwZSkgXAogCiAKIC8vIEZvcndhcmQgZGVjbGFyZSB0aGUgY2xhc3NlcyBiZWNhdXNlIHRoZXkg
bWF5IG5vdCBhbHJlYWR5IGV4aXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCmluZGV4IDg0NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJhOWZjZmQ4ZmMu
LjAyZjJlNDMxNzQxNjMxYzYxZDI3ZjE2M2Y5YjZlMzUxMDNmZGM1YzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAgICBib29sIGlz
Q2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlbW90ZUZ1bmN0
aW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUgbmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2IwYWQ5NzIxMmU4OGY5
ODdhNWRiMDguLjQ3ODU0YTQ2NTQwZmY2MzdkZDFmNWI5MTU5ZDQzNzA4YTFiYWM5MjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZS5oIgogI2luY2x1
ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRl
ICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0YWJsZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTc4LDYgKzc5LDExIEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246
OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gIWlzSG9zdEZ1
bmN0aW9uKCkgJiYganNFeGVjdXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCk7
CiB9CiAKK2lubGluZSBib29sIEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihqc0R5bmFtaWNDYXN0PGNvbnN0IEpTUmVt
b3RlRnVuY3Rpb24qPihnbG9iYWxPYmplY3QoKS0+dm0oKSwgdGhpcykpOworfQorCiBpbmxpbmUg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAg
IEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKQEAgLTk4LDYgKzEwNCwxNCBAQCBp
bmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihKU1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9u
KCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAKK2lubGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24o
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oZ2V0SlNGdW5jdGlvbih2YWx1ZSkpOworICAgIGlmICghZnVuY3Rpb24pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24o
KTsKK30KKwogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0
CiB7CiAgICAgaWYgKEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAppbmRleCAyODY0YTE5NWY1NDJlMDk0MzZhZmY3ODMxMWM0OTZiNTM1MDIxMzdhLi41MmI4NWQx
ZThlMzhkN2IzZWY2NjZjYWEyMmY1NGYwNzJiOTIwNTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAK
ICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCkBAIC03NjksNiArNzcwLDEwIEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6
ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRG
dW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXIt
Pm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVG
dW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXpl
cjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBj
YWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBu
dWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxs
cHRyOwpAQCAtMTUzMCw2ICsxNTM1LDE0IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBs
b3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAg
ICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9s
KSk7CiAgICAgICAgIH0pOwogCisgICAgLy8gU2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNv
bnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVt
b3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGlu
aXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJl
bW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0pOworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5p
bml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAg
ICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAg
ICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkg
U3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFs
KV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0y
MjU4LDYgKzIyNzEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5t
X2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+
bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2Jq
ZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hhZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDAz
ZWEzYTZjMzE2OWU1N2VkZjc3MDExY2IwOGIyNjE4YTA1MGY5OTQuLjgxMzY1MWIyN2Q2NWM2ZDYy
ZjdiMmUxNDk1NTk4NDk5NzdjOGIyMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDE4LDYgKzQxOCw3IEBAIHB1YmxpYzoKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5j
dGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODYxLDYg
Kzg2Miw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgp
OyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBT
dHJ1Y3R1cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
UmVjb3JkU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA1YWExNmFiNTY5MjlhMmI4YmNiNjJjMzlmYjU2YmUwOTM3OTI2ZTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90
ZUZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVu
Y3Rpb24uaCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5m
byBKU1JlbW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikg
fTsKKworSlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0NlbGwqIHRhcmdldCkKKyAgICA6IEJhc2Uodm0sIGV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorICAgICwgbV90YXJnZXQodm0sIHRoaXMsIHRh
cmdldCkKK3sKK30KKworc3RhdGljIEpTVmFsdWUgd3JhcFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgaWYgKHZh
bHVlLmlzUHJpbWl0aXZlKCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGlmICh2YWx1
ZS5pc0NhbGxhYmxlKHZtKSkgeworICAgICAgICBKU0NhbGxlZSogdGFyZ2V0ID0gc3RhdGljX2Nh
c3Q8SlNDYWxsZWUqPih2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
UmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB0YXJnZXQpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUgd3JhcEFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdl
dEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpKQorICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3
ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1pdGl2ZSIpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIHdy
YXByUmV0dXJuVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAg
IHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdl
ZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04o
cmVtb3RlSlNGdW5jdGlvbkNhbGwsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1JlbW90ZUZ1
bmN0aW9uKiByZW1vdGVGdW5jdGlvbiA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQocmVtb3RlRnVuY3Rpb24tPmlzUmVtb3RlRnVu
Y3Rpb24oKSk7CisgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdl
dEZ1bmN0aW9uKCk7CisgICAgQVNTRVJUKHRhcmdldCk7CisKKyAgICBKU0dsb2JhbE9iamVjdCog
dGFyZ2V0R2xvYmFsT2JqZWN0ID0gdGFyZ2V0LT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCk7
CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0YXJnZXQtPmV4ZWN1dGFibGUoKTsKKyAgICBpZiAo
ZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvckNhbGwoKSkgeworICAgICAgICAvLyBGb3JjZSB0aGUg
ZXhlY3V0YWJsZSB0byBjYWNoZSBpdHMgYXJpdHkgZW50cnlwb2ludC4KKyAgICAgICAgZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpOworICAgIH0K
KworICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2bSwgdGFyZ2V0KTsKKyAgICBBU1NF
UlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1
bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0LCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7CisKKyAgICAvLyBIaWRlIGV4Y2VwdGlvbnMgZnJvbSBjYWxsaW5nIHJlYWxt
CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJhbiBl
cnJvciBvY2N1cnJlZCBpbiByZW1vdGUgcmVhbG0iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgfQorCisgICAgYXV0byB3cmFwcGVkUmVzdWx0ID0gd3JhcHJSZXR1cm5W
YWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh3cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGwsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiByZW1vdGVGdW5jdGlvbiA9IGpzQ2FzdDxKU1Jl
bW90ZUZ1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQocmVtb3Rl
RnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKSk7CisgICAgSlNDZWxsKiB0YXJnZXQgPSByZW1v
dGVGdW5jdGlvbi0+dGFyZ2V0KCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9i
amVjdCA9IHRhcmdldC0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOworCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCk7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1
ZSA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKHdyYXBwZWRWYWx1
ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJmbG93ZWQoKSkpIHsKKyAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisKKyAgICBhdXRvIGNhbGxEYXRhID0g
Z2V0Q2FsbERhdGEodm0sIHRhcmdldCk7CisgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2Fs
bERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2FsbCh0YXJnZXRHbG9iYWxP
YmplY3QsIHRhcmdldCwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworCisgICAgLy8g
SGlkZSBleGNlcHRpb25zIGZyb20gY2FsbGluZyByZWFsbQorICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB0aHJvd1R5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiYW4gZXJyb3Igb2NjdXJyZWQgaW4gcmVtb3Rl
IHJlYWxtIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAg
IGF1dG8gd3JhcHBlZFJlc3VsdCA9IHdyYXBWYWx1ZSh0YXJnZXRHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZSh3cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihp
c1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShzdGF0
aWNfY2FzdDxib29sPihqc0R5bmFtaWNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihnbG9iYWxPYmpl
Y3QtPnZtKCksIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEFTU0VSVChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKKyAg
ICBKU1ZhbHVlIHRhcmdldCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAg
QVNTRVJUKHRhcmdldC5pc0NhbGxhYmxlKHZtKSk7CisKKyAgICBKU0NlbGwqIHRhcmdldENhbGxh
YmxlID0gdGFyZ2V0LmFzQ2VsbCgpOworICAgIEpTR2xvYmFsT2JqZWN0KiBkZXN0aW5hdGlvbkds
b2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKKyAgICBpZiAoIWNhbGxGcmFtZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBpZiAoYXV0byBzaGFk
b3dSZWFsbSA9IGpzRHluYW1pY0Nhc3Q8U2hhZG93UmVhbG1PYmplY3QqPih2bSwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudCgxKSkpCisgICAgICAgICAgICBkZXN0aW5hdGlvbkdsb2JhbE9i
amVjdCA9IHNoYWRvd1JlYWxtLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3Qs
IHRhcmdldENhbGxhYmxlKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpKTsKK30KKworaW5saW5lIFN0cnVjdHVyZSogZ2V0UmVtb3RlRnVuY3Rp
b25TdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50IGdsb2JhbE9iamVjdC1hd2FyZSBzdHJ1Y3R1cmUgY2FjaGluZworICAgIHJl
dHVybiBnbG9iYWxPYmplY3QtPnJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCk7Cit9CisKK0pTUmVt
b3RlRnVuY3Rpb24qIEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogdGFyZ2V0Q2FsbGFibGUpCit7CisgICAgQVNTRVJU
KHRhcmdldENhbGxhYmxlICYmIHRhcmdldENhbGxhYmxlLT5pc0NhbGxhYmxlKHZtKSk7CisgICAg
aWYgKGF1dG8gcmVtb3RlID0ganNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRh
cmdldENhbGxhYmxlKSkgeworICAgICAgICB0YXJnZXRDYWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0
KCk7CisgICAgICAgIEFTU0VSVCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHRhcmdldENhbGxhYmxl
KSk7CisgICAgfQorCisgICAgYm9vbCBpc0pTRnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHRhcmdl
dENhbGxhYmxlKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0UmVt
b3RlRnVuY3Rpb24oaXNKU0Z1bmN0aW9uKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdl
dFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKGdsb2JhbE9iamVjdCk7CisgICAgSlNSZW1vdGVGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JlbW90ZUZ1bmN0
aW9uPih2bSkpIEpTUmVtb3RlRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlLCB0YXJnZXRDYWxsYWJsZSk7CisKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwordm9pZCBKU1JlbW90ZUZ1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpT
Q2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fdGFyZ2V0KTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUmVtb3RlRnVu
Y3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDYzY2NkMWYxYjg5YjZj
OWIxZWVmZWNmMjhmZDljMzdjOThiNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqIEF1dGhvcjogQ2FpdGxpbiBQ
b3R0ZXIgPGNhaXRwQGlnYWxpYS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihyZW1vdGVKU0Z1bmN0aW9uQ2FsbCk7CitKU0NfREVDTEFS
RV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9uQ2FsbCk7CitKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGlzUmVtb3RlRnVuY3Rpb24pOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjcmVh
dGVSZW1vdGVGdW5jdGlvbik7CisKKy8vIEpTUmVtb3RlRnVuY3Rpb24gY3JlYXRlcyBhIGJyaWRn
ZSBiZXR3ZWVuIGl0cyBuYXRpdmUgUmVhbG0gYW5kIGEgcmVtb3RlIG9uZS4KKy8vIFdoZW4gaW52
b2tlZCwgYXJndW1lbnRzIGFyZSB3cmFwcGVkIHRvIHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlv
biBhY3Jvc3MgdGhlIHJlYWxtIGJvdW5kYXJ5LgorLy8gVGhlIHJldHVybiB2YWx1ZSBhbmQgYW55
IGFicnVwdCBjb21wbGV0aW9ucyBhcmUgYWxzbyBmaWx0ZXJlZC4KK2NsYXNzIEpTUmVtb3RlRnVu
Y3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0Z1bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2Vs
bFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0ucmVtb3RlRnVuY3Rpb25T
cGFjZTxtb2RlPigpOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1Jl
bW90ZUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogdGFyZ2V0
Q2FsbGFibGUpOworCisgICAgSlNDZWxsKiB0YXJnZXQoKSB7IHJldHVybiBtX3RhcmdldC5nZXQo
KTsgfQorICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNGdW5jdGlvbio+KGdldEpTRnVuY3Rpb24odGFyZ2V0KCkpKTsgfQorICAgIEpTR2xvYmFs
T2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7IHJldHVybiB0YXJnZXRGdW5jdGlvbigpLT5n
bG9iYWxPYmplY3QoKTsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNG
dW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYXJnZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNSZW1vdGVGdW5jdGlvbiwgbV90YXJnZXQpOyB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOworCitwcml2YXRlOgorICAgIEpTUmVtb3RlRnVuY3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0NlbGwqIHRhcmdldENhbGxhYmxl
KTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90YXJnZXQ7Cit9OworCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggZmYxYWFmNzNhNDlkM2Y3MTFmNTQy
ZDY1ZjBkMWRmMzc2MWNjMjBiMS4uMDVjMTU5Yzg2ZDc4OWY0ZGNjMTY4ZWMxYmZhNmRmMjIzMjBk
Y2NmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNjMyLDYgKzYzMiw4
IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gcmFuZG9tVGh1bmtHZW5lcmF0b3I7CiAg
ICAgY2FzZSBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuIGJvdW5k
RnVuY3Rpb25DYWxsR2VuZXJhdG9yOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmlu
c2ljOgorICAgICAgICByZXR1cm4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTcwOSw2ICs3MTEsMjUg
QEAgTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rp
b24sIGJvb2wgY2FuQ29uc3RydWN0KQogICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RCb3Vu
ZEV4ZWN1dGFibGUpOwogfQogCitOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0UmVtb3RlRnVuY3Rp
b24oYm9vbCBpc0pTRnVuY3Rpb24pCit7CisgICAgYm9vbCBzbG93Q2FzZSA9ICFpc0pTRnVuY3Rp
b247CisgICAgYXV0byBnZXRPckNyZWF0ZSA9IFsmXSAoV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYg
c2xvdCkgLT4gTmF0aXZlRXhlY3V0YWJsZSogeworICAgICAgICBpZiAoYXV0byogY2FjaGVkID0g
c2xvdC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7CisgICAgICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIHJlc3VsdCA9IGdldEhvc3RGdW5jdGlvbigKKyAgICAgICAgICAgIHNsb3dDYXNl
ID8gcmVtb3RlRnVuY3Rpb25DYWxsIDogcmVtb3RlSlNGdW5jdGlvbkNhbGwsCisgICAgICAgICAg
ICBzbG93Q2FzZSA/IE5vSW50cmluc2ljIDogUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAor
ICAgICAgICAgICAgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIFN0cmlu
ZygpKTsKKyAgICAgICAgc2xvdCA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4ocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgaWYgKHNsb3dDYXNlKQorICAgICAg
ICByZXR1cm4gZ2V0T3JDcmVhdGUobV9zbG93UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAg
ICByZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKK30K
KwogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5h
bEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAj
aWYgRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IGExYjBiMzg1
MzhiZjIwODMyMDc5ZGZjOTQ3NGZlYTk1NTNmMzBmMGEuLmE5NjA5NjNiM2EyZDk0ZTY1ZjYyNGFj
NTU2NzU4NDllNmE5MjBkZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMy
LDYgKzQzMiw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2Up
CkBAIC01NzIsNiArNTczLDkgQEAgcHVibGljOgogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4g
bV9zbG93Qm91bmRFeGVjdXRhYmxlOwogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93
Q2FuQ29uc3RydWN0Qm91bmRFeGVjdXRhYmxlOwogCisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiBtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGU7CisgICAgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPiBtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGU7CisKICAgICBSZWY8RGVmZXJyZWRX
b3JrVGltZXI+IGRlZmVycmVkV29ya1RpbWVyOwogCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0
cnVjdGluZ0NhbGxiYWNrT2JqZWN0OwpAQCAtNjg1LDYgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNp
YywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVu
Y3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KTsKKyAgICBOYXRpdmVF
eGVjdXRhYmxlKiBnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbik7CiAKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlv
blRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450037</attachid>
            <date>2022-01-26 11:01:22 -0800</date>
            <delta_ts>2022-01-26 12:19:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220126190121.patch</filename>
            <type>text/plain</type>
            <size>60574</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OGQzMThiMmQ3NWUwMDQwYzVmZTBhYmM5OTc3MmMxMTVhMTg3ZmFmLi4wZjlmNzExNzM2NzhjNjNm
Njg5ZGU3YTE4ZjQxZjgwZWIxZDlmYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0yNiAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAqIGJ1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90
eXBlLmpzOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaDoKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
cmluc2ljLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAg
ICogcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTUmVtb3RlRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIyLTAxLTI2ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRG8gbm90IHJ1biB0ZXN0UGluZ1Bv
bmdTdGFja092ZXJmbG93IHdoaWxlIHJ1bm5pbmcgbXVsdGl0aHJlYWRlZCBNdWx0aXRocmVhZGVk
TXVsdGlWTUV4ZWN1dGlvblRlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCAzN2NlNzUzNzQzYzM1M2Q1OGY2NjExOGI3ODM3Yzg3ODhlNDgxOTdlLi45ZjAxYzhmMzcwNGU5
YzEzNjVkYmI5YTY4YmJiOTNkZWZiYzc5MWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMDgyLDYgKzEwODIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuaAogICAg
IHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBydW50aW1lL0pTUHJveHku
aAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1lL0pTU2NyaXB0RmV0Y2hQ
YXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE1Y2IxZTZhYmJi
ZGQ3NmVlZjdjNWYwMGIyNWNjZDUyMWU5MGZkZS4uMDIzNzE3NDJkMTIwYTgzN2JhNWQyZDM0ZDM0
ZDljMTcyMGFhMjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjksNiAr
MTEyOSw3IEBACiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5n
Q29udmVudGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjQwMzI3RTI3OThE
MUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBK
U0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLzsg
fTsKIAkJNUI3MENGRTAxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRB
MURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi87IH07CiAJCTVC
NzBDRkUyMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRDMURCNjlF
NUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTQwNzQs
NiArNDA3NSw4IEBACiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDExRDdBQjE4
NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21DYWxs
aW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3RTI3
OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Jl
bW90ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdGMjc5
OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTUmVtb3RlRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qjcw
Q0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QjcwQ0ZEOTFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkRBMURCNjlFNUMwMEVDMjNG
OSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU4MjMsOCArNTgyNiw4IEBACiAJCQkJQTczMUIyNUExMzAwOTM4ODAwNDBBN0ZBIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDcwODIy
QTFDNzAwNzM2OTc1IC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk5
MzJGNUJENjA4MjJBMUM3MDA3MzY5NzUgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICov
LAotCQkJCUE1MDk4QjA0MUMxNkFBMDIwMDA4Nzc5NyAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLywKIAkJCQlEREIwNEY0MjI3OEU1NkEyMDA4RDM2NzggLyogbGliV1RGLmEg
aW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBNTA5OEIwNDFDMTZBQTAyMDAwODc3OTcgLyogU2VjdXJp
dHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03MzQ5LDExICs3MzUyLDExIEBACiAJ
CQkJRTM4MzUwMDkyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwuaCAqLywKIAkJCQkxNDg1
MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAqLywKIAkJCQkxNDg1
MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8sCi0JCQkJNTJGREFC
QzIyNzg4MDc2OTAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCAqLywKIAkJCQlB
RDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLywKIAkJCQlB
RDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8sCiAJCQkJQUQ1
QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCiAJCQkJQUQ1QzM2
REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAorCQkJCTUyRkRBQkMyMjc4
ODA3NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQwMDY1
OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQkxNEM1QUQ2ODIyRjMz
RkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmNwcCAqLywKIAkJCQkxNEM1QUQ2OTIy
RjMzRkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmggKi8sCkBAIC03OTUzLDYgKzc5
NTYsOCBAQAogCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCAqLywKIAkJCQk4NjI1NTNDRTE2MTM2QUE1MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgKi8sCiAJCQkJODYyNTUzQ0YxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuaCAqLywKKwkJ
CQk1QjQwMzI3RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5jcHAgKi8sCisJ
CQkJNUI0MDMyN0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLywKIAkJ
CQk1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAogCQkJ
CTUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTE0
ODc0QUUxMTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLywKQEAgLTEwNjU4LDYgKzEw
NjYzLDcgQEAKIAkJCQk5OTZCNzMxRjFCREEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNlUHJvdG90
eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8q
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIx
NjEzNkUxQTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTVCNDAzMjgw
Mjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTUyQzM4MDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0ci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRp
bWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTExMTU3LDYgKzExMTYzLDcgQEAKIAkJCQkxNDg1MjFE
ODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyogV2FzbUlSR2VuZXJh
dG9ySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQwMDY1OUUxRUNBQzgxMjAwMENBOTI2
IC8qIFdhc21MaW1pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTBGQTFGMjM1N0JFQzkwMDkz
Q0Q0RCAvKiBXYXNtTExJbnRUaWVyVXBDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0U5
RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAq
LywKQEAgLTExMjA4LDcgKzExMjE1LDYgQEAKIAkJCQlFM0EzMkJDNzFGQzgzMTQ3MDA3RDdFNzYg
LyogV2Vha01hcEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOTNBREQ4MUZFNzAyRDAwMDIy
RDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU2
MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM5OTMwQzgyMkFEM0I5QTAwNTFDREUyIC8qIFdlYWtPYmplY3RS
ZWZDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQUUyMkFEM0MzQTAwMjNG
NEMwIC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0
RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4NzgxZmI0NzEwNDBlY2VlMDE4ZGM3MTFjNTRjZjZiNTMx
NDk0NjU2Li5hOTg5MDA1NDkwYWUzYjViOGMyOTgzMDdlMDNlNjBjZThjMzA4ODQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MDAsNiArOTAwLDcgQEAgcnVudGltZS9KU1Byb21p
c2VDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCiBydW50aW1lL0pTUHJveHkuY3BwCitydW50
aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAogcnVu
dGltZS9KU1Njb3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDI4NWRmMGQxYTE4MDlk
YjIwYjQ3OTRjZDMxMjA1OWVmYzZlZTAwZTAuLjE4NWFhMzFmNjFkOTA0NzVjOTdhZjBhMWJiMjYz
ZjdiMGE5YWZhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2KERGR1RodW5rKSBcCiAgICAg
dihGVExUaHVuaykgXAogICAgIHYoQm91bmRGdW5jdGlvblRodW5rKSBcCisgICAgdihSZW1vdGVG
dW5jdGlvblRodW5rKSBcCiAgICAgdihTcGVjaWFsaXplZFRodW5rKSBcCiAgICAgdihWaXJ0dWFs
VGh1bmspIFwKICAgICB2KFdhc21UaHVuaykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDgwYTg3ZWIwMDdhOWQzOGM3MTU0Mjg5NjU4Zjg4
MTM4NDZiYzg4OGQuLmEwNTI1NzQ4NzZmYTE0OGFjOTgzYmM0MTcxZjQxNTVhNzBkM2YwZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4
OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykgXAogICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikgXAogICAg
IG1hY3JvKHNlbnRpbmVsU3RyaW5nKSBcCisgICAgbWFjcm8oY3JlYXRlUmVtb3RlRnVuY3Rpb24p
IFwKKyAgICBtYWNybyhpc1JlbW90ZUZ1bmN0aW9uKSBcCiAKIAogbmFtZXNwYWNlIFN5bWJvbHMg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxt
UHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxt
UHJvdG90eXBlLmpzCmluZGV4IDhkODkwNjg4ZDdhN2QxNzNhZmRiZjRmMDEyODE1M2E2YmU5YTRj
NGIuLmEyYjQxMGIzNjdmNGZjOTI4NTc2ZDE4ZjdlN2YzNzhiNDNlZmJjMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anMKQEAgLTMyLDM5ICszMiw3IEBAIGZ1bmN0aW9uIHdyYXAoZnJvbVNoYWRvd1JlYWxtLCBzaGFk
b3dSZWFsbSwgdGFyZ2V0KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmIChAaXNDYWxsYWJs
ZSh0YXJnZXQpKSB7Ci0gICAgICAgIHZhciB3cmFwcGVkID0gZnVuY3Rpb24oLyogYXJncy4uLiAq
LykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAg
ICAgICB2YXIgd3JhcHBlZEFyZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwotICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKLSAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIGFyZ3VtZW50cywgd2UgZmxpcCBgZnJvbVNoYWRv
d1JlYWxtYCBzaW5jZSB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgYSBmdW5jdGlvbiBmcm9t
IHJlYWxtIEEgdG8gd29yayBpbiByZWFsbSBCLCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAg
Ly8gd3JhcCB0aGUgYXJndW1lbnRzIChmcm9tIHJlYWxtIEIpIHRvIHdvcmsgaW4gcmVhbG0gQSBi
ZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0aW9uCi0g
ICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHdyYXBwZWRBcmdzLCBpbmRleCwgQHdyYXAo
IWZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIGFyZ3VtZW50c1tpbmRleF0pKTsKLQotICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LkBhcHBs
eShAdW5kZWZpbmVkLCB3cmFwcGVkQXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgbXNnID0gIndyYXBwZWQgZnVuY3Rpb24gdGhyZXc6ICIgKyBl
LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb21TaGFkb3dSZWFsbSkKLSAgICAg
ICAgICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKG1zZyk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1rVHlwZUVycm9yID0gQGV2YWxJblJlYWxt
KHNoYWRvd1JlYWxtLCAiKG1zZykgPT4gbmV3IFR5cGVFcnJvcihtc2cpIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVyciA9IG1rVHlwZUVycm9yLkBhcHBseShtc2cpOwotICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIEB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHJl
c3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1lJ107Ci0gICAg
ICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKLQotICAgICAgICAvLyBCZWNhdXNlIHRoaXMg
ZnVuY3Rpb24gKHdyYXApIHdpbGwgcnVuIHdpdGggdGhlIGluY3ViYXRpbmcgcmVhbG0KLSAgICAg
ICAgLy8gYWN0aXZlLCB3ZSBvbmx5IG5lZWQgdG8gZml4IHRoZSBwcm90b3R5cGUgb24gYHdyYXBw
ZWRgIGlmIHdlIGFyZQotICAgICAgICAvLyBtb3ZpbmcgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIGlu
Y3ViYXRpbmcgcmVhbG0gdG8gdGhlIHNoYWRvdyByZWFsbQotICAgICAgICBpZiAoIWZyb21TaGFk
b3dSZWFsbSkKLSAgICAgICAgICAgIEBtb3ZlRnVuY3Rpb25Ub1JlYWxtKHdyYXBwZWQsIHNoYWRv
d1JlYWxtKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgICAgIHJldHVybiBAY3JlYXRl
UmVtb3RlRnVuY3Rpb24odGFyZ2V0LCBmcm9tU2hhZG93UmVhbG0gPyBudWxsIDogc2hhZG93UmVh
bG0pOwogICAgIH0gZWxzZSBpZiAoQGlzT2JqZWN0KHRhcmdldCkpIHsKICAgICAgICAgQHRocm93
VHlwZUVycm9yKCJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUg
b3IgcHJpbWl0aXZlIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIxNmFmMGY2ODlmMGFiZWE0ODBh
ZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkwMDQ4OGY2ZGNiZGQyNzlkNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3Rh
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgdihjcmVh
dGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1l
cmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5nLCBudWxscHRyKSBcCisgICAg
dihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAgIHYoaXNSZW1vdGVGdW5jdGlv
biwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5LX1RJTUVfQ09OU1RBTlQobmFt
ZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMGM4ZDM1
NTk2MDRhZWQwYjMzOGM0ZDk3N2EzZDYwOTdkOTJjZWQ2My4uNmI4NjU0MjI4NGEwNGQxMzMyMThj
OWYzZWFkODUyZTBkNjI2MmZlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUg
IkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFr
T2JqZWN0UmVmLmgiCkBAIC0zMjE4LDYgKzMyMTksNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVsZU5hbWVz
cAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0
aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0ZEZ1bmN0
aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9iamVjdCkK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFzaDoweGI1MDZhOTM5CitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVtb3RlRnVuY3Rpb25TcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlLCBkZXN0cnVjdGli
bGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJsZSkKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMpCiBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hlclNwYWNlLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggNGRlODJlYjg3NDk0Y2M3OTA2YTM2ZWM5NTgyOTY1NWZkMWJj
ZDgwYi4uYWJiZGNiZmJlZjI4YTBkMzU1ZmVjZjkxNzY0YTU1MGI5YWYzZDUzZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTIyLDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVu
dHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2Ny
aXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAppbmRleCAyM2UwODcxOGRiZjgyMDQyMzVlMzk5YWE2NWNiMGQ5OTA4
Mjk3MWUwLi43NWY4OTAzZGZiNzdlMTA2YTViZDhmNThhMTUwZGM2YzYyZjQ2MmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZv
aWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291
bnRTYW5lKCk7CisgICAgaW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7
IGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRB
c3NlcnRJc0ludDMyKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BS
UmVnKSB7IH0KQEAgLTEzNTUsNiArMTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2Vy
dElzTnVsbChHUFJSZWcpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0K
ICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRB
c3NlcnROb0V4Y2VwdGlvbihWTSYpIHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VB
c3NlcnROb0V4Y2VwdGlvbihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKaW5kZXggMWRkN2I3M2M2MTY3OTYyN2YzMDJkOTE0MjJmNWJjMzdmMjE0ZTRi
MC4uMWUyZmRlMmM5NGI4NjQwZGE4Njc4YTgwMjc1OWJmZTA0ZDM0OWVkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFs
UHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAi
SlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAi
TExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTEx
NSw2ICsxMTYsODcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFs
dWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEds
b2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHZhbHVlKTsKKworICAgIGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSkpKTsKKwor
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJl
dHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlv
biogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24o
Y2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gY2FsbGVlLT50YXJnZXRG
dW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9i
YWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVyLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGVl
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
ICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKGNhbGxlZSkpOworCisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24sIEVuY29k
ZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlKSkKK3sKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKGNh
bGxlZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisKKyAgICAvLyBXZSBz
aG91bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJF
TEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICBpZiAoVU5MSUtFTFkodm0uaXNUZXJtaW5h
dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9
IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAg
U3RyaW5nIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CisgICAgRXhjZXB0aW9uKiB0b1N0cmluZ0V4Y2VwdGlvbiA9IHNjb3BlLmV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWSh0b1N0cmluZ0V4Y2VwdGlvbiAmJiB2bS5pc1Rlcm1p
bmF0aW9uRXhjZXB0aW9uKHRvU3RyaW5nRXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5n
KTsKKworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwor
fQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3Vs
dElzTm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2
ODM0YmYzLi5kNWU5ZjVjNzA1YTU4OTM5MDcxMWJhZjczNzBiMDA0YjI2MWZkYjg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtNTIsNiArNTIsNyBAQCBj
bGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU0xleGljYWxF
bnZpcm9ubWVudDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNSZW1vdGVGdW5jdGlvbjsKIGNs
YXNzIEpTU2NvcGU7CiBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIEpTVmFsdWU7CkBAIC0xNTUsNiAr
MTU2LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVl
Rm9yQ2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNW
YWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFs
dWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRK
U1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3Rl
RnVuY3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsK
IAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCBjNjU3MWE2
Y2I1N2U4MjRkY2M5ZTFjYTIzNWU0ZGJkZWEzMDkzM2IwLi4xODkzZWFjZTA4MmVkYmM4ZDdiMmUy
MzMzZjA0NTg2ZjFkNDc5MTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAi
U3BlY2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMiw2ICsxNDIzLDIwMiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZN
JiB2bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0
aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5z
dG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5z
aWduZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxp
Z25tZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygp
KQorICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3Rh
Y2tNaXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBh
cmd1bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0
YWlsCisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qg
c28gbG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2Fs
bCwgc2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11
bGEgZm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVy
IG9mIHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAg
Ly8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KQorICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAg
IC8vCisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsg
KENhbGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJl
Z2lzdGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDAp
OworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCBHUFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
aml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVz
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQp
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUg
YWN0dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sg
d2Ugd2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFj
ayBzcGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZt
LmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBU
aHJvdyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rp
b246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21U
aHVuayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVu
aykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRz
IGNvbmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFk
b3dyZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2Fs
bEhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUklu
Zm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0
aGUgYXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUg
Zm9yIGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGlu
IHRoZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
SlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6
cmVnVDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0
LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8s
IEdQUkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4
Y2VwdGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAv
LyBGb3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAg
ICAvLyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5l
dyBjYWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3Jh
cHBpbmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVt
b3RlRnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUn
cyBhcmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFN1YjMyKENDYWxsSGVscGVy
czo6WmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsK
KyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOwor
ICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdU
MSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmlt
aXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZh
bHVlSXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQu
YWRkcmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0
V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25Q
dHJUYWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6
cmVnVDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAg
aml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xv
dCgwKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkp
OworICAgICAgICBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpLmxpbmtUbyhsb29wLCAmaml0
KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpv
ZmZzZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3Jl
Q2VsbChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihDb2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNl
ZCBvbiB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJN
NjQsIGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgQVNTRVJUX0VOQUJM
RUQgJiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hl
Y2tOb3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRl
cik7CisgICAgICAgIGNoZWNrTm90TnVsbC5saW5rKCZqaXQpOworICAgIH0KKyNlbmRpZgorCisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJU
YWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAv
LyBGSVhNRTogaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aXRoaW4gYSBKUyBjYWxsLCB3ZSds
bCBlbmQgdXAgaW4gYW4gb3V0ZXIgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIHRoZQorICAgIC8vIHJl
dGhyb3cgbG9naWMgd29uJ3Qgb2NjdXIgaGVyZS4gV2Ugd2lsbCBuZWVkIHRvIGFkZCBzb21lIHdh
eSB0byBnZXQgaGVyZSBmcm9tIHVud2luZEdlbmVyaWMoKS4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgdGFyZ2V0RnVuY3Rpb25FeGNlcHRpb24gPSBqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSk7
CisKKyAgICAvLyBXcmFwIHJldHVybiB2YWx1ZQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
cmVzdWx0SXNQcmltaXRpdmU7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdENlbGwocmVzdWx0UmVncykpOworICAgIHJlc3VsdElzUHJpbWl0aXZlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RPYmplY3QocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JD
YWxsZXIpPihHUFJJbmZvOjpyZWdUMiwgcmVzdWx0UmVncyk7CisgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRp
b25QdHJUYWcpOworICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNl
cHRpb24odm0pKTsKKworICAgIHJlc3VsdElzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgdGFyZ2V0RnVu
Y3Rpb25FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlv
bkV4Y2VwdGlvbik+KEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRp
b24odm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRh
Zyk7CisgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGp1bXAgdG8gaGFuZGxlcgorCisgICAgZXhjZXB0
aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSkpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2
bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
bjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0pOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpSZW1vdGVGdW5jdGlvblRodW5rKTsKKyAgICBsaW5r
QnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0u
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJTcGVjaWFsaXplZCB0aHVuayBmb3IgcmVtb3RlIGZ1bmN0aW9uIGNhbGxzIik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IGE5ZmVlZWE5MjRhZTAwNzhkODQ1
MWUxNzJjNGM0OTQ1ZGYxZDVlZTEuLjU4OWU3MDA0NjQzYTIyNTM3MjVhZjJiYjhmMGZmMDVkMzMx
ZTdhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApA
QCAtODIsNiArODIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRy
dW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOwogCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYp
OworCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggZGYxODBmYmFkMWM3OTFlYzczY2Y2YjljYTNmNGI0NDI4YzQ2
YmE4NC4uYzVkMWY4ZjI5ZGY3OGM5ZTJmNTE1NjcyMGUwN2Y3MTdmMGJlMGUzYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2lu
Y2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJv
bWlzZS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmF0aXZlU3RkRnVuY3Rp
b24uaCIKQEAgLTM2Niw2ICszNjcsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckV2YWxTY3JpcHQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Eb2xsYXJHQyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckNsZWFyS2VwdE9iamVjdHMpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3IpOworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uKTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVj
ZWl2ZUJyb2FkY2FzdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhckFnZW50UmVwb3J0KTsKQEAgLTY0OSw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiZ2MiLCBmdW5jdGlvbkRvbGxhckdDLCAwLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sIGRvbGxhciwgImNsZWFyS2VwdE9iamVjdHMiLCBmdW5jdGlvbkRvbGxhckNs
ZWFyS2VwdE9iamVjdHMsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiZ2xvYmFsT2JqZWN0
Rm9yIiwgZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3IsIDEsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ZG9sbGFyLCAiaXNSZW1vdGVGdW5jdGlvbiIsIGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlv
biwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAg
ICAgICAgIAogICAgICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImdsb2JhbCIpLCBnbG9iYWxUaGlzKCkpOwogICAgICAgICBkb2xsYXItPnB1dERp
cmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSXNIVE1M
RERBIiksCkBAIC0yMDg0LDYgKzIwODcsMTggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIl9z
KSkpOworCisgICAgSlNWYWx1ZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzUmVtb3RlRnVuY3Rpb24oYXJnKSkpOwor
fQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0LCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuY3BwCmluZGV4IGZmNWYxOTI0NjkwZjYyZjQ4YzUxMzY1YjUyZTZj
NTYzYjRlNjI4OWQuLmI4MTc1OWJjYTdlYThkNTQyYmM5MmQxMWZmMjg3YjUwZDgyZjM3NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcApAQCAtMjA1LDYg
KzIwNSw4IEBAIGNvbnN0IGNoYXIqIGludHJpbnNpY05hbWUoSW50cmluc2ljIGludHJpbnNpYykK
ICAgICAgICAgcmV0dXJuICJJc1R5cGVkQXJyYXlWaWV3SW50cmluc2ljIjsKICAgICBjYXNlIEJv
dW5kRnVuY3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gIkJvdW5kRnVuY3Rpb25D
YWxsSW50cmluc2ljIjsKKyAgICBjYXNlIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKKyAg
ICAgICAgcmV0dXJuICJSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOwogICAgIGNhc2UgSlNN
YXBHZXRJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiSlNNYXBHZXRJbnRyaW5zaWMiOwogICAg
IGNhc2UgSlNNYXBIYXNJbnRyaW5zaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCmluZGV4IDhlNjhlN2U3NGZiNzhjZGJkMzMyNGNmYmYwYTI1ZWQ2ZDIwZDZkNTgu
LjRhZTM2NTFiNTc1ZTIzMTU4YmY2ODk2MGI2ZGNjYzA5YTU3YmFmMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCkBAIC0xMTgsNiArMTE4LDcgQEAgZW51bSBJ
bnRyaW5zaWMgOiB1aW50OF90IHsKICAgICBUeXBlZEFycmF5RW50cmllc0ludHJpbnNpYywKICAg
ICBJc1R5cGVkQXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kRnVuY3Rpb25DYWxsSW50cmlu
c2ljLAorICAgIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYywKICAgICBKU01hcEdldEludHJp
bnNpYywKICAgICBKU01hcEhhc0ludHJpbnNpYywKICAgICBKU01hcFNldEludHJpbnNpYywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKaW5kZXggNjhjMGU1YmMyZWEwNGIzMDJk
YzQzZDI0OGFiNTE4OGY0YjNlMzBmZi4uYTY5OTMxNTkwOTljY2MxYjczOTZhOTdjNThmZDRlZTMx
YTVjMTgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKQEAgLTk5LDYg
Kzk5LDcgQEAgc3RydWN0IEpTVHlwZVJhbmdlIHsKICAgICBtYWNybyhKU1N5bWJvbFRhYmxlT2Jq
ZWN0LCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6TW9kdWxlRW52aXJvbm1lbnRU
eXBlKSBcCiAgICAgbWFjcm8oSlNTY29wZSwgSlNUeXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5
cGU6OldpdGhTY29wZVR5cGUpIFwKICAgICBtYWNybyhTdHJpbmdPYmplY3QsIEpTVHlwZTo6U3Ry
aW5nT2JqZWN0VHlwZSwgSlNUeXBlOjpEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZSkgXAorICAgIG1h
Y3JvKFNoYWRvd1JlYWxtT2JqZWN0LCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSwgSlNUeXBlOjpT
aGFkb3dSZWFsbVR5cGUpIFwKIAogCiAvLyBGb3J3YXJkIGRlY2xhcmUgdGhlIGNsYXNzZXMgYmVj
YXVzZSB0aGV5IG1heSBub3QgYWxyZWFkeSBleGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCA4NDYwZDQyYzA3YTIxZjBhMjYzZmY4ZTgxYjJjNTAy
YTlmY2ZkOGZjLi4wMmYyZTQzMTc0MTYzMWM2MWQyN2YxNjNmOWI2ZTM1MTAzZmRjNWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC0xNTAsNiArMTUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAgIGJvb2wgaXNS
ZW1vdGVGdW5jdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWUoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCAyNWQ2MDk0MzBiYjdkZWI1ZWNiMGFk
OTcyMTJlODhmOTg3YTVkYjA4Li4zOTUwY2NmY2UyZTEyYTY2NzNhZjRkMGI5NmY2ZjkyNDIzYjhk
ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25J
bmxpbmVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUu
aCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFi
bGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OCw2ICs3OSwxMSBAQCBpbmxpbmUgYm9vbCBK
U0Z1bmN0aW9uOjppc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
ICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhlY3V0YWJsZSgpLT5pc0NsYXNzQ29uc3RydWN0b3JG
dW5jdGlvbigpOwogfQogCitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc1JlbW90ZUZ1bmN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4oZ2xvYmFs
T2JqZWN0KCktPnZtKCkpOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5j
dGlvbjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklu
bGluZSgpKTsKQEAgLTk4LDYgKzEwNCwxNCBAQCBpbmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihK
U1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICBy
ZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAK
K2lubGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZ2V0SlNGdW5jdGlvbih2YWx1
ZSkpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKTsKK30KKwogaW5saW5lIGJvb2wgSlNGdW5j
dGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9uUmFyZURh
dGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA2ZWQ4ZDIwYjBkM2Q3OGJjZGQx
N2U0MGVhYjA3MTk4YmFhMGI4MGEzLi4zOGU0ZjYxZDVmMmQxNTU0MGM3ZmRjYmUzMDVmZTRmNmQ4
YjAzNDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNp
bmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5o
IgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9y
LmgiCkBAIC03NzAsNiArNzcxLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZt
KQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAg
ICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGlu
aXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
KTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIo
CisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAg
ICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52
bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwor
ICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAg
IEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMSw2ICsxNTM2LDE0IEBA
IGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBm
ZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9u
OjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAs
IFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwogCisgICAgLy8g
U2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10g
KGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0
KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0
Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0p
OworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1l
Q29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxp
emVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNy
ZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3Ry
aW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1Rp
bWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFz
c2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0
aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0yMjU5LDYgKzIyNzIsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNp
dCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVy
ZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0
dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hh
ZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dl
bmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGUyYjBlYjgyMjQyNjkxZTAwMGMyNGJhNDA2ZDMw
NjcxNzRiMzNiYTcuLmU0ODI0OWQwNDNhMzc0NDJjMTE5MmJiZmI1YTNmN2Y1MzI5Yzk1OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAt
NDIxLDYgKzQyMSw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0
cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9u
YXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eU9m
ZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODY0LDYgKzg2NSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBN
YXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhw
TWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUq
IHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUq
IHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGVGdW5jdGlv
blN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZVJlY29yZFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLmdldCh0aGlzKTsg
fQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAg
ICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
eHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNWFiM2RiMTlk
MjllMDRhMTBlZjVmNGYwMDA5NzkzMzcxZjk5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDIy
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICogQXV0aG9yOiBD
YWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgIkV4ZWN1
dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJT
aGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1JlbW90ZUZ1bmN0aW9uOjpzX2luZm8g
PSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKworSlNSZW1vdGVGdW5jdGlvbjo6SlNS
ZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCog
dGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24odm0sIHRoaXMsIHRhcmdldEZ1bmN0
aW9uKQoreworfQorCitzdGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFs
dWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVl
LmlzQ2FsbGFibGUodm0pKSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0
aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUgd3JhcEFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3Qs
IHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVu
IHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1pdGl2ZSIpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIHdyYXBy
UmV0dXJuVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11
c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rp
b25DYWxsRm9ySlNGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3RlRnVu
Y3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5j
dGlvbigpKTsKKyAgICBKU0Z1bmN0aW9uKiB0YXJnZXRGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4ocmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCk7
CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICB9CisgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwor
ICAgIGlmIChleGVjdXRhYmxlLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZv
cmNlIHRoZSBleGVjdXRhYmxlIHRvIGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAg
ICBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7
CisgICAgfQorCisgICAgYXV0byBjYWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5j
dGlvbik7CisgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUp
OworICAgIGF1dG8gcmVzdWx0ID0gY2FsbCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0
aW9uLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7CisKKyAgICAvLyBIaWRlIGV4Y2Vw
dGlvbnMgZnJvbSBjYWxsaW5nIHJlYWxtCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsICJhbiBlcnJvciBvY2N1cnJlZCBpbiByZW1vdGUgcmVhbG0iKTsK
KyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQorCisgICAgYXV0byB3cmFw
cGVkUmVzdWx0ID0gd3JhcHJSZXR1cm5WYWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwg
cmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh3
cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5j
dGlvbkNhbGxHZW5lcmljLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlv
biogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+
anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9u
KCkpOworICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHJlbW90ZUZ1bmN0aW9uLT50YXJn
ZXRGdW5jdGlvbigpOworICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0
YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50
Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgd3JhcHBlZFZhbHVlID0gd3JhcFZhbHVl
KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFy
Z3VtZW50KGkpKTsKKyAgICAgICAgYXJncy5hcHBlbmQod3JhcHBlZFZhbHVlKTsKKyAgICB9Cisg
ICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFzT3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOworICAgIH0KKworICAgIGF1dG8gY2FsbERhdGEgPSBnZXRDYWxsRGF0YSh2
bSwgdGFyZ2V0RnVuY3Rpb24pOworICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRh
OjpUeXBlOjpOb25lKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNhbGwodGFyZ2V0R2xvYmFsT2JqZWN0
LCB0YXJnZXRGdW5jdGlvbiwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOworCisgICAg
Ly8gSGlkZSBleGNlcHRpb25zIGZyb20gY2FsbGluZyByZWFsbQorICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiYW4gZXJyb3Igb2NjdXJyZWQgaW4gcmVt
b3RlIHJlYWxtIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KKwor
ICAgIGF1dG8gd3JhcHBlZFJlc3VsdCA9IHdyYXBWYWx1ZSh0YXJnZXRHbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgcmVzdWx0KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZSh3cmFwcGVkUmVzdWx0KSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
Tihpc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShz
dGF0aWNfY2FzdDxib29sPihqc0R5bmFtaWNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihnbG9iYWxP
YmplY3QtPnZtKCksIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSkpOworfQorCitK
U0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIEFTU0VSVChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsK
KyAgICBKU1ZhbHVlIHRhcmdldEZ1bmN0aW9uID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKKyAgICBBU1NFUlQodGFyZ2V0RnVuY3Rpb24uaXNDYWxsYWJsZSh2bSkpOworCisgICAg
SlNPYmplY3QqIHRhcmdldENhbGxhYmxlID0ganNDYXN0PEpTT2JqZWN0Kj4odGFyZ2V0RnVuY3Rp
b24uYXNDZWxsKCkpOworICAgIEpTR2xvYmFsT2JqZWN0KiBkZXN0aW5hdGlvbkdsb2JhbE9iamVj
dCA9IGdsb2JhbE9iamVjdDsKKyAgICBpZiAoIWNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
MSkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBpZiAoYXV0byBzaGFkb3dSZWFsbSA9
IGpzRHluYW1pY0Nhc3Q8U2hhZG93UmVhbG1PYmplY3QqPih2bSwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSkpCisgICAgICAgICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IHNo
YWRvd1JlYWxtLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVz
dGluYXRpb25HbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdCA9IEpTUmVt
b3RlRnVuY3Rpb246OmNyZWF0ZSh2bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRhcmdldENh
bGxhYmxlKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpKTsKK30KKworaW5saW5lIFN0cnVjdHVyZSogZ2V0UmVtb3RlRnVuY3Rpb25TdHJ1Y3R1
cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IGdsb2JhbE9iamVjdC1hd2FyZSBzdHJ1Y3R1cmUgY2FjaGluZworICAgIHJldHVybiBnbG9i
YWxPYmplY3QtPnJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCk7Cit9CisKK0pTUmVtb3RlRnVuY3Rp
b24qIEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSkKK3sKKyAgICBBU1NFUlQodGFyZ2V0
Q2FsbGFibGUgJiYgdGFyZ2V0Q2FsbGFibGUtPmlzQ2FsbGFibGUodm0pKTsKKyAgICBpZiAoYXV0
byByZW1vdGUgPSBqc0R5bmFtaWNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPih2bSwgdGFyZ2V0Q2Fs
bGFibGUpKSB7CisgICAgICAgIHRhcmdldENhbGxhYmxlID0gcmVtb3RlLT50YXJnZXRGdW5jdGlv
bigpOworICAgICAgICBBU1NFUlQoIUpTQzo6aXNSZW1vdGVGdW5jdGlvbih0YXJnZXRDYWxsYWJs
ZSkpOworICAgIH0KKworICAgIGJvb2wgaXNKU0Z1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJn
ZXRDYWxsYWJsZSk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJl
bW90ZUZ1bmN0aW9uKGlzSlNGdW5jdGlvbik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
ZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShnbG9iYWxPYmplY3QpOworICAgIEpTUmVtb3RlRnVu
Y3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSZW1vdGVGdW5j
dGlvbj4odm0pKSBKU1JlbW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgdGFyZ2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNSZW1vdGVGdW5jdGlv
bjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaXNpdG9yPgordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNSZW1vdGVGdW5jdGlvbiog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlz
T2JqZWN0LT5tX3RhcmdldEZ1bmN0aW9uKTsKK30KKworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpT
UmVtb3RlRnVuY3Rpb24pOworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDkyNGVl
ZmUyMWJhY2NjMTIyOThhMjI1Y2Y2YjUzZDZiYzU5MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgSWdhbGlhIFMuTC4KKyAqIEF1dGhvcjog
Q2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmllci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisjaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3RvcmFnZVB0ci5oPgorCituYW1lc3BhY2UgSlND
IHsKKworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1
bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2Vu
ZXJpYyk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGlzUmVtb3RlRnVuY3Rpb24pOworSlND
X0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbik7CisKKy8vIEpTUmVt
b3RlRnVuY3Rpb24gY3JlYXRlcyBhIGJyaWRnZSBiZXR3ZWVuIGl0cyBuYXRpdmUgUmVhbG0gYW5k
IGEgcmVtb3RlIG9uZS4KKy8vIFdoZW4gaW52b2tlZCwgYXJndW1lbnRzIGFyZSB3cmFwcGVkIHRv
IHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiBhY3Jvc3MgdGhlIHJlYWxtIGJvdW5kYXJ5Lgor
Ly8gVGhlIHJldHVybiB2YWx1ZSBhbmQgYW55IGFicnVwdCBjb21wbGV0aW9ucyBhcmUgYWxzbyBm
aWx0ZXJlZC4KK2NsYXNzIEpTUmVtb3RlRnVuY3Rpb24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlv
biB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+Cisg
ICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCisgICAgeworICAgICAg
ICByZXR1cm4gdm0ucmVtb3RlRnVuY3Rpb25TcGFjZTxtb2RlPigpOworICAgIH0KKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1JlbW90ZUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSk7CisKKyAgICBKU09iamVjdCog
dGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3RhcmdldEZ1bmN0aW9uLmdldCgpOyB9CisgICAg
SlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCgpIHsgcmV0dXJuIHRhcmdldEZ1bmN0
aW9uKCktPmdsb2JhbE9iamVjdCgpOyB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyAKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhcmdldEZ1bmN0aW9uKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTUmVtb3RlRnVuY3Rpb24sIG1fdGFyZ2V0RnVuY3Rpb24pOyB9
CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCitwcml2YXRlOgorICAgIEpTUmVtb3RlRnVu
Y3Rpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CisKKyAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fdGFyZ2V0RnVuY3Rpb247Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggZWVmNTE1ZDkwM2JkZjY5MmJhYmI3MjZjMmNmNjBiYjViYzZlMThkYy4u
NGRmYTNiMmZmZWU1ZDlmOGIxODI5NjJiNTlhN2Q4YTk4YmM1ZmM0MiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNjMxLDYgKzYzMSw4IEBAIHN0YXRpYyBUaHVua0dlbmVy
YXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogICAg
ICAgICByZXR1cm4gcmFuZG9tVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBCb3VuZEZ1bmN0aW9u
Q2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuIGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9y
OworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4g
cmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KQEAgLTcwOCw2ICs3MTAsMjUgQEAgTmF0aXZlRXhlY3V0YWJsZSog
Vk06OmdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0
KQogICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RCb3VuZEV4ZWN1dGFibGUpOwogfQogCitO
YXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0UmVtb3RlRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24p
Cit7CisgICAgYm9vbCBzbG93Q2FzZSA9ICFpc0pTRnVuY3Rpb247CisgICAgYXV0byBnZXRPckNy
ZWF0ZSA9IFsmXSAoV2VhazxOYXRpdmVFeGVjdXRhYmxlPiYgc2xvdCkgLT4gTmF0aXZlRXhlY3V0
YWJsZSogeworICAgICAgICBpZiAoYXV0byogY2FjaGVkID0gc2xvdC5nZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBjYWNoZWQ7CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIHJlc3VsdCA9IGdl
dEhvc3RGdW5jdGlvbigKKyAgICAgICAgICAgIHNsb3dDYXNlID8gcmVtb3RlRnVuY3Rpb25DYWxs
R2VuZXJpYyA6IHJlbW90ZUZ1bmN0aW9uQ2FsbEZvckpTRnVuY3Rpb24sCisgICAgICAgICAgICBz
bG93Q2FzZSA/IE5vSW50cmluc2ljIDogUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAg
ICAgICAgICAgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIFN0cmluZygp
KTsKKyAgICAgICAgc2xvdCA9IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4ocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgaWYgKHNsb3dDYXNlKQorICAgICAgICBy
ZXR1cm4gZ2V0T3JDcmVhdGUobV9zbG93UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICBy
ZXR1cm4gZ2V0T3JDcmVhdGUobV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKK30KKwog
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1
bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYg
RU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDRiYmJjNGQ3N2Fi
ZTc3MDc2NWIzM2FiMDE4N2JlYjZkOTQzNTEyYTIuLjI3ODMwY2VhZDhkODAxYzRjNDBiM2IyMmZl
Y2E5ZjRkYTMxZGIzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMyLDYg
KzQzMiw3IEBAIHB1YmxpYzoKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
KG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihwcm94eU9iamVjdFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAg
RFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCkBA
IC01NzIsNiArNTczLDkgQEAgcHVibGljOgogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9z
bG93Qm91bmRFeGVjdXRhYmxlOwogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Q2Fu
Q29uc3RydWN0Qm91bmRFeGVjdXRhYmxlOwogCisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBt
X2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGU7CisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiBtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGU7CisKICAgICBSZWY8RGVmZXJyZWRXb3Jr
VGltZXI+IGRlZmVycmVkV29ya1RpbWVyOwogCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVj
dGluZ0NhbGxiYWNrT2JqZWN0OwpAQCAtNjg0LDYgKzY4OCw3IEBAIHB1YmxpYzoKICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBnZXRIb3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywg
TmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rp
b24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KTsKKyAgICBOYXRpdmVFeGVj
dXRhYmxlKiBnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbik7CiAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRy
YW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpTRW50cnlQdHJUYWc+IGdldENUSUxpbmtDYWxsKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450055</attachid>
            <date>2022-01-26 12:20:03 -0800</date>
            <delta_ts>2022-01-28 23:35:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220126202002.patch</filename>
            <type>text/plain</type>
            <size>60434</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OGQzMThiMmQ3NWUwMDQwYzVmZTBhYmM5OTc3MmMxMTVhMTg3ZmFmLi4wZjlmNzExNzM2NzhjNjNm
Njg5ZGU3YTE4ZjQxZjgwZWIxZDlmYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAyMi0wMS0yNiAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAqIGJ1aWx0
aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90
eXBlLmpzOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaDoKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNw
cDoKKyAgICAgICAgKiBsbGludC9MTEludENvbW1vbi5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
cmluc2ljLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAg
ICogcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTUmVtb3RlRnVuY3Rpb24uaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDIyLTAxLTI2ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRG8gbm90IHJ1biB0ZXN0UGluZ1Bv
bmdTdGFja092ZXJmbG93IHdoaWxlIHJ1bm5pbmcgbXVsdGl0aHJlYWRlZCBNdWx0aXRocmVhZGVk
TXVsdGlWTUV4ZWN1dGlvblRlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRl
eCAzN2NlNzUzNzQzYzM1M2Q1OGY2NjExOGI3ODM3Yzg3ODhlNDgxOTdlLi45ZjAxYzhmMzcwNGU5
YzEzNjVkYmI5YTY4YmJiOTNkZWZiYzc5MWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0xMDgyLDYgKzEwODIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuaAogICAg
IHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKICAgICBydW50aW1lL0pTUHJveHku
aAorICAgIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oCiAgICAgcnVudGltZS9KU1J1bkxvb3BU
aW1lci5oCiAgICAgcnVudGltZS9KU1Njb3BlLmgKICAgICBydW50aW1lL0pTU2NyaXB0RmV0Y2hQ
YXJhbWV0ZXJzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE1Y2IxZTZhYmJi
ZGQ3NmVlZjdjNWYwMGIyNWNjZDUyMWU5MGZkZS4uMDIzNzE3NDJkMTIwYTgzN2JhNWQyZDM0ZDM0
ZDljMTcyMGFhMjkxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMjksNiAr
MTEyOSw3IEBACiAJCTUzRjZCRjZEMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9u
QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1M0ZBMkFFMTFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2Fk
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZBMkFFMDFDRjM3RjNGMDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNGRDA0RDQxRDdBQjI5MTAwMzI4N0Qz
IC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5n
Q29udmVudGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTVCNDAzMjgwMjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjQwMzI3RTI3OThE
MUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBK
U0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLzsg
fTsKIAkJNUI3MENGRTAxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRB
MURCNjlFNUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi87IH07CiAJCTVC
NzBDRkUyMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkRDMURCNjlF
NUMwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTQwNzQs
NiArNDA3NSw4IEBACiAJCTUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRj
aHBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDExRDdBQjE4
NzAwMzI4N0QzIC8qIFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21DYWxs
aW5nQ29udmVudGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3RTI3
OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Jl
bW90ZUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdGMjc5
OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTUmVtb3RlRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qjcw
Q0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1QjcwQ0ZEOTFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXN5bmNGdW5jdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkRBMURCNjlFNUMwMEVDMjNG
OSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU4MjMsOCArNTgyNiw4IEBACiAJCQkJQTczMUIyNUExMzAwOTM4ODAwNDBBN0ZBIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOTMyRjVCRDcwODIy
QTFDNzAwNzM2OTc1IC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk5
MzJGNUJENjA4MjJBMUM3MDA3MzY5NzUgLyogbGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICov
LAotCQkJCUE1MDk4QjA0MUMxNkFBMDIwMDA4Nzc5NyAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLywKIAkJCQlEREIwNEY0MjI3OEU1NkEyMDA4RDM2NzggLyogbGliV1RGLmEg
aW4gRnJhbWV3b3JrcyAqLywKKwkJCQlBNTA5OEIwNDFDMTZBQTAyMDAwODc3OTcgLyogU2VjdXJp
dHkuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC03MzQ5LDExICs3MzUyLDExIEBACiAJ
CQkJRTM4MzUwMDkyMzkwRDkzNzAwMzYzMTZEIC8qIFdhc21HbG9iYWwuaCAqLywKIAkJCQkxNDg1
MjFENTI2RUFFQkRGMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmNwcCAqLywKIAkJCQkxNDg1
MjFENzI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggKi8sCi0JCQkJNTJGREFC
QzIyNzg4MDc2OTAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCAqLywKIAkJCQlB
RDhGRjM5NjFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmNwcCAqLywKIAkJCQlB
RDhGRjM5NTFFQjVCRDg1MDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggKi8sCiAJCQkJQUQ1
QzM2REUxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5jcHAgKi8sCiAJCQkJQUQ1QzM2
REYxRjY5OUVCNjAwMEJDQUFGIC8qIFdhc21JbnN0YW5jZS5oICovLAorCQkJCTUyRkRBQkMyMjc4
ODA3NjkwMEMxNUI1OSAvKiBXYXNtSVJHZW5lcmF0b3JIZWxwZXJzLmggKi8sCiAJCQkJQUQwMDY1
OUQxRUNBQzdGRTAwMENBOTI2IC8qIFdhc21MaW1pdHMuaCAqLywKIAkJCQkxNEM1QUQ2ODIyRjMz
RkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmNwcCAqLywKIAkJCQkxNEM1QUQ2OTIy
RjMzRkJGMDBGMUZCODMgLyogV2FzbUxMSW50R2VuZXJhdG9yLmggKi8sCkBAIC03OTUzLDYgKzc5
NTYsOCBAQAogCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCAqLywKIAkJCQk4NjI1NTNDRTE2MTM2QUE1MDA5RjE3RDAgLyogSlNQcm94eS5j
cHAgKi8sCiAJCQkJODYyNTUzQ0YxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuaCAqLywKKwkJ
CQk1QjQwMzI3RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5jcHAgKi8sCisJ
CQkJNUI0MDMyN0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLywKIAkJ
CQk1MzQ2Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAogCQkJ
CTUzNDYzODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTE0
ODc0QUUxMTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLywKQEAgLTEwNjU4LDYgKzEw
NjYzLDcgQEAKIAkJCQk5OTZCNzMxRjFCREEwOEVGMDAzMzFCODQgLyogSlNQcm9taXNlUHJvdG90
eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8q
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYyNTUzRDIx
NjEzNkUxQTAwOUYxN0QwIC8qIEpTUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTVCNDAzMjgw
Mjc5OEQyMDYwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTUyQzM4MDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0ci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRp
bWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTExMTU3LDYgKzExMTYzLDcgQEAKIAkJCQkxNDg1MjFE
ODI2RUFFQkZFMDBDQzFEMUEgLyogV2FzbUhhbmRsZXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBRDhGRjM5ODFFQjVCREIyMDA4N0ZGODIgLyogV2FzbUluZGV4T3JOYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBRDVDMzZFMjFGNjk5RUMwMDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyogV2FzbUlSR2VuZXJh
dG9ySGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQwMDY1OUUxRUNBQzgxMjAwMENBOTI2
IC8qIFdhc21MaW1pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTBGQTFGMjM1N0JFQzkwMDkz
Q0Q0RCAvKiBXYXNtTExJbnRUaWVyVXBDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0U5
RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAq
LywKQEAgLTExMjA4LDcgKzExMjE1LDYgQEAKIAkJCQlFM0EzMkJDNzFGQzgzMTQ3MDA3RDdFNzYg
LyogV2Vha01hcEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOTNBREQ4MUZFNzAyRDAwMDIy
RDY4MSAvKiBXZWFrTWFwSW1wbElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU2
MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MkZEQUJDMzI3ODgwNzZCMDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTM5OTMwQzgyMkFEM0I5QTAwNTFDREUyIC8qIFdlYWtPYmplY3RS
ZWZDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5QkZCQUUyMkFEM0MzQTAwMjNG
NEMwIC8qIFdlYWtPYmplY3RSZWZQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0
RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA4NzgxZmI0NzEwNDBlY2VlMDE4ZGM3MTFjNTRjZjZiNTMx
NDk0NjU2Li5hOTg5MDA1NDkwYWUzYjViOGMyOTgzMDdlMDNlNjBjZThjMzA4ODQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MDAsNiArOTAwLDcgQEAgcnVudGltZS9KU1Byb21p
c2VDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCiBydW50aW1lL0pTUHJveHkuY3BwCitydW50
aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNwcAogcnVu
dGltZS9KU1Njb3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDI4NWRmMGQxYTE4MDlk
YjIwYjQ3OTRjZDMxMjA1OWVmYzZlZTAwZTAuLjE4NWFhMzFmNjFkOTA0NzVjOTdhZjBhMWJiMjYz
ZjdiMGE5YWZhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2KERGR1RodW5rKSBcCiAgICAg
dihGVExUaHVuaykgXAogICAgIHYoQm91bmRGdW5jdGlvblRodW5rKSBcCisgICAgdihSZW1vdGVG
dW5jdGlvblRodW5rKSBcCiAgICAgdihTcGVjaWFsaXplZFRodW5rKSBcCiAgICAgdihWaXJ0dWFs
VGh1bmspIFwKICAgICB2KFdhc21UaHVuaykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDgwYTg3ZWIwMDdhOWQzOGM3MTU0Mjg5NjU4Zjg4
MTM4NDZiYzg4OGQuLmEwNTI1NzQ4NzZmYTE0OGFjOTgzYmM0MTcxZjQxNTVhNzBkM2YwZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4
OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykgXAogICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikgXAogICAg
IG1hY3JvKHNlbnRpbmVsU3RyaW5nKSBcCisgICAgbWFjcm8oY3JlYXRlUmVtb3RlRnVuY3Rpb24p
IFwKKyAgICBtYWNybyhpc1JlbW90ZUZ1bmN0aW9uKSBcCiAKIAogbmFtZXNwYWNlIFN5bWJvbHMg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxt
UHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxt
UHJvdG90eXBlLmpzCmluZGV4IDhkODkwNjg4ZDdhN2QxNzNhZmRiZjRmMDEyODE1M2E2YmU5YTRj
NGIuLmEyYjQxMGIzNjdmNGZjOTI4NTc2ZDE4ZjdlN2YzNzhiNDNlZmJjMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anMKQEAgLTMyLDM5ICszMiw3IEBAIGZ1bmN0aW9uIHdyYXAoZnJvbVNoYWRvd1JlYWxtLCBzaGFk
b3dSZWFsbSwgdGFyZ2V0KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmIChAaXNDYWxsYWJs
ZSh0YXJnZXQpKSB7Ci0gICAgICAgIHZhciB3cmFwcGVkID0gZnVuY3Rpb24oLyogYXJncy4uLiAq
LykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICAg
ICAgICB2YXIgd3JhcHBlZEFyZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwotICAgICAg
ICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKLSAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIGFyZ3VtZW50cywgd2UgZmxpcCBgZnJvbVNoYWRv
d1JlYWxtYCBzaW5jZSB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgYSBmdW5jdGlvbiBmcm9t
IHJlYWxtIEEgdG8gd29yayBpbiByZWFsbSBCLCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAg
Ly8gd3JhcCB0aGUgYXJndW1lbnRzIChmcm9tIHJlYWxtIEIpIHRvIHdvcmsgaW4gcmVhbG0gQSBi
ZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0aW9uCi0g
ICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHdyYXBwZWRBcmdzLCBpbmRleCwgQHdyYXAo
IWZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIGFyZ3VtZW50c1tpbmRleF0pKTsKLQotICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LkBhcHBs
eShAdW5kZWZpbmVkLCB3cmFwcGVkQXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgbXNnID0gIndyYXBwZWQgZnVuY3Rpb24gdGhyZXc6ICIgKyBl
LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb21TaGFkb3dSZWFsbSkKLSAgICAg
ICAgICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKG1zZyk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1rVHlwZUVycm9yID0gQGV2YWxJblJlYWxt
KHNoYWRvd1JlYWxtLCAiKG1zZykgPT4gbmV3IFR5cGVFcnJvcihtc2cpIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVyciA9IG1rVHlwZUVycm9yLkBhcHBseShtc2cpOwotICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIEB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHJl
c3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1lJ107Ci0gICAg
ICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKLQotICAgICAgICAvLyBCZWNhdXNlIHRoaXMg
ZnVuY3Rpb24gKHdyYXApIHdpbGwgcnVuIHdpdGggdGhlIGluY3ViYXRpbmcgcmVhbG0KLSAgICAg
ICAgLy8gYWN0aXZlLCB3ZSBvbmx5IG5lZWQgdG8gZml4IHRoZSBwcm90b3R5cGUgb24gYHdyYXBw
ZWRgIGlmIHdlIGFyZQotICAgICAgICAvLyBtb3ZpbmcgdGhlIGZ1bmN0aW9uIGZyb20gdGhlIGlu
Y3ViYXRpbmcgcmVhbG0gdG8gdGhlIHNoYWRvdyByZWFsbQotICAgICAgICBpZiAoIWZyb21TaGFk
b3dSZWFsbSkKLSAgICAgICAgICAgIEBtb3ZlRnVuY3Rpb25Ub1JlYWxtKHdyYXBwZWQsIHNoYWRv
d1JlYWxtKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgICAgIHJldHVybiBAY3JlYXRl
UmVtb3RlRnVuY3Rpb24odGFyZ2V0LCBmcm9tU2hhZG93UmVhbG0gPyBudWxsIDogc2hhZG93UmVh
bG0pOwogICAgIH0gZWxzZSBpZiAoQGlzT2JqZWN0KHRhcmdldCkpIHsKICAgICAgICAgQHRocm93
VHlwZUVycm9yKCJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUg
b3IgcHJpbWl0aXZlIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIxNmFmMGY2ODlmMGFiZWE0ODBh
ZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkwMDQ4OGY2ZGNiZGQyNzlkNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3Rh
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgdihjcmVh
dGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1l
cmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5nLCBudWxscHRyKSBcCisgICAg
dihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAgIHYoaXNSZW1vdGVGdW5jdGlv
biwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5LX1RJTUVfQ09OU1RBTlQobmFt
ZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMGM4ZDM1
NTk2MDRhZWQwYjMzOGM0ZDk3N2EzZDYwOTdkOTJjZWQ2My4uNmI4NjU0MjI4NGEwNGQxMzMyMThj
OWYzZWFkODUyZTBkNjI2MmZlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2luY2x1ZGUg
IkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFr
T2JqZWN0UmVmLmgiCkBAIC0zMjE4LDYgKzMyMTksNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVsZU5hbWVz
cAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0ZEZ1bmN0
aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0ZEZ1bmN0
aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9iamVjdCkK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9rZVNwYWNl
LCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFzaDoweGI1MDZhOTM5CitEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVtb3RlRnVuY3Rpb25TcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlLCBkZXN0cnVjdGli
bGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJsZSkKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMpCiBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hlclNwYWNlLCBk
ZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggNGRlODJlYjg3NDk0Y2M3OTA2YTM2ZWM5NTgyOTY1NWZkMWJj
ZDgwYi4uYWJiZGNiZmJlZjI4YTBkMzU1ZmVjZjkxNzY0YTU1MGI5YWYzZDUzZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTIyLDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICBEWU5B
TUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3BhY2UpCiAg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VTcGFjZSkK
KyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0aW9uU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRBcmd1bWVu
dHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2Ny
aXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5F
X01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAppbmRleCAyM2UwODcxOGRiZjgyMDQyMzVlMzk5YWE2NWNiMGQ5OTA4
Mjk3MWUwLi43NWY4OTAzZGZiNzdlMTA2YTViZDhmNThhMTUwZGM2YzYyZjQ2MmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZv
aWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291
bnRTYW5lKCk7CisgICAgaW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7
IGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRB
c3NlcnRJc0ludDMyKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BS
UmVnKSB7IH0KQEAgLTEzNTUsNiArMTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2Vy
dElzTnVsbChHUFJSZWcpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0K
ICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRB
c3NlcnROb0V4Y2VwdGlvbihWTSYpIHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VB
c3NlcnROb0V4Y2VwdGlvbihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKaW5kZXggMWRkN2I3M2M2MTY3OTYyN2YzMDJkOTE0MjJmNWJjMzdmMjE0ZTRi
MC4uMWUyZmRlMmM5NGI4NjQwZGE4Njc4YTgwMjc1OWJmZTA0ZDM0OWVkYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFs
UHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAi
SlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAi
TExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTEx
NSw2ICsxMTYsODcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFy
Z2V0TWFjaGluZVBDRm9yVGhyb3cpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFs
dWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEds
b2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHZhbHVlKTsKKworICAgIGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSkpKTsKKwor
ICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJl
dHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlv
biogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24o
Y2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gY2FsbGVlLT50YXJnZXRG
dW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTVmFsdWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9i
YWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVG
SU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVyLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGVl
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
ICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKGNhbGxlZSkpOworCisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24sIEVuY29k
ZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlKSkKK3sKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKGNh
bGxlZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisKKyAgICAvLyBXZSBz
aG91bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJF
TEVBU0VfQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICBpZiAoVU5MSUtFTFkodm0uaXNUZXJtaW5h
dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9
IGV4Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAg
U3RyaW5nIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGdsb2Jh
bE9iamVjdCk7CisgICAgRXhjZXB0aW9uKiB0b1N0cmluZ0V4Y2VwdGlvbiA9IHNjb3BlLmV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWSh0b1N0cmluZ0V4Y2VwdGlvbiAmJiB2bS5pc1Rlcm1p
bmF0aW9uRXhjZXB0aW9uKHRvU3RyaW5nRXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5n
KTsKKworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwor
fQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3Vs
dElzTm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2
ODM0YmYzLi5kNWU5ZjVjNzA1YTU4OTM5MDcxMWJhZjczNzBiMDA0YjI2MWZkYjg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtNTIsNiArNTIsNyBAQCBj
bGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU0xleGljYWxF
bnZpcm9ubWVudDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNSZW1vdGVGdW5jdGlvbjsKIGNs
YXNzIEpTU2NvcGU7CiBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIEpTVmFsdWU7CkBAIC0xNTUsNiAr
MTU2LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRp
b25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVl
Rm9yQ2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNW
YWx1ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFs
dWVGb3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRK
U1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3Rl
RnVuY3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsK
IAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dF
cnJvciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCBjNjU3MWE2
Y2I1N2U4MjRkY2M5ZTFjYTIzNWU0ZGJkZWEzMDkzM2IwLi4xODkzZWFjZTA4MmVkYmM4ZDdiMmUy
MzMzZjA0NTg2ZjFkNDc5MTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5o
IgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAi
U3BlY2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMiw2ICsxNDIzLDIwMiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZN
JiB2bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0
aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRG
dW5jdGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5z
dG9yZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5z
aWduZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxp
Z25tZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygp
KQorICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3Rh
Y2tNaXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBh
cmd1bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0
YWlsCisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qg
c28gbG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2Fs
bCwgc2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11
bGEgZm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVy
IG9mIHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAg
Ly8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KQorICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAg
IC8vCisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsg
KENhbGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJl
Z2lzdGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDAp
OworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
LCBHUFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBD
OjpzaXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDMpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
aml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVz
KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAg
ICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQp
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUg
YWN0dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sg
d2Ugd2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFj
ayBzcGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0Nh
bGxIZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZt
LmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBU
aHJvdyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rp
b246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1
cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21U
aHVuayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVu
aykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRz
IGNvbmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFk
b3dyZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2Fs
bEhlbHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUklu
Zm86OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0
aGUgYXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUg
Zm9yIGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGlu
IHRoZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7Cisg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
SlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQ
dHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6
cmVnVDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0
LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRo
QXJpdHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8s
IEdQUkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4
Y2VwdGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAv
LyBGb3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAg
ICAvLyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5l
dyBjYWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3Jh
cHBpbmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVt
b3RlRnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUn
cyBhcmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFN1YjMyKENDYWxsSGVscGVy
czo6WmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsK
KyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOwor
ICAgICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdU
MSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmlt
aXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZh
bHVlSXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQu
YWRkcmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0
V3JhcHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25Q
dHJUYWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25H
ZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAg
ICAgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisK
KyAgICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6
cmVnVDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAg
aml0LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xv
dCgwKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkp
OworICAgICAgICBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpLmxpbmtUbyhsb29wLCAmaml0
KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpv
ZmZzZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3Jl
Q2VsbChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZy
YW1lU2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURh
dGEoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJh
bmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9h
ZFB0cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0Zv
cihDb2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNl
ZCBvbiB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJN
NjQsIGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgQVNTRVJUX0VOQUJM
RUQgJiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hl
Y2tOb3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRl
cik7CisgICAgICAgIGNoZWNrTm90TnVsbC5saW5rKCZqaXQpOworICAgIH0KKyNlbmRpZgorCisg
ICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJU
YWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICAv
LyBGSVhNRTogaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biB3aXRoaW4gYSBKUyBjYWxsLCB3ZSds
bCBlbmQgdXAgaW4gYW4gb3V0ZXIgZXhjZXB0aW9uIGhhbmRsZXIgYW5kIHRoZQorICAgIC8vIHJl
dGhyb3cgbG9naWMgd29uJ3Qgb2NjdXIgaGVyZS4gV2Ugd2lsbCBuZWVkIHRvIGFkZCBzb21lIHdh
eSB0byBnZXQgaGVyZSBmcm9tIHVud2luZEdlbmVyaWMoKS4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgdGFyZ2V0RnVuY3Rpb25FeGNlcHRpb24gPSBqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSk7
CisKKyAgICAvLyBXcmFwIHJldHVybiB2YWx1ZQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisjZWxzZQorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7CisjZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
cmVzdWx0SXNQcmltaXRpdmU7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFu
Y2hJZk5vdENlbGwocmVzdWx0UmVncykpOworICAgIHJlc3VsdElzUHJpbWl0aXZlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RPYmplY3QocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9u
UHRyVGFnPihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIpKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAg
IGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JD
YWxsZXIpPihHUFJJbmZvOjpyZWdUMiwgcmVzdWx0UmVncyk7CisgICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRp
b25QdHJUYWcpOworICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNl
cHRpb24odm0pKTsKKworICAgIHJlc3VsdElzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisgICAgdGFyZ2V0RnVu
Y3Rpb25FeGNlcHRpb24ubGluaygmaml0KTsKKyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QyKTsKKyAg
ICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlv
bkV4Y2VwdGlvbik+KEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRp
b24odm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRh
Zyk7CisgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGp1bXAgdG8gaGFuZGxlcgorCisgICAgZXhjZXB0
aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFt
ZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxkZWNsdHlwZShvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSkpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2
bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlv
bjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpu
b25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhh
bmRsZXIodm0pOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpSZW1vdGVGdW5jdGlvblRodW5rKTsKKyAgICBsaW5r
QnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0u
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICBy
ZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJTcGVjaWFsaXplZCB0aHVuayBmb3IgcmVtb3RlIGZ1bmN0aW9uIGNhbGxzIik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IGE5ZmVlZWE5MjRhZTAwNzhkODQ1
MWUxNzJjNGM0OTQ1ZGYxZDVlZTEuLjU4OWU3MDA0NjQzYTIyNTM3MjVhZjJiYjhmMGZmMDVkMzMx
ZTdhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApA
QCAtODIsNiArODIsOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRy
dW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOwogCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYp
OworCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAKaW5kZXggZGYxODBmYmFkMWM3OTFlYzczY2Y2YjljYTNmNGI0NDI4YzQ2
YmE4NC4uYzVkMWY4ZjI5ZGY3OGM5ZTJmNTE1NjcyMGUwN2Y3MTdmMGJlMGUzYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2lu
Y2x1ZGUgIkpTRmluYWxpemF0aW9uUmVnaXN0cnkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJv
bWlzZS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmF0aXZlU3RkRnVuY3Rp
b24uaCIKQEAgLTM2Niw2ICszNjcsNyBAQCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckV2YWxTY3JpcHQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Eb2xsYXJHQyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckNsZWFyS2VwdE9iamVjdHMpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3IpOworc3RhdGljIEpTQ19E
RUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uKTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVj
ZWl2ZUJyb2FkY2FzdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhckFnZW50UmVwb3J0KTsKQEAgLTY0OSw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAgICAg
ICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiZ2MiLCBmdW5jdGlvbkRvbGxhckdDLCAwLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sIGRvbGxhciwgImNsZWFyS2VwdE9iamVjdHMiLCBmdW5jdGlvbkRvbGxhckNs
ZWFyS2VwdE9iamVjdHMsIDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiZ2xvYmFsT2JqZWN0
Rm9yIiwgZnVuY3Rpb25Eb2xsYXJHbG9iYWxPYmplY3RGb3IsIDEsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ZG9sbGFyLCAiaXNSZW1vdGVGdW5jdGlvbiIsIGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlv
biwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAg
ICAgICAgIAogICAgICAgICBkb2xsYXItPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgImdsb2JhbCIpLCBnbG9iYWxUaGlzKCkpOwogICAgICAgICBkb2xsYXItPnB1dERp
cmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSXNIVE1M
RERBIiksCkBAIC0yMDg0LDYgKzIwODcsMTggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1
bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
c2NvcGUsIGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIl9z
KSkpOworCisgICAgSlNWYWx1ZSBhcmcgPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzUmVtb3RlRnVuY3Rpb24oYXJnKSkpOwor
fQorCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0LCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuY3BwCmluZGV4IGZmNWYxOTI0NjkwZjYyZjQ4YzUxMzY1YjUyZTZj
NTYzYjRlNjI4OWQuLmI4MTc1OWJjYTdlYThkNTQyYmM5MmQxMWZmMjg3YjUwZDgyZjM3NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcApAQCAtMjA1LDYg
KzIwNSw4IEBAIGNvbnN0IGNoYXIqIGludHJpbnNpY05hbWUoSW50cmluc2ljIGludHJpbnNpYykK
ICAgICAgICAgcmV0dXJuICJJc1R5cGVkQXJyYXlWaWV3SW50cmluc2ljIjsKICAgICBjYXNlIEJv
dW5kRnVuY3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gIkJvdW5kRnVuY3Rpb25D
YWxsSW50cmluc2ljIjsKKyAgICBjYXNlIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKKyAg
ICAgICAgcmV0dXJuICJSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOwogICAgIGNhc2UgSlNN
YXBHZXRJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiSlNNYXBHZXRJbnRyaW5zaWMiOwogICAg
IGNhc2UgSlNNYXBIYXNJbnRyaW5zaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCmluZGV4IDhlNjhlN2U3NGZiNzhjZGJkMzMyNGNmYmYwYTI1ZWQ2ZDIwZDZkNTgu
LjRhZTM2NTFiNTc1ZTIzMTU4YmY2ODk2MGI2ZGNjYzA5YTU3YmFmMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCkBAIC0xMTgsNiArMTE4LDcgQEAgZW51bSBJ
bnRyaW5zaWMgOiB1aW50OF90IHsKICAgICBUeXBlZEFycmF5RW50cmllc0ludHJpbnNpYywKICAg
ICBJc1R5cGVkQXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kRnVuY3Rpb25DYWxsSW50cmlu
c2ljLAorICAgIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYywKICAgICBKU01hcEdldEludHJp
bnNpYywKICAgICBKU01hcEhhc0ludHJpbnNpYywKICAgICBKU01hcFNldEludHJpbnNpYywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKaW5kZXggNjhjMGU1YmMyZWEwNGIzMDJk
YzQzZDI0OGFiNTE4OGY0YjNlMzBmZi4uYTY5OTMxNTkwOTljY2MxYjczOTZhOTdjNThmZDRlZTMx
YTVjMTgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKQEAgLTk5LDYg
Kzk5LDcgQEAgc3RydWN0IEpTVHlwZVJhbmdlIHsKICAgICBtYWNybyhKU1N5bWJvbFRhYmxlT2Jq
ZWN0LCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6TW9kdWxlRW52aXJvbm1lbnRU
eXBlKSBcCiAgICAgbWFjcm8oSlNTY29wZSwgSlNUeXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5
cGU6OldpdGhTY29wZVR5cGUpIFwKICAgICBtYWNybyhTdHJpbmdPYmplY3QsIEpTVHlwZTo6U3Ry
aW5nT2JqZWN0VHlwZSwgSlNUeXBlOjpEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZSkgXAorICAgIG1h
Y3JvKFNoYWRvd1JlYWxtT2JqZWN0LCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSwgSlNUeXBlOjpT
aGFkb3dSZWFsbVR5cGUpIFwKIAogCiAvLyBGb3J3YXJkIGRlY2xhcmUgdGhlIGNsYXNzZXMgYmVj
YXVzZSB0aGV5IG1heSBub3QgYWxyZWFkeSBleGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCA4NDYwZDQyYzA3YTIxZjBhMjYzZmY4ZTgxYjJjNTAy
YTlmY2ZkOGZjLi4wMmYyZTQzMTc0MTYzMWM2MWQyN2YxNjNmOWI2ZTM1MTAzZmRjNWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC0xNTAsNiArMTUw
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAgIGJvb2wgaXNS
ZW1vdGVGdW5jdGlvbigpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWUoSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCAyNWQ2MDk0MzBiYjdkZWI1ZWNiMGFk
OTcyMTJlODhmOTg3YTVkYjA4Li4zOTUwY2NmY2UyZTEyYTY2NzNhZjRkMGI5NmY2ZjkyNDIzYjhk
ZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25J
bmxpbmVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUu
aCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
CisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFi
bGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OCw2ICs3OSwxMSBAQCBpbmxpbmUgYm9vbCBK
U0Z1bmN0aW9uOjppc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
ICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhlY3V0YWJsZSgpLT5pc0NsYXNzQ29uc3RydWN0b3JG
dW5jdGlvbigpOwogfQogCitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc1JlbW90ZUZ1bmN0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4oZ2xvYmFs
T2JqZWN0KCktPnZtKCkpOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5j
dGlvbjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklu
bGluZSgpKTsKQEAgLTk4LDYgKzEwNCwxNCBAQCBpbmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihK
U1ZhbHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICBy
ZXR1cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAK
K2lubGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZ2V0SlNGdW5jdGlvbih2YWx1
ZSkpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKTsKK30KKwogaW5saW5lIGJvb2wgSlNGdW5j
dGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9uUmFyZURh
dGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA2ZWQ4ZDIwYjBkM2Q3OGJjZGQx
N2U0MGVhYjA3MTk4YmFhMGI4MGEzLi4zOGU0ZjYxZDVmMmQxNTU0MGM3ZmRjYmUzMDVmZTRmNmQ4
YjAzNDMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNp
bmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3Rv
dHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5o
IgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9y
LmgiCkBAIC03NzAsNiArNzcxLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZt
KQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAg
ICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGlu
aXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
KTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIo
CisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAg
ICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52
bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwor
ICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAg
IEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhh
c0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMSw2ICsxNTM2LDE0IEBA
IGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBm
ZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9u
OjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAs
IFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwogCisgICAgLy8g
U2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10g
KGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0
KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0
Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0p
OworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1l
Q29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxp
emVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNy
ZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3Ry
aW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1Rp
bWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFz
c2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0
aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0yMjU5LDYgKzIyNzIsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNp
dCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVy
ZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0
dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hh
ZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3Qt
Pm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dl
bmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGUyYjBlYjgyMjQyNjkxZTAwMGMyNGJhNDA2ZDMw
NjcxNzRiMzNiYTcuLmU0ODI0OWQwNDNhMzc0NDJjMTE5MmJiZmI1YTNmN2Y1MzI5Yzk1OGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAt
NDIxLDYgKzQyMSw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0
cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9u
YXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eU9m
ZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBt
X3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODY0LDYgKzg2NSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBN
YXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhw
TWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUq
IHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUq
IHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZW1vdGVGdW5jdGlv
blN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIG1vZHVsZVJlY29yZFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3JkU3RydWN0dXJlLmdldCh0aGlzKTsg
fQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAg
ICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
eHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlYjQzNGUwNjJm
MmY1MjFhZDAwOTc1NTcwOWE0ZTE4ZjQzODNhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDIy
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICogQXV0aG9yOiBD
YWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgIkV4ZWN1
dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJT
aGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1JlbW90ZUZ1bmN0aW9uOjpzX2luZm8g
PSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKworSlNSZW1vdGVGdW5jdGlvbjo6SlNS
ZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCog
dGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24odm0sIHRoaXMsIHRhcmdldEZ1bmN0
aW9uKQoreworfQorCitzdGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFs
dWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVl
LmlzQ2FsbGFibGUodm0pKSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0
YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0
aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUgd3JhcEFyZ3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3Qs
IHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICB0
aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVu
IHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1pdGl2ZSIpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgcmVzdWx0KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIHdyYXBS
ZXR1cm5WYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
dGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB3cmFwVmFsdWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9i
YWxPYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVz
dCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlv
bkNhbGxGb3JKU0Z1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5j
dGlvbiogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0
aW9uKCkpOworICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rp
b24qPihyZW1vdGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgSlNHbG9iYWxPYmpl
Y3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKTsK
KworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFs
dWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7Cisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB0
YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5oYXNKSVRD
b2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRvIGNhY2hl
IGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9y
KENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQorCisgICAgYXV0byBjYWxsRGF0
YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNhbGxEYXRh
LnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2FsbCh0
YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRlZmluZWQo
KSwgYXJncyk7CisKKyAgICAvLyBIaWRlIGV4Y2VwdGlvbnMgZnJvbSBjYWxsaW5nIHJlYWxtCisg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJhbiBlcnJv
ciBvY2N1cnJlZCBpbiByZW1vdGUgcmVhbG0iKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh3cmFwUmV0
dXJuVmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIHJlc3VsdCkpKTsKK30KKworSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyaWMsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiByZW1vdGVGdW5jdGlvbiA9IGpzQ2Fz
dDxKU1JlbW90ZUZ1bmN0aW9uKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQo
cmVtb3RlRnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24oKSk7CisgICAgSlNPYmplY3QqIHRhcmdl
dEZ1bmN0aW9uID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBh
cmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5o
YXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGNh
bGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBBU1NFUlQoY2Fs
bERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1bHQgPSBj
YWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhLCBqc1VuZGVm
aW5lZCgpLCBhcmdzKTsKKworICAgIC8vIEhpZGUgZXhjZXB0aW9ucyBmcm9tIGNhbGxpbmcgcmVh
bG0KKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgImFu
IGVycm9yIG9jY3VycmVkIGluIHJlbW90ZSByZWFsbSIpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdy
YXBSZXR1cm5WYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgcmVzdWx0KSkp
OworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoc3RhdGljX2Nhc3Q8Ym9vbD4oanNEeW5hbWlj
Q2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4oZ2xvYmFsT2JqZWN0LT52bSgpLCBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNy
ZWF0ZVJlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlv
biA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgQVNTRVJUKHRhcmdldEZ1
bmN0aW9uLmlzQ2FsbGFibGUodm0pKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSA9
IGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldEZ1bmN0aW9uLmFzQ2VsbCgpKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CisgICAgaWYg
KCFjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8gc2hhZG93UmVhbG0gPSBqc0R5bmFtaWNDYXN0PFNoYWRvd1JlYWxt
T2JqZWN0Kj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKQorICAgICAgICAg
ICAgZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBzaGFkb3dSZWFsbS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Cisg
ICAgfQorCisgICAgYXV0byByZXN1bHQgPSBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIGRl
c3RpbmF0aW9uR2xvYmFsT2JqZWN0LCB0YXJnZXRDYWxsYWJsZSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KSk7Cit9CisKK2lubGluZSBTdHJ1
Y3R1cmUqIGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBnbG9iYWxPYmplY3QtYXdhcmUgc3Ry
dWN0dXJlIGNhY2hpbmcKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5yZW1vdGVGdW5jdGlvblN0
cnVjdHVyZSgpOworfQorCitKU1JlbW90ZUZ1bmN0aW9uKiBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0
Q2FsbGFibGUpCit7CisgICAgQVNTRVJUKHRhcmdldENhbGxhYmxlICYmIHRhcmdldENhbGxhYmxl
LT5pc0NhbGxhYmxlKHZtKSk7CisgICAgaWYgKGF1dG8gcmVtb3RlID0ganNEeW5hbWljQ2FzdDxK
U1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRhcmdldENhbGxhYmxlKSkgeworICAgICAgICB0YXJnZXRD
YWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKCFKU0M6
OmlzUmVtb3RlRnVuY3Rpb24odGFyZ2V0Q2FsbGFibGUpKTsKKyAgICB9CisKKyAgICBib29sIGlz
SlNGdW5jdGlvbiA9IGdldEpTRnVuY3Rpb24odGFyZ2V0Q2FsbGFibGUpOworICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRSZW1vdGVGdW5jdGlvbihpc0pTRnVuY3Rpb24p
OworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0UmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0KTsKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgSlNSZW1vdGVGdW5jdGlv
bih2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHRhcmdldENhbGxhYmxl
KTsKKworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uOworfQorCit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNSZW1v
dGVGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNSZW1v
dGVGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXRGdW5jdGlvbik7
Cit9CisKK0RFRklORV9WSVNJVF9DSElMRFJFTihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1JlbW90ZUZ1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90
ZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODQ5MjRlZWZlMjFiYWNjYzEyMjk4YTIyNWNmNmI1M2Q2
YmM1OTFhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUmVtb3RlRnVuY3Rpb24uaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIElnYWxpYSBTLkwuCisgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2Fs
aWEuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJh
cnJpZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJh
eVN0b3JhZ2VQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyaWMpOworSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihpc1JlbW90ZUZ1bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3Jl
YXRlUmVtb3RlRnVuY3Rpb24pOworCisvLyBKU1JlbW90ZUZ1bmN0aW9uIGNyZWF0ZXMgYSBicmlk
Z2UgYmV0d2VlbiBpdHMgbmF0aXZlIFJlYWxtIGFuZCBhIHJlbW90ZSBvbmUuCisvLyBXaGVuIGlu
dm9rZWQsIGFyZ3VtZW50cyBhcmUgd3JhcHBlZCB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRp
b24gYWNyb3NzIHRoZSByZWFsbSBib3VuZGFyeS4KKy8vIFRoZSByZXR1cm4gdmFsdWUgYW5kIGFu
eSBhYnJ1cHQgY29tcGxldGlvbnMgYXJlIGFsc28gZmlsdGVyZWQuCitjbGFzcyBKU1JlbW90ZUZ1
bmN0aW9uIGZpbmFsIDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYg
SlNGdW5jdGlvbiBCYXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENl
bGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vi
c3BhY2VGb3IoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9u
U3BhY2U8bW9kZT4oKTsKKyAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNS
ZW1vdGVGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFy
Z2V0Q2FsbGFibGUpOworCisgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4g
bV90YXJnZXRGdW5jdGlvbi5nZXQoKTsgfQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9i
YWxPYmplY3QoKSB7IHJldHVybiB0YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQor
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICBB
U1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1JlbW90
ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldENhbGxhYmxl
KTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICBERUNMQVJFX1ZJU0lUX0NI
SUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0aW9uOwor
fTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGVlZjUxNWQ5MDNi
ZGY2OTJiYWJiNzI2YzJjZjYwYmI1YmM2ZTE4ZGMuLjRkZmEzYjJmZmVlNWQ5ZjhiMTgyOTYyYjU5
YTdkOGE5OGJjNWZjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTYz
MSw2ICs2MzEsOCBAQCBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRy
aW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAgcmV0dXJuIHJhbmRvbVRodW5rR2Vu
ZXJhdG9yOwogICAgIGNhc2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAgICAgICAgIHJl
dHVybiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcjsKKyAgICBjYXNlIFJlbW90ZUZ1bmN0aW9u
Q2FsbEludHJpbnNpYzoKKyAgICAgICAgcmV0dXJuIHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRv
cjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC03MDgs
NiArNzEwLDI1IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRCb3VuZEZ1bmN0aW9uKGJvb2wg
aXNKU0Z1bmN0aW9uLCBib29sIGNhbkNvbnN0cnVjdCkKICAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
bV9mYXN0Qm91bmRFeGVjdXRhYmxlKTsKIH0KIAorTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldFJl
bW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKQoreworICAgIGJvb2wgc2xvd0Nhc2UgPSAh
aXNKU0Z1bmN0aW9uOworICAgIGF1dG8gZ2V0T3JDcmVhdGUgPSBbJl0gKFdlYWs8TmF0aXZlRXhl
Y3V0YWJsZT4mIHNsb3QpIC0+IE5hdGl2ZUV4ZWN1dGFibGUqIHsKKyAgICAgICAgaWYgKGF1dG8q
IGNhY2hlZCA9IHNsb3QuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkOworICAgICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiByZXN1bHQgPSBnZXRIb3N0RnVuY3Rpb24oCisgICAgICAgICAg
ICBzbG93Q2FzZSA/IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyaWMgOiByZW1vdGVGdW5jdGlvbkNh
bGxGb3JKU0Z1bmN0aW9uLAorICAgICAgICAgICAgc2xvd0Nhc2UgPyBOb0ludHJpbnNpYyA6IFJl
bW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAgICAgICAgICAgIGNhbGxIb3N0RnVuY3Rpb25B
c0NvbnN0cnVjdG9yLCBudWxscHRyLCBTdHJpbmcoKSk7CisgICAgICAgIHNsb3QgPSBXZWFrPE5h
dGl2ZUV4ZWN1dGFibGU+KHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KworICAgIGlmIChzbG93Q2FzZSkKKyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fc2xvd1Jl
bW90ZUZ1bmN0aW9uRXhlY3V0YWJsZSk7CisgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdFJl
bW90ZUZ1bmN0aW9uRXhlY3V0YWJsZSk7Cit9CisKIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogI2lmIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAppbmRleCA0YmJiYzRkNzdhYmU3NzA3NjViMzNhYjAxODdiZWI2ZDk0MzUx
MmEyLi4yNzgzMGNlYWQ4ZDgwMWM0YzQwYjNiMjJmZWNhOWY0ZGEzMWRiMzdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTQzMiw2ICs0MzIsNyBAQCBwdWJsaWM6CiAgICAgRFlO
QU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2Up
CisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNw
YWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1l
bnRzVGFibGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNj
cmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNlKQpAQCAtNTcyLDYgKzU3Myw5IEBAIHB1YmxpYzoK
ICAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd0JvdW5kRXhlY3V0YWJsZTsKICAgICBX
ZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd0NhbkNvbnN0cnVjdEJvdW5kRXhlY3V0YWJsZTsK
IAorICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRh
YmxlOworICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93UmVtb3RlRnVuY3Rpb25FeGVj
dXRhYmxlOworCiAgICAgUmVmPERlZmVycmVkV29ya1RpbWVyPiBkZWZlcnJlZFdvcmtUaW1lcjsK
IAogICAgIEpTQ2VsbCogY3VycmVudGx5RGVzdHJ1Y3RpbmdDYWxsYmFja09iamVjdDsKQEAgLTY4
NCw2ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0SG9zdEZ1bmN0
aW9uKE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9y
LCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBnZXRCb3VuZEZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uLCBib29s
IGNhbkNvbnN0cnVjdCk7CisgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0UmVtb3RlRnVuY3Rpb24o
Ym9vbCBpc0pTRnVuY3Rpb24pOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBnZXRD
VElMaW5rQ2FsbCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450320</attachid>
            <date>2022-01-28 23:35:32 -0800</date>
            <delta_ts>2022-01-31 13:20:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220129073531.patch</filename>
            <type>text/plain</type>
            <size>67506</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YTUzNzFkZDk3NDYwZDVmNmIzYzY0MzY1NTJmYzhmN2M2ZWRjMmIzLi44MjI0NjllNWQ0YjJjZjIz
NTVlZmFlZWYyMTc0MzUzMDIyY2NlMWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAyMi0wMS0yOCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0ludHJpbnNpYy5jcHA6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6Cisg
ICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0
aW9uSW5saW5lcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUmVt
b3RlRnVuY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTUmVtb3RlRnVuY3Rp
b24uaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDIyLTAxLTI2ICBBbGV4ZXkgU2h2YXlrYSAgPGFzaHZheWthQGFwcGxlLmNv
bT4KIAogICAgICAgICBnbG9iYWxUaGlzLnF1ZXVlTWljcm90YXNrKCkgc2hvdWxkIHJlcG9ydCB0
aHJvd24gZXhjZXB0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDM3
Y2U3NTM3NDNjMzUzZDU4ZjY2MTE4Yjc4MzdjODc4OGU0ODE5N2UuLjlmMDFjOGYzNzA0ZTljMTM2
NWRiYjlhNjhiYmI5M2RlZmJjNzkxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTEwODIsNiArMTA4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAgICAgcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94eS5oCisg
ICAgcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKICAgICBydW50aW1lL0pTUnVuTG9vcFRpbWVy
LmgKICAgICBydW50aW1lL0pTU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaFBhcmFt
ZXRlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YTVjYjFlNmFiYmJkZDc2
ZWVmN2M1ZjAwYjI1Y2NkNTIxZTkwZmRlLi40ZjJhYjRjZDcxMjliZjk3ZDM5NDFiZGFmZmNlZjcx
ZjUyN2U3N2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEyOSw2ICsxMTI5
LDcgQEAKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0
aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFw
dGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3RDMgLyog
V2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252
ZW50aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNUI0MDMyODAyNzk4RDIwNjAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDAzMjdFMjc5OEQxRkQw
MEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8qIEpTQXN5
bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovOyB9Owog
CQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGREExREI2
OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLzsgfTsKIAkJNUI3MENG
RTIxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGREMxREI2OUU1QzAw
RUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDA3NCw2ICs0
MDc1LDggQEAKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FCMTg3MDAz
Mjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNhbGxpbmdD
b252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdFMjc5OEQx
RkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVtb3Rl
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0YyNzk4RDFG
RDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNS
ZW1vdGVGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkQ4
MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREExREI2OUU1QzAwRUMyM0Y5IC8q
IEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTgyMyw4ICs1ODI2LDggQEAKIAkJCQlBNzMxQjI1QTEzMDA5Mzg4MDA0MEE3RkEgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQk5MzJGNUJENzA4MjJBMUM3
MDA3MzY5NzUgLyogbGliaWN1Y29yZS5keWxpYiBpbiBGcmFtZXdvcmtzICovLAogCQkJCTkzMkY1
QkQ2MDgyMkExQzcwMDczNjk3NSAvKiBsaWJvYmpjLmR5bGliIGluIEZyYW1ld29ya3MgKi8sCi0J
CQkJQTUwOThCMDQxQzE2QUEwMjAwMDg3Nzk3IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovLAogCQkJCUREQjA0RjQyMjc4RTU2QTIwMDhEMzY3OCAvKiBsaWJXVEYuYSBpbiBG
cmFtZXdvcmtzICovLAorCQkJCUE1MDk4QjA0MUMxNkFBMDIwMDA4Nzc5NyAvKiBTZWN1cml0eS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTczNDksMTEgKzczNTIsMTEgQEAKIAkJCQlF
MzgzNTAwOTIzOTBEOTM3MDAzNjMxNkQgLyogV2FzbUdsb2JhbC5oICovLAogCQkJCTE0ODUyMUQ1
MjZFQUVCREYwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uY3BwICovLAogCQkJCTE0ODUyMUQ3
MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCAqLywKLQkJCQk1MkZEQUJDMjI3
ODgwNzY5MDBDMTVCNTkgLyogV2FzbUlSR2VuZXJhdG9ySGVscGVycy5oICovLAogCQkJCUFEOEZG
Mzk2MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuY3BwICovLAogCQkJCUFEOEZG
Mzk1MUVCNUJEODUwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCAqLywKIAkJCQlBRDVDMzZE
RTFGNjk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmNwcCAqLywKIAkJCQlBRDVDMzZERjFG
Njk5RUI2MDAwQkNBQUYgLyogV2FzbUluc3RhbmNlLmggKi8sCisJCQkJNTJGREFCQzIyNzg4MDc2
OTAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCAqLywKIAkJCQlBRDAwNjU5RDFF
Q0FDN0ZFMDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oICovLAogCQkJCTE0QzVBRDY4MjJGMzNGQkYw
MEYxRkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuY3BwICovLAogCQkJCTE0QzVBRDY5MjJGMzNG
QkYwMEYxRkI4MyAvKiBXYXNtTExJbnRHZW5lcmF0b3IuaCAqLywKQEAgLTc5NTMsNiArNzk1Niw4
IEBACiAJCQkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oICovLAogCQkJCTg2MjU1M0NFMTYxMzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCAq
LywKIAkJCQk4NjI1NTNDRjE2MTM2QUE1MDA5RjE3RDAgLyogSlNQcm94eS5oICovLAorCQkJCTVC
NDAzMjdGMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmNwcCAqLywKKwkJCQk1
QjQwMzI3RTI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oICovLAogCQkJCTUz
NDYzODcyMUU3MEQwMTUwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5jcHAgKi8sCiAJCQkJNTM0
NjM4NzAxRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggKi8sCiAJCQkJMTQ4NzRB
RTExNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwICovLApAQCAtMTAwMjQsNyArMTAwMjks
NiBAQAogCQkJCTBGQkUwRjczMTZDMURCMDUwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNjE3QTBCOENDMDA3NzNBRDggLyogREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUEx
NEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MkNB
RUM3NTI3OTBCOEZCMDBEREJBQUYgLyogU2VjdXJlQVJNNjRFSGFzaFBpbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNCRkE1RDAyMUU4NTNBMTAwOUMwRUJBIC8qIERGR0Rlc2lyZWRHbG9i
YWxQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1
IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDY1OCw2ICsx
MDY2Miw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3Rv
dHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0Qy
MTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4
MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BU
aW1lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDk2OCw2ICsxMDk3Myw4IEBACiAJCQkJQTU0Q0Yy
RkExODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU1MTY1RDUxQkRGMTM1QTAwM0I3NUMxIC8qIFNjcmlwdFByb2ZpbGluZ1Njb3BlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTRDRjJGNjE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTUyQ0FFQzc1Mjc5MEI4RkIwMEREQkFBRiAvKiBTZWN1cmVBUk02
NEVIYXNoUGlucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTJDQUVDNzYyNzkwQjkwMTAwRERCQUFG
IC8qIFNlY3VyZUFSTTY0RUhhc2hQaW5zSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcy
OTlEQTYxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzkwREQ2RTE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NURBMEM4MjVCODk2MEMwMDg3NTc3MiAvKiBTZXRQcml2YXRl
QnJhbmRTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTExNTcsNiArMTExNjQsNyBAQAogCQkJ
CTE0ODUyMUQ4MjZFQUVCRkUwMENDMUQxQSAvKiBXYXNtSGFuZGxlckluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFEOEZGMzk4MUVCNUJEQjIwMDg3RkY4MiAvKiBXYXNtSW5kZXhPck5hbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUFENUMzNkUyMUY2OTlFQzAwMDBCQ0FBRiAvKiBXYXNtSW5zdGFu
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyRkRBQkMzMjc4ODA3NkIwMEMxNUI1OSAvKiBXYXNt
SVJHZW5lcmF0b3JIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDAwNjU5RTFFQ0FDODEy
MDAwQ0E5MjYgLyogV2FzbUxpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1MEZBMUYyMzU3
QkVDOTAwOTNDRDREIC8qIFdhc21MTEludFRpZXJVcENvdW50ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzRTlFMEFDMUVBRTgzREYwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTExODQsNyArMTExOTIsNiBAQAogCQkJCUUzM0JCRTA5MjVCRkEwNDEw
MDUzNjkwRiAvKiBXYXNtU3RyZWFtaW5nQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
QTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNtU3RyZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFM0M3M0E5MTI1QkZBNzNCMDBFRkUzMDMgLyogV2FzbVN0cmVhbWluZ1BsYW4u
aCBpbiBIZWFkZXJzICovLAotCQkJCTUyQ0FFQzc2Mjc5MEI5MDEwMEREQkFBRiAvKiBTZWN1cmVB
Uk02NEVIYXNoUGluc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUFENUMzNkU2MUY2OUVD
OTEwMDBCQ0FBRiAvKiBXYXNtVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RDAxQkY1MjZE
RUVGNTMwMENBRTBEMCAvKiBXYXNtVGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjUwRDJEMjFF
OERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTIwOCw3
ICsxMTIxNSw2IEBACiAJCQkJRTNBMzJCQzcxRkM4MzE0NzAwN0Q3RTc2IC8qIFdlYWtNYXBJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzkzQUREODFGRTcwMkQwMDAyMkQ2ODEgLyogV2Vha01h
cEltcGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFFMDA2NTM4
QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTJGREFCQzMyNzg4
MDc2QjAwQzE1QjU5IC8qIFdhc21JUkdlbmVyYXRvckhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOTkzMEM4MjJBRDNCOUEwMDUxQ0RFMiAvKiBXZWFrT2JqZWN0UmVmQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUJGQkFFMjJBRDNDM0EwMDIzRjRDMCAvKiBXZWFrT2Jq
ZWN0UmVmUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUxQUNDMDBE
NkQ1RDQgLyogV2Vha1NldC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggODc4MWZiNDcxMDQwZWNlZTAxOGRjNzExYzU0Y2Y2YjUzMTQ5NDY1Ni4uYTk4OTAw
NTQ5MGFlM2I1YjhjMjk4MzA3ZTAzZTYwY2U4YzMwODg0NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtOTAwLDYgKzkwMCw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3Iu
Y3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1JlbW90ZUZ1
bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNTY29wZS5j
cHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0Y2QzMTIw
NTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFmYTczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApAQCAtOTIs
NiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1bmspIFwK
ICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25UaHVuaykg
XAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBcCiAgICAg
dihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGlu
TmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4ODhkLi5h
MDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpIFwKICAg
ICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhzZW50aW5l
bFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAgbWFjcm8o
aXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlwZS5qcwpp
bmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi5hMmI0MTBiMzY3
ZjRmYzkyODU3NmQxOGY3ZTdmMzc4YjQzZWZiYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0zMiwzOSAr
MzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIHRhcmdl
dCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0KSkgewot
ICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAgICAgICAg
ICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFyIHdyYXBw
ZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAgc2luY2Ug
dG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBBIHRvIHdv
cmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgdGhlIGFy
Z3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0gICAgICAg
ICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAgICAgICAg
IEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hhZG93UmVh
bG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAgIHRyeSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVmaW5lZCwg
d3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAg
IGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmluZygpOwot
ICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAgICAgICAg
IEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dSZWFsbSwg
Iihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAgICBjb25z
dCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgdGhy
b3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwotICAgICAg
ICB9OwotICAgICAgICBkZWxldGUgd3JhcHBlZFsnbmFtZSddOwotICAgICAgICBkZWxldGUgd3Jh
cHBlZFsnbGVuZ3RoJ107Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZ1bmN0aW9uICh3cmFw
KSB3aWxsIHJ1biB3aXRoIHRoZSBpbmN1YmF0aW5nIHJlYWxtCi0gICAgICAgIC8vIGFjdGl2ZSwg
d2Ugb25seSBuZWVkIHRvIGZpeCB0aGUgcHJvdG90eXBlIG9uIGB3cmFwcGVkYCBpZiB3ZSBhcmUK
LSAgICAgICAgLy8gbW92aW5nIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbmN1YmF0aW5nIHJlYWxt
IHRvIHRoZSBzaGFkb3cgcmVhbG0KLSAgICAgICAgaWYgKCFmcm9tU2hhZG93UmVhbG0pCi0gICAg
ICAgICAgICBAbW92ZUZ1bmN0aW9uVG9SZWFsbSh3cmFwcGVkLCBzaGFkb3dSZWFsbSk7Ci0gICAg
ICAgIHJldHVybiB3cmFwcGVkOworICAgICAgICByZXR1cm4gQGNyZWF0ZVJlbW90ZUZ1bmN0aW9u
KHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxtKTsKICAgICB9IGVs
c2UgaWYgKEBpc09iamVjdCh0YXJnZXQpKSB7CiAgICAgICAgIEB0aHJvd1R5cGVFcnJvcigidmFs
dWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1pdGl2ZSIp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5r
VGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVD
b25zdGFudC5oCmluZGV4IGU2NmU4ZmRiMTZhZjBmNjg5ZjBhYmVhNDgwYWVjYjQ1MmFjOGI5ZjEu
LmRmOTk0MmYyMTI1M2IwODI2ZDNhN2Q5MDA0ODhmNmRjYmRkMjc5ZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTE3LDYg
KzExNyw4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY3JlYXRlUHJpdmF0ZVN5bWJv
bCwgbnVsbHB0cikgXAogICAgIHYoZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBudWxscHRy
KSBcCiAgICAgdihzZW50aW5lbFN0cmluZywgbnVsbHB0cikgXAorICAgIHYoY3JlYXRlUmVtb3Rl
RnVuY3Rpb24sIG51bGxwdHIpIFwKKyAgICB2KGlzUmVtb3RlRnVuY3Rpb24sIG51bGxwdHIpIFwK
IAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDBjOGQzNTU5NjA0YWVkMGIzMzhj
NGQ5NzdhM2Q2MDk3ZDkyY2VkNjMuLjZiODY1NDIyODRhMDRkMTMzMjE4YzlmM2VhZDg1MmUwZDYy
NjJmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MSw2ICs1MSw3IEBA
CiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJKSVRXb3JrbGlzdElu
bGluZXMuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
SlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
IgogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5oIgpA
QCAtMzIxOCw2ICszMjE5LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9T
TE9XKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlLCBtb2R1bGVOYW1lc3AKIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlLCBuYXRp
dmVTdGRGdW5jdGlvbkhlYXBDZWxsVHlwZSwgSlNOYXRpdmVTdGRGdW5jdGlvbikgLy8gSGFzaDow
eDcwZWQ2MWU0CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlP
YmplY3RTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlPYmplY3QpCiBEWU5BTUlDX0lTT19T
VUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSwgY2VsbEhlYXBDZWxs
VHlwZSwgUHJveHlSZXZva2UpIC8vIEhhc2g6MHhiNTA2YTkzOQorRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5
cGUsIEpTUmVtb3RlRnVuY3Rpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1coc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxs
VHlwZSwgU2NvcGVkQXJndW1lbnRzVGFibGUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVf
TUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxI
ZWFwQ2VsbFR5cGUsIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzKQogRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2Vs
bEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CmluZGV4IDRkZTgyZWI4NzQ5NGNjNzkwNmEzNmVjOTU4Mjk2NTVmZDFiY2Q4MGIuLmFiYmRjYmZi
ZWYyOGEwZDM1NWZlY2Y5MTc2NGE1NTBiOWFmM2Q1M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKQEAgLTkyMiw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisgICAgRFlOQU1JQ19J
U09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQogICAgIERZTkFN
SUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1l
dGVyc1NwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0
RmV0Y2hlclNwYWNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKaW5kZXggNDkxZWE0NTI3ZmRmNjZiMmIxYmMzMWQ2OWY1NTVlN2U1ZmYz
ZTY3Ny4uM2E2Mjc5ODBjNWQxZjhhZWZiMjRiNjhiZDJhOTRmNTc1OTRjNDM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRl
ICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKKyNp
bmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIK
QEAgLTU1NSwxMiArNTU2LDEzIEBAIENhdGNoSW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206Okhh
bmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBXYXNtOjpDYWxsZWUqIGNhbGxlCiAKIGNsYXNzIFVu
d2luZEZ1bmN0b3IgewogcHVibGljOgotICAgIFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJh
bWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwg
Q29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCisgICAgVW53aW5kRnVu
Y3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBK
U1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFu
ZGxlciwgYm9vbCYgc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAg
ICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24o
aXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAg
ICwgbV9oYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICwgbV9zZWVuUmVtb3RlRnVuY3Rpb24oc2Vl
blJlbW90ZUZ1Y25jdGlvbikKICAgICB7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAg
ICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewpAQCAtNjA5LDYgKzYxMSwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIGlmICghbV9jYWxsRnJhbWUtPmlzV2FzbUZyYW1l
KCkgJiYgIEpTQzo6aXNSZW1vdGVGdW5jdGlvbihtX3ZtLCBtX2NhbGxGcmFtZS0+anNDYWxsZWUo
KSkgJiYgIW1faXNUZXJtaW5hdGlvbikgeworICAgICAgICAgICAgLy8gQ29udGludWUgc2VhcmNo
aW5nIGZvciBhIGhhbmRsZXIsIGJ1dCBtYXJrIHRoYXQgYSBtYXJzaGFsbGluZyBmdW5jdGlvbiB3
YXMgb24gdGhlIHN0YWNrIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAvLyB0cmFuc2xhdGUg
dGhlIGV4Y2VwdGlvbiBiZWZvcmUganVtcGluZyB0byB0aGUgaGFuZGxlci4KKyAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8VW53aW5kRnVuY3Rvcio+KHRoaXMpLT5tX3NlZW5SZW1vdGVGdW5jdGlvbiA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAg
ICAgfQorCiAgICAgICAgIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJh
bWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZpc2l0b3IpOwpAQCAtNjU3LDggKzY2NiwzOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IFdh
c206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9jYXRjaGFibGVGcm9t
V2FzbSB7IGZhbHNlIH07CiAjZW5kaWYKKworICAgIGJvb2wmIG1fc2VlblJlbW90ZUZ1bmN0aW9u
OwogfTsKIAorLy8gUmVwbGFjZSBhbiBleGNlcHRpb24gd2hpY2ggcGFzc2VzIGFjcm9zcyBhIG1h
cnNoYWxsaW5nIGJvdW5kYXJ5IHdpdGggYSBUeXBlRXJyb3IgZm9yIGl0cyBoYW5kbGVyJ3MgZ2xv
YmFsIG9iamVjdC4KK3N0YXRpYyB2b2lkIHNhbml0aXplUmVtb3RlRnVuY3Rpb25FeGNlcHRpb24o
Vk0mIHZtLCBDYWxsRnJhbWUqIGhhbmRsZXJDYWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQoreworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEFT
U0VSVChleGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihl
eGNlcHRpb24pKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBoYW5kbGVy
Q2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1ZhbHVlIGV4Y2Vw
dGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisKKyAgICAvLyBBdm9pZCB1c2VyLW9ic2VydmFibGUgVG9TdHJpbmcoKQorICAgIFN0cmlu
ZyBleGNlcHRpb25TdHJpbmc7CisgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzUHJpbWl0aXZlKCkp
CisgICAgICAgIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGds
b2JhbE9iamVjdCk7CisgICAgZWxzZSBpZiAoZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCktPmluaGVy
aXRzPEVycm9ySW5zdGFuY2U+KHZtKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5nID0gc3RhdGlj
X2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKS0+c2FuaXRpemVk
TWVzc2FnZVN0cmluZyhnbG9iYWxPYmplY3QpOworCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7IC8vIFdlIG11c3Qgbm90IGhhdmUgZW50ZXJlZCBKUyBhdCB0aGlzIHBvaW50CisKKyAg
ICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Cit9
CisKIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENh
bGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwpAQCAtNjc4LDggKzcxOCwxMyBAQCBORVZF
Ul9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUq
JiBjYWxsRnJhbWUsIEV4Y2VwdAogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5k
bGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAgICBDYXRjaElu
Zm8gY2F0Y2hJbmZvOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZyYW1lLCB2
bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVlLCBjb2Rl
QmxvY2ssIGNhdGNoSW5mbyk7CisgICAgYm9vbCBzZWVuUmVtb3RlRnVuY3Rpb24gPSBmYWxzZTsK
KyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0uaXNUZXJtaW5hdGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2NrLCBjYXRjaElu
Zm8sIHNlZW5SZW1vdGVGdW5jdGlvbik7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNpdDxTdGFja1Zp
c2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFtZSwgdm0sIGZ1
bmN0b3IpOworCisgICAgaWYgKHNlZW5SZW1vdGVGdW5jdGlvbikKKyAgICAgICAgc2FuaXRpemVS
ZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbih2bSwgY2FsbEZyYW1lLCBleGNlcHRpb24pOworCiAgICAg
aWYgKHZtLmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSkKICAgICAgICAgdm0ucG9wQWxsQ2hl
Y2twb2ludE9TUlNpZGVTdGF0ZVVudGlsKGNhbGxGcmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IDIzZTA4NzE4ZGJmODIwNDIzNWUzOTlh
YTY1Y2IwZDk5MDgyOTcxZTAuLjc1Zjg5MDNkZmI3N2UxMDZhNWJkOGY1OGExNTBkYzZjNjJmNDYy
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAt
MTM0NSw2ICsxMzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaml0QXNzZXJ0SXNOdWxsKEdQUlJl
Zyk7CiAgICAgdm9pZCBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIHZvaWQgaml0QXNzZXJ0
QXJndW1lbnRDb3VudFNhbmUoKTsKKyAgICBpbmxpbmUgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlv
bihWTSYgdm0pIHsgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKHZtKTsgfQogI2Vsc2UKICAg
ICB2b2lkIGppdEFzc2VydElzSW50MzIoR1BSUmVnKSB7IH0KICAgICB2b2lkIGppdEFzc2VydElz
SlNJbnQzMihHUFJSZWcpIHsgfQpAQCAtMTM1NSw2ICsxMzU2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgaml0QXNzZXJ0SXNOdWxsKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRUYWdzSW5Q
bGFjZSgpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKSB7IH0KKyAg
ICB2b2lkIGppdEFzc2VydE5vRXhjZXB0aW9uKFZNJikgeyB9CiAjZW5kaWYKIAogICAgIHZvaWQg
aml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAxZGQ3YjczYzYxNjc5NjI3ZjMwMmQ5MTQyMmY1
YmMzN2YyMTRlNGIwLi5iNzE3NzUyNDhkMGVhMmE5YmIwNTE1OWI1ZjA4MmViYTFiOGUxZDIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIK
KyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
ICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rv
ci5oIgpAQCAtMTE1LDYgKzExNiw4NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChKU0dsbwogICAgIEFT
U0VSVCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGdl
dFdyYXBwZWRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgdmFsdWUpOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0pKQorICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2
bSwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlLmFzQ2Vs
bCgpKSkpOworCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVl
IHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpTVmFsdWUsIChKU1Jl
bW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkpCit7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoaXNSZW1v
dGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0g
Y2FsbGVlLT50YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2Jq
ZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkp
OworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVl
Rm9yQ2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZtLCBjYWxsZWUpKTsK
KworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGdldFdyYXBwZWRWYWx1ZShnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpKSk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0
aW9uRXhjZXB0aW9uLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSkp
Cit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQo
aXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNl
cHRpb24oKTsKKworICAgIC8vIFdlIHNob3VsZCBvbmx5IGJlIGhlcmUgd2hlbiAicmV0aHJvd2lu
ZyIgYW4gZXhjZXB0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKKworICAgIGlm
IChVTkxJS0VMWSh2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpKSB7CisgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZXhjZXB0aW9uU3RyaW5nID0gZXhjZXB0aW9u
VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBFeGNlcHRpb24qIHRvU3RyaW5n
RXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHRvU3RyaW5n
RXhjZXB0aW9uICYmIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24odG9TdHJpbmdFeGNlcHRpb24p
KSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5n
Lmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCBleGNlcHRpb25TdHJpbmcpOworCisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7Cit9CisKIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDRiNWQwMTFmOTA2
YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLmQ1ZTlmNWM3MDVhNTg5MzkwNzExYmFmNzM3
MGIwMDRiMjYxZmRiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEpTRnVuY3Rpb247CiBjbGFzcyBKU0dsb2JhbE9i
amVjdDsKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50OwogY2xhc3MgSlNPYmplY3Q7CitjbGFz
cyBKU1JlbW90ZUZ1bmN0aW9uOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIEpTU3RyaW5nOwogY2xh
c3MgSlNWYWx1ZTsKQEAgLTE1NSw2ICsxNTYsOSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIHZvaWQsCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZNSGFuZGxlRXhjZXB0aW9uLCB2b2lk
LCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqKSk7CiBKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVj
dCwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1v
dGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpTVmFsdWUsIChKU1Jl
bW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFsdWUs
IChKU1JlbW90ZUZ1bmN0aW9uKikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCB2b2lkLCAoQ29kZUJsb2NrKikpOwogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywgaW50MzJfdCwgKEpT
R2xvYmFsT2JqZWN0KikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCmluZGV4IGM2NTcxYTZjYjU3ZTgyNGRjYzllMWNhMjM1ZTRkYmRlYTMwOTMzYjAu
LmFlOTQzYjk3Nzk4OTg4ZTY4YWJlNGU0MTliM2MwODQwODViOGE0MzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklUVGh1bmtzLmgiCiAjaW5j
bHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93
UGF0aENhbGwuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5rSklULmgiCkBAIC0xNDIyLDYg
KzE0MjMsMTkyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRG
dW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVu
a1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRo
IG5vIGFyZ3VtZW50cyIpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdDsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKworICAgIC8vIFNldCB1
cCBvdXIgY2FsbCBmcmFtZS4KKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6
Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKSk7CisKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrTmVlZGVkID0gMDsKKyAgICBp
ZiAodW5zaWduZWQgc3RhY2tNaXNhbGlnbm1lbnQgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
JSBzdGFja0FsaWdubWVudEJ5dGVzKCkpCisgICAgICAgIGV4dHJhU3RhY2tOZWVkZWQgPSBzdGFj
a0FsaWdubWVudEJ5dGVzKCkgLSBzdGFja01pc2FsaWdubWVudDsKKworICAgIC8vIFdlIG5lZWQg
dG8gZm9yd2FyZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IHdlIHdlcmUgcGFzc2VkLiBXZSBh
cmVuJ3QgYWxsb3dlZCB0byBkbyBhIHRhaWwKKyAgICAvLyBjYWxsIGhlcmUgYXMgZmFyIGFzIEkg
Y2FuIHRlbGwuIEF0IGxlYXN0IG5vdCBzbyBsb25nIGFzIHRoZSBnZW5lcmljIHBhdGggZG9lc24n
dCBkbyBhIHRhaWwKKyAgICAvLyBjYWxsLCBzaW5jZSB0aGF0IHdvdWxkIGJlIHdheSB0b28gd2Vp
cmQuCisKKyAgICAvLyBUaGUgZm9ybXVsYSBmb3IgdGhlIG51bWJlciBvZiBzdGFjayBieXRlcyBu
ZWVkZWQgZ2l2ZW4gc29tZSBudW1iZXIgb2YgcGFyYW1ldGVycyAoaW5jbHVkaW5nCisgICAgLy8g
dGhpcykgaXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tBbGlnbigobnVtUGFyYW1zICsgbnVt
RnJhbWVMb2NhbHMgKyBDYWxsRnJhbWVIZWFkZXJTaXplKSAqIHNpemVvZihSZWdpc3RlcikgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpCisgICAgLy8KKyAgICAvLyBQcm9iYWJseSB3ZSB3YW50
IHRvIHdyaXRlIHRoaXMgYXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tBbGlnbigobnVtUGFy
YW1zICsgbnVtRnJhbWVMb2NhbHMgKyAoQ2FsbEZyYW1lSGVhZGVyU2l6ZSAtIENhbGxlckZyYW1l
QW5kUENTaXplKSkgKiBzaXplb2YoUmVnaXN0ZXIpKQorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50
IG51bUZyYW1lTG9jYWxzID0gMTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9vcEluZGV4ID0gdmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCk7CisKKyAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsKKyAg
ICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEdQUkluZm86OnJlZ1QxKTsKKworICAgIGppdC5hZGQz
MihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lz
dGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyArIG51bUZyYW1lTG9jYWxz
KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQubHNoaWZ0MzIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYWRk
MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSks
IEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLXN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIGlmIChl
eHRyYVN0YWNrTmVlZGVkKQorICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoZXh0cmFTdGFja05lZWRlZCksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQgcmVnVDEgaGFzIHRoZSBhY3R1YWwgYXJndW1lbnQgY291bnQsIGFuZCByZWdUMiBo
YXMgdGhlIGFtb3VudCBvZiBzdGFjayB3ZSB3aWxsIG5lZWQuCisgICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHdlIGhhdmUgZW5vdWdoIHN0YWNrIHNwYWNlLgorCisgICAgaml0Lm5lZ1B0cihHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGhhdmVTdGFja1Nw
YWNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVhbCwgQ0NhbGxIZWxw
ZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUklu
Zm86OnJlZ1QyKTsKKworICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4Y2VwdGlvbgorICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BF
bnRyeUZyYW1lKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTQm91bmRGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBHUFJJbmZv
OjpyZWdUMyk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKT4oR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0
clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAgICBoYXZlU3RhY2tT
cGFjZS5saW5rKCZqaXQpOworICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFNldCBgdGhpc2AgdG8gdW5kZWZp
bmVkCisgICAgLy8gTk9URTogbmVlZHMgY29uY2Vuc3VzIGluIFRDMzkgKGh0dHBzOi8vZ2l0aHVi
LmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL2lzc3Vlcy8zMjgpCisgICAgaml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdChD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgIGppdC5zdG9y
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50
U2xvdCgwKSk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1ZhbHVlUmVnczo6d2l0
aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6cmVnVDQsIEdQUkluZm86OnJlZ1QyKTsKKworICAg
IC8vIEJlZm9yZSBwcm9jZXNzaW5nIHRoZSBhcmd1bWVudHMgbG9vcCwgY2hlY2sgdGhhdCB3ZSBo
YXZlIGdlbmVyYXRlZCBKSVQgY29kZSBmb3IgY2FsbGluZworICAgIC8vIHRvIGF2b2lkIHByb2Nl
c3NpbmcgdGhlIGxvb3AgdHdpY2UgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbm9Db2RlOworICAgIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZzZXRPZlRhcmdldEZ1
bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlT3JSYXJlRGF0YSgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBhdXRvIGhhc0V4ZWN1
dGFibGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJl
Z1QyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykp
OworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6
cmFyZURhdGFUYWcpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGhhc0V4ZWN1dGFibGUubGlu
aygmaml0KTsKKworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwgRXhlY3V0YWJsZUJh
c2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVGb3JDYWxsKSksCisgICAg
ICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIG5vQ29kZSA9IGppdC5icmFuY2hUZXN0
UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDIpOworICAgIH0KKworICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAgLy8gQXJndW1lbnQg
cHJvY2Vzc2luZyBsb29wOgorICAgIC8vIEZvciBlYWNoIGFyZ3VtZW50IChvcmRlciBzaG91bGQg
bm90IGJlIG9ic2VydmFibGUpOgorICAgIC8vICAgICBpZiB0aGUgdmFsdWUgaXMgYSBQcmltaXRp
dmUsIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUgYXJndW1lbnRzLCBvdGhlcndpc2UK
KyAgICAvLyAgICAgcGVyZm9ybSB3cmFwcGluZyBsb2dpYy4gSWYgdGhlIHdyYXBwaW5nIGxvZ2lj
IHJlc3VsdHMgaW4gYSBuZXcgSlNSZW1vdGVGdW5jdGlvbiwKKyAgICAvLyAgICAgY29weSBpdCBp
bnRvIHRoZSBuZXcgY2FsbCBmcmFtZSdzIGFyZ3VtZW50cywgb3RoZXJ3aXNlIGl0IG11c3QgaGF2
ZSB0aHJvd24gYSBUeXBlRXJyb3IuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQu
YnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJl
bCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVkaW5nVGhpcygwKSku
aW5kZXhlZEJ5KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpLCB2YWx1
ZVJlZ3MpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgdmFsdWVJc1ByaW1pdGl2
ZTsKKyAgICAgICAgdmFsdWVJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2VsbCh2
YWx1ZVJlZ3MpKTsKKyAgICAgICAgdmFsdWVJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElm
Tm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgICAgICBqaXQuc3RvcmVQ
dHIoR1BSSW5mbzo6cmVnVDEsIGppdC5hZGRyZXNzRm9yKGxvb3BJbmRleCkpOworCisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0
aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisKKyAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCk+KEdQUkluZm86
OnJlZ1QwLCB2YWx1ZVJlZ3MpOworICAgICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0p
OworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcp
OworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9u
KHZtKSk7CisKKyAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3MpOworICAgICAgICBq
aXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSksIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICBqaXQubG9hZFB0cihqaXQuYWRkcmVzc0Zv
cihsb29wSW5kZXgpLCBHUFJJbmZvOjpyZWdUMSk7CisKKyAgICAgICAgdmFsdWVJc1ByaW1pdGl2
ZS5saW5rKCZqaXQpOworICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJlZ3MsIENDYWxsSGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdUMSwgQ0Nh
bGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgIGppdC5icmFuY2hTdWIzMihDQ2FsbEhl
bHBlcnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpy
ZWdUMSkubGlua1RvKGxvb3AsICZqaXQpOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAg
ICB9CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDAsIEpTUmVtb3RlRnVuY3Rpb246Om9mZnNldE9mVGFyZ2V0RnVuY3Rpb24oKSksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBlcnM6
OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKworICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGF1dG8g
aGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BS
SW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVE
YXRhVGFnKSk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rp
b246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGhhc0V4ZWN1dGFibGUubGlu
aygmaml0KTsKKworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJhc2U6Om9mZnNldE9m
SklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVGb3JDYWxsKSksCisgICAgICAgIEdQUkluZm86
OnJlZ1QwKTsKKworICAgIC8vIEJhc2VkIG9uIHRoZSBjaGVjayBhYm92ZSwgd2Ugc2hvdWxkIGJl
IGdvb2Qgd2l0aCB0aGlzLiBPbiBBUk02NCwgZW1pdFBvaW50ZXJWYWxpZGF0aW9uIHdpbGwgZG8g
dGhpcy4KKyNpZiBBU1NFUlRfRU5BQkxFRCAmJiAhQ1BVKEFSTTY0RSkKKyAgICB7CisgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBjaGVja05vdE51bGwgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2Fs
bEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihUR0ludmFsaWRQb2ludGVyKTsKKyAgICAgICAgY2hlY2tOb3ROdWxsLmxpbmsoJmpp
dCk7CisgICAgfQorI2VuZGlmCisKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAs
IEpTRW50cnlQdHJUYWcpOworCisgICAgLy8gV3JhcCByZXR1cm4gdmFsdWUKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworI2VuZGlmCisKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHJlc3VsdElzUHJpbWl0aXZlOworICAgIHJlc3VsdElzUHJpbWl0aXZl
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHJlc3VsdFJlZ3MpKTsKKyAgICByZXN1bHRJc1By
aW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90T2JqZWN0KHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVy
KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQs
IEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQubG9hZENl
bGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0
V3JhcHBlZFZhbHVlRm9yQ2FsbGVyKT4oR1BSSW5mbzo6cmVnVDIsIHJlc3VsdFJlZ3MpOworICAg
IGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGpp
dC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CisKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5saW5r
KCZqaXQpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsK
KworICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICBq
aXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxl
cik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pKTsKKyAgICBqaXQucHJlcGFyZUNh
bGxPcGVyYXRpb24odm0pOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlv
bihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNh
bGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQs
IEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6UmVtb3RlRnVuY3Rpb25UaHVu
ayk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1
bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Mo
dm0pKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIGxpbmtCdWZmZXIsIEpJ
VFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIHJlbW90ZSBmdW5jdGlvbiBjYWxs
cyIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCBhOWZlZWVh
OTI0YWUwMDc4ZDg0NTFlMTcyYzRjNDk0NWRmMWQ1ZWUxLi41ODllNzAwNDY0M2EyMjUzNzI1YWYy
YmI4ZjBmZjA1ZDMzMWU3YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgKQEAgLTgyLDYgKzgyLDggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJik7CiAKIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKIAor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxH
ZW5lcmF0b3IoVk0mKTsKKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGRmMTgwZmJhZDFjNzkxZWM3M2NmNmI5
Y2EzZjRiNDQyOGM0NmJhODQuLmY0Yjk4OTdjN2QzMWQwODJmYzU0NjdkZmE4ZGNlYjVjMTU1MTM1
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNC
aWdJbnQuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmgiCkBAIC0zNjYsNiArMzY3LDcgQEAgc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJFdmFsU2NyaXB0KTsKIHN0YXRpYyBKU0NfREVD
TEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR0MpOwogc3RhdGljIEpTQ19ERUNMQVJF
X0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzKTsKIHN0YXRpYyBK
U0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yKTsK
K3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVG
dW5jdGlvbik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxh
ckFnZW50U3RhcnQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25E
b2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3QpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlcG9ydCk7CkBAIC02NDksNiArNjUxLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImdjIiwgZnVuY3Rpb25Eb2xs
YXJHQywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7
CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJjbGVhcktlcHRPYmplY3RzIiwgZnVu
Y3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwg
Imdsb2JhbE9iamVjdEZvciIsIGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0Rm9yLCAxLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKKyAgICAgICAgYWRk
RnVuY3Rpb24odm0sIGRvbGxhciwgImlzUmVtb3RlRnVuY3Rpb24iLCBmdW5jdGlvbkRvbGxhcklz
UmVtb3RlRnVuY3Rpb24sIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6Tm9uZSkpOwogICAgICAgICAKICAgICAgICAgZG9sbGFyLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcodm0sICJnbG9iYWwiKSwgZ2xvYmFsVGhpcygpKTsKICAgICAgICAg
ZG9sbGFyLT5wdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIklzSFRNTEREQSIpLApAQCAtMjA4NCw2ICsyMDg3LDE4IEBAIEpTQ19ERUZJTkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvciwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0K
IAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlv
biwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyJfcykpKTsKKworICAgIEpTVmFsdWUgYXJnID0gY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc1JlbW90ZUZ1bmN0
aW9uKHZtLCBhcmcpKSk7Cit9CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRv
bGxhckFnZW50U3RhcnQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKaW5kZXggZmY1ZjE5MjQ2OTBm
NjJmNDhjNTEzNjViNTJlNmM1NjNiNGU2Mjg5ZC4uYjgxNzU5YmNhN2VhOGQ1NDJiYzkyZDExZmYy
ODdiNTBkODJmMzc2YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5z
aWMuY3BwCkBAIC0yMDUsNiArMjA1LDggQEAgY29uc3QgY2hhciogaW50cmluc2ljTmFtZShJbnRy
aW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gIklzVHlwZWRBcnJheVZpZXdJbnRyaW5z
aWMiOwogICAgIGNhc2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAgICAgICAgIHJldHVy
biAiQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25D
YWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4gIlJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNp
YyI7CiAgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJKU01hcEdl
dEludHJpbnNpYyI7CiAgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggOGU2OGU3ZTc0ZmI3OGNkYmQzMzI0Y2Zi
ZjBhMjVlZDZkMjBkNmQ1OC4uNGFlMzY1MWI1NzVlMjMxNThiZjY4OTYwYjZkY2NjMDlhNTdiYWYx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKQEAgLTExOCw2
ICsxMTgsNyBAQCBlbnVtIEludHJpbnNpYyA6IHVpbnQ4X3QgewogICAgIFR5cGVkQXJyYXlFbnRy
aWVzSW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRG
dW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAog
ICAgIEpTTWFwR2V0SW50cmluc2ljLAogICAgIEpTTWFwSGFzSW50cmluc2ljLAogICAgIEpTTWFw
U2V0SW50cmluc2ljLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCA2
OGMwZTViYzJlYTA0YjMwMmRjNDNkMjQ4YWI1MTg4ZjRiM2UzMGZmLi5hNjk5MzE1OTA5OWNjYzFi
NzM5NmE5N2M1OGZkNGVlMzFhNWMxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaApAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgSlNUeXBlUmFuZ2UgewogICAgIG1hY3Jv
KEpTU3ltYm9sVGFibGVPYmplY3QsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpN
b2R1bGVFbnZpcm9ubWVudFR5cGUpIFwKICAgICBtYWNybyhKU1Njb3BlLCBKU1R5cGU6Okdsb2Jh
bE9iamVjdFR5cGUsIEpTVHlwZTo6V2l0aFNjb3BlVHlwZSkgXAogICAgIG1hY3JvKFN0cmluZ09i
amVjdCwgSlNUeXBlOjpTdHJpbmdPYmplY3RUeXBlLCBKU1R5cGU6OkRlcml2ZWRTdHJpbmdPYmpl
Y3RUeXBlKSBcCisgICAgbWFjcm8oU2hhZG93UmVhbG1PYmplY3QsIEpTVHlwZTo6U2hhZG93UmVh
bG1UeXBlLCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSkgXAogCiAKIC8vIEZvcndhcmQgZGVjbGFy
ZSB0aGUgY2xhc3NlcyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBhbHJlYWR5IGV4aXN0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCA4YTYwYTlmOWU4
ZjY2OTQyYjViODVjNWRhNWFiNTE2NmE1ODgzNGQwLi5jY2E4MDg4YzRlMjA0YzVjOGM5NzZkY2Mx
NWJjN2I3YTJmYmEyZGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVl
LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90
b3R5cGUuaCIKQEAgLTEyMyw4ICsxMjQsOCBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29ucwogICAg
IEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gJkpTRnVuY3Rpb246
OmdldENvbnN0cnVjdERhdGEpOwogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxE
YXRhID09ICZKU0Z1bmN0aW9uOjpnZXRDYWxsRGF0YSk7CiAKLSAgICAvLyBKU0JvdW5kRnVuY3Rp
b24gaW5zdGFuY2VzIHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2FkIGFuZCBsYXppbHkg
YWxsb2NhdGUgdGhlaXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCi0gICAgQVNTRVJUKCF0aGlzLT5p
bmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSk7CisgICAgLy8gSlNCb3VuZEZ1bmN0aW9uL0pT
UmVtb3RlRnVuY3Rpb24gaW5zdGFuY2VzIHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2Fk
IGFuZCBsYXppbHkgYWxsb2NhdGUgdGhlaXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCisgICAgQVNT
RVJUKCF0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAhdGhpcy0+aW5oZXJp
dHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKTsKIAogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIGlmICghbmFtZS5pc051
bGwoKSkKQEAgLTYyNCw3ICs2MjUsNyBAQCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TmFtZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZyBuYW1lKQogCiBKU0Z1bmN0
aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVk
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICBpZiAoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSAmJiAhdGhpcy0+
aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9uPih2bSkpCisgICAgaWYgKGlzSG9zdE9yQnVpbHRpbkZ1
bmN0aW9uKCkgJiYgIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pICYmICF0aGlz
LT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpCiAgICAgICAgIHJldHVybiBQcm9wZXJ0
eVN0YXR1czo6RWFnZXI7CiAgICAgUHJvcGVydHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5TGF6
eUxlbmd0aElmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYg
KGlzTGF6eShsYXp5TGVuZ3RoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uaAppbmRleCA4NDYwZDQyYzA3YTIxZjBhMjYzZmY4ZTgxYjJjNTAyYTlmY2ZkOGZjLi5j
MzE4ZDVlMTE4MzczZTBhOGM1OGVlMDM1OWVlOWMyN2UwZTI0N2IyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC0xNTAsNiArMTUwLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7CiAgICAgYm9vbCBpc0Ns
YXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAgIGJvb2wgaXNSZW1vdGVGdW5jdGlv
bihWTSYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5hbWUoSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbklubGluZXMuaAppbmRleCAyNWQ2MDk0MzBiYjdkZWI1ZWNiMGFkOTcyMTJlODhm
OTg3YTVkYjA4Li4yZWJmMDUyNjEwNmMzNTQ4NzdjYTBjZDMzODAxMjc3NDljYTI5ZjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGUuaCIKICNpbmNs
dWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVk
ZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2ZUV4ZWN1dGFibGUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC03OCw2ICs3OSwxMSBAQCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9u
Ojppc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuICFpc0hvc3RG
dW5jdGlvbigpICYmIGpzRXhlY3V0YWJsZSgpLT5pc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigp
OwogfQogCitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc1JlbW90ZUZ1bmN0aW9uKFZNJiB2bSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pOworfQor
CiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlvbjo6bmF0aXZlRnVuY3Rpb24o
KQogewogICAgIEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKQEAgLTk4LDYgKzEw
NCwxMyBAQCBpbmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihKU1ZhbHVlIHZhbHVlLCBUYWdnZWRO
YXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICByZXR1cm4gZnVuY3Rpb24tPm5hdGl2
ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAKK2lubGluZSBib29sIGlzUmVtb3Rl
RnVuY3Rpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiBmdW5jdGlv
biA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVy
biBmdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTGVuZ3RoKCkgY29uc3QKIHsKICAg
ICBpZiAoRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpKQpAQCAt
MTE0LDYgKzEyNyw4IEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246Omhhc1JlaWZpZWROYW1lKCkg
Y29uc3QKIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6Y2FuQXNzdW1lTmFtZUFuZExlbmd0aEFy
ZU9yaWdpbmFsKFZNJikKIHsKKyAgICAvLyBKU1JlbW90ZUZ1bmN0aW9uIG5ldmVyIGhhcyBhICdu
YW1lJyBmaWVsZCwgcmV0dXJuIHRydWUKKyAgICAvLyB0byBhdm9pZCBhbGxvY2F0aW5nIGEgRnVu
Y3Rpb25SYXJlRGF0YS4KICAgICBpZiAoaXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAppbmRleCBlMzk3NDUyMTJjYjg2Y2ZiMDQ5NjcxZWI1MTg0NDhkYWQ0MWQwZDc0Li5iMTc2OTYz
YWNhZTUyNTQ5ODkzZTNhOTk4OTA1OGJiMTE4ZWZmYmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDcgQEAK
ICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCkBAIC03NzAsNiArNzcxLDEwIEBAIHZvaWQg
SlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6
ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAgICAgICAgICAgaW5pdC5zZXQoSlNOYXRpdmVTdGRG
dW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQub3duZXIt
Pm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAgfSk7CisgICAgbV9yZW1vdGVG
dW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXpl
cjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU1JlbW90ZUZ1bmN0
aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsKICAgICBKU0Z1bmN0aW9uKiBj
YWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSBu
dWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24gPSBudWxs
cHRyOwpAQCAtMTUzMSw2ICsxNTM2LDE0IEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBs
b3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAg
ICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBjcmVhdGVQcml2YXRlU3ltYm9s
KSk7CiAgICAgICAgIH0pOwogCisgICAgLy8gU2hhZG93UmVhbG1zCisgICAgbV9saW5rVGltZUNv
bnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6Y3JlYXRlUmVt
b3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGlu
aXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGNyZWF0ZVJl
bW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0pOworICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmlzUmVtb3RlRnVuY3Rpb24pXS5p
bml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAg
ICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxP
YmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGlzUmVtb3RlRnVuY3Rpb24pKTsKKyAg
ICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgLy8gV2ViQXNzZW1ibHkg
U3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFzc2VtYmx5Q29tcGlsZVN0cmVhbWluZ0ludGVybmFs
KV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CkBAIC0y
MjU5LDYgKzIyNzIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuSW1wbChK
U0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhpc09iamVjdC0+bV9jdXN0b21T
ZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5t
X2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+
bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKKyAgICB0aGlzT2Jq
ZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hhZG93UmVhbG1PYmplY3RTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDJm
M2FkNzZkY2EzZTMzYThlYzRiYzA1N2U3MTE2MDUzMzIyNWY2NmUuLjk1ODUwYTgyMzY1ZDE1ZWQ3
OGFlOWYyM2M2MjA2YzY5NmVjMWMxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDIxLDYgKzQyMSw3IEBAIHB1YmxpYzoKICAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5j
dGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNH
bG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAg
ICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwpAQCAtODY0LDYg
Kzg2NSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgp
OyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBT
dHJ1Y3R1cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxl
UmVjb3JkU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNw
YWNlT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZhZjYwYjM2ZDg3MDQ2YmY1YjY5YTFlMGE1ODgwYjhmM2YzYTgxNjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90
ZUZ1bmN0aW9uLmNwcApAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBJZ2FsaWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVu
Y3Rpb24uaCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5m
byBKU1JlbW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikg
fTsKKworSlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZt
LCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVu
Y3Rpb24odm0sIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQoreworfQorCitzdGF0aWMgSlNWYWx1ZSB3
cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRh
cmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0pKSB7CisgICAgICAgIEpT
T2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUuYXND
ZWxsKCkpOworICAgICAgICByZXR1cm4gSlNSZW1vdGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJn
ZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNW
YWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFyZ3VtZW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHBy
aW1pdGl2ZSIpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0KTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIHdyYXBSZXR1cm5WYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB3cmFwVmFs
dWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVl
IHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVf
SE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8
SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJl
bW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9uKHZtKSk7CisgICAgSlNGdW5jdGlvbiogdGFy
Z2V0RnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRG
dW5jdGlvbigpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gdGFy
Z2V0RnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCk7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1ZSA9IHdyYXBBcmd1bWVu
dChnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudChpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIGFyZ3MuYXBwZW5kKHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VM
WShhcmdzLmhhc092ZXJmbG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHRhcmdldEZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7
CisgICAgaWYgKGV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3JDYWxsKCkpIHsKKyAgICAgICAgLy8g
Rm9yY2UgdGhlIGV4ZWN1dGFibGUgdG8gY2FjaGUgaXRzIGFyaXR5IGVudHJ5cG9pbnQuCisgICAg
ICAgIGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5
KTsKKyAgICB9CisKKyAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1
bmN0aW9uKTsKKyAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9u
ZSk7CisgICAgYXV0byByZXN1bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVu
Y3Rpb24sIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1Zh
bHVlOjplbmNvZGUod3JhcFJldHVyblZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBy
ZXN1bHQpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNh
bGxHZW5lcmljLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogcmVt
b3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxs
ZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9uKHZtKSk7
CisgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1
bmN0aW9uKCk7CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdl
dEZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQo
Z2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoaSkpOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUpOworICAgIH0KKyAg
ICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0
aW9uKTsKKyAgICBBU1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7
CisgICAgYXV0byByZXN1bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rp
b24sIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUod3JhcFJldHVyblZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0
LCByZXN1bHQpKSk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0
aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIEFTU0VSVChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAxKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihKU0M6OmlzUmVtb3RlRnVuY3Rpb24oZ2xvYmFs
T2JqZWN0LT52bSgpLCB2YWx1ZSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNy
ZWF0ZVJlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlv
biA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgQVNTRVJUKHRhcmdldEZ1
bmN0aW9uLmlzQ2FsbGFibGUodm0pKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSA9
IGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldEZ1bmN0aW9uLmFzQ2VsbCgpKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CisgICAgaWYg
KCFjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8gc2hhZG93UmVhbG0gPSBqc0R5bmFtaWNDYXN0PFNoYWRvd1JlYWxt
T2JqZWN0Kj4odm0sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKQorICAgICAgICAg
ICAgZGVzdGluYXRpb25HbG9iYWxPYmplY3QgPSBzaGFkb3dSZWFsbS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Cisg
ICAgfQorCisgICAgYXV0byByZXN1bHQgPSBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIGRl
c3RpbmF0aW9uR2xvYmFsT2JqZWN0LCB0YXJnZXRDYWxsYWJsZSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KSk7Cit9CisKK2lubGluZSBTdHJ1
Y3R1cmUqIGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBnbG9iYWxPYmplY3QtYXdhcmUgc3Ry
dWN0dXJlIGNhY2hpbmcKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5yZW1vdGVGdW5jdGlvblN0
cnVjdHVyZSgpOworfQorCitKU1JlbW90ZUZ1bmN0aW9uKiBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0
Q2FsbGFibGUpCit7CisgICAgQVNTRVJUKHRhcmdldENhbGxhYmxlICYmIHRhcmdldENhbGxhYmxl
LT5pc0NhbGxhYmxlKHZtKSk7CisgICAgaWYgKGF1dG8gcmVtb3RlID0ganNEeW5hbWljQ2FzdDxK
U1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRhcmdldENhbGxhYmxlKSkgeworICAgICAgICB0YXJnZXRD
YWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKCFKU0M6
OmlzUmVtb3RlRnVuY3Rpb24odm0sIHRhcmdldENhbGxhYmxlKSk7CisgICAgfQorCisgICAgYm9v
bCBpc0pTRnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHRhcmdldENhbGxhYmxlKTsKKyAgICBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0UmVtb3RlRnVuY3Rpb24oaXNKU0Z1bmN0
aW9uKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0
dXJlKGdsb2JhbE9iamVjdCk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIEpTUmVtb3RlRnVu
Y3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB0YXJnZXRDYWxs
YWJsZSk7CisKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBm
dW5jdGlvbjsKK30KKwordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0
cyh2bSwgaW5mbygpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpT
UmVtb3RlRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
UmVtb3RlRnVuY3Rpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0RnVuY3Rp
b24pOworfQorCitERUZJTkVfVklTSVRfQ0hJTERSRU4oSlNSZW1vdGVGdW5jdGlvbik7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNSZW1vdGVGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNS
ZW1vdGVGdW5jdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0OTI0ZWVmZTIxYmFjY2MxMjI5OGEyMjVjZjZi
NTNkNmJjNTkxYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBJZ2FsaWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBA
aWdhbGlhLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdXhpbGlh
cnlCYXJyaWVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlIDx3dGYvVGFnZ2Vk
QXJyYXlTdG9yYWdlUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKU0NfREVDTEFSRV9IT1NU
X0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9uQ2FsbEZvckpTRnVuY3Rpb24pOworSlNDX0RFQ0xBUkVf
SE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljKTsKK0pTQ19ERUNMQVJFX0hP
U1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9O
KGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKTsKKworLy8gSlNSZW1vdGVGdW5jdGlvbiBjcmVhdGVzIGEg
YnJpZGdlIGJldHdlZW4gaXRzIG5hdGl2ZSBSZWFsbSBhbmQgYSByZW1vdGUgb25lLgorLy8gV2hl
biBpbnZva2VkLCBhcmd1bWVudHMgYXJlIHdyYXBwZWQgdG8gcHJldmVudCBsZWFraW5nIGluZm9y
bWF0aW9uIGFjcm9zcyB0aGUgcmVhbG0gYm91bmRhcnkuCisvLyBUaGUgcmV0dXJuIHZhbHVlIGFu
ZCBhbnkgYWJydXB0IGNvbXBsZXRpb25zIGFyZSBhbHNvIGZpbHRlcmVkLgorY2xhc3MgSlNSZW1v
dGVGdW5jdGlvbiBmaW5hbCA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTRnVuY3Rpb24gQmFzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KKyAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5yZW1vdGVGdW5j
dGlvblNwYWNlPG1vZGU+KCk7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IEpTUmVtb3RlRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
IHRhcmdldENhbGxhYmxlKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbigpIHsgcmV0
dXJuIG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCk7IH0KKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0
R2xvYmFsT2JqZWN0KCkgeyByZXR1cm4gdGFyZ2V0RnVuY3Rpb24oKS0+Z2xvYmFsT2JqZWN0KCk7
IH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7IAorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNS
ZW1vdGVGdW5jdGlvbiwgbV90YXJnZXRGdW5jdGlvbik7IH0KKworICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CisKK3ByaXZhdGU6CisgICAgSlNSZW1vdGVGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1
dGFibGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRDYWxs
YWJsZSk7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgREVDTEFSRV9WSVNJ
VF9DSElMRFJFTjsKKworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXRGdW5jdGlv
bjsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBlZWY1MTVk
OTAzYmRmNjkyYmFiYjcyNmMyY2Y2MGJiNWJjNmUxOGRjLi40ZGZhM2IyZmZlZTVkOWY4YjE4Mjk2
MmI1OWE3ZDhhOThiYzVmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBA
IC02MzEsNiArNjMxLDggQEAgc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9y
SW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiByYW5kb21UaHVu
a0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVuY3Rpb25DYWxsSW50cmluc2ljOgogICAgICAg
ICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CisgICAgY2FzZSBSZW1vdGVGdW5j
dGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiByZW1vdGVGdW5jdGlvbkNhbGxHZW5l
cmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
NzA4LDYgKzcxMCwyNSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0Qm91bmRGdW5jdGlvbihi
b29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpCiAgICAgcmV0dXJuIGdldE9yQ3Jl
YXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9CiAKK05hdGl2ZUV4ZWN1dGFibGUqIFZNOjpn
ZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKK3sKKyAgICBib29sIHNsb3dDYXNl
ID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdldE9yQ3JlYXRlID0gWyZdIChXZWFrPE5hdGl2
ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVFeGVjdXRhYmxlKiB7CisgICAgICAgIGlmIChh
dXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDsKKyAg
ICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0ID0gZ2V0SG9zdEZ1bmN0aW9uKAorICAgICAg
ICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljIDogcmVtb3RlRnVuY3Rp
b25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAgICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMg
OiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgICAgICAgICBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3RyaW5nKCkpOworICAgICAgICBzbG90ID0gV2Vh
azxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAgICAgIHJldHVybiBnZXRPckNyZWF0ZShtX3Ns
b3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zh
c3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworfQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNGJiYmM0ZDc3YWJlNzcwNzY1YjMzYWIwMTg3YmViNmQ5
NDM1MTJhMi4uMjc4MzBjZWFkOGQ4MDFjNGM0MGIzYjIyZmVjYTlmNGRhMzFkYjM3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00MzIsNiArNDMyLDcgQEAgcHVibGljOgogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFj
ZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eVJldm9rZVNw
YWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rp
b25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFy
Z3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJF
UihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKQEAgLTU3Miw2ICs1NzMsOSBAQCBwdWJs
aWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dCb3VuZEV4ZWN1dGFibGU7CiAg
ICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dDYW5Db25zdHJ1Y3RCb3VuZEV4ZWN1dGFi
bGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhl
Y3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd1JlbW90ZUZ1bmN0aW9u
RXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJlZFdvcmtUaW1lcj4gZGVmZXJyZWRXb3JrVGlt
ZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CkBA
IC02ODQsNiArNjg4LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RG
dW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1
Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwg
Ym9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0
aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4g
Z2V0Q1RJTGlua0NhbGwoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450442</attachid>
            <date>2022-01-31 13:20:33 -0800</date>
            <delta_ts>2022-01-31 14:35:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220131212032.patch</filename>
            <type>text/plain</type>
            <size>83309</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTllM2FlNjZjOWYwYjNiYTcyY2Y0Yjg3MWZlNGVhMzNiYTliNmIzLi4wZGNmZjQyNWU1YzNjZDE2
NTJmOTM5MTM1NDg4NTA0MmYxYmIwNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAyMi0wMS0zMSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDEt
MzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVs
YW5kIFN0cnVjdHVyZUlEIG92ZXJoYXVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggNzg4Mzc3ZjY3MTM5OWExM2IwYjUxNTMxZTBjMjljMjQ3NDNkYjgyMS4uMjc3N2JlOTlh
ZDFiN2MwOWQyYjZjOTUwMjI3ZGFjM2UxNzNiY2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTA4Myw2ICsxMDgzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgK
ICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCiAgICAgcnVudGltZS9KU1By
b3h5LmgKKyAgICBydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaAogICAgIHJ1bnRpbWUvSlNSdW5M
b29wVGltZXIuaAogICAgIHJ1bnRpbWUvSlNTY29wZS5oCiAgICAgcnVudGltZS9KU1NjcmlwdEZl
dGNoUGFyYW1ldGVycy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRmZjI5N2Qz
ZTNhZDgxNDkwNzQ1MWNmNmYwMGIyMWY2N2VkNmE2MzkuLjU4OGViZGNiODRmYzlhZTJhYmQyYTIy
M2MzZDcxZGI0OTdhNDJmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTMz
LDYgKzExMzMsNyBAQAogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5j
dGlvbkFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI0MDMyN0Uy
Nzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkg
LyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QjcwQ0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmgg
Ki87IH07CiAJCTVCNzBDRkUwMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qjcw
Q0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovOyB9Owog
CQk1QjcwQ0ZFMjFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQzFE
QjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CkBAIC00
MDg0LDYgKzQwODUsOCBAQAogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21D
YWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMy
N0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSZW1vdGVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3
RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1JlbW90ZUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBF
QzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03MzI0LDkgKzczMjcsNiBAQAogCQk3Qjk4RDEzMzFCNjBDRDFFMDAyM0IxQTQg
Lyogd2FzbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oICovLAotCQkJCTM3
QUFDMDkwMjc5RjEyNDEwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNw
cCAqLywKLQkJCQkzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzU2Vj
dGlvblBhcnNlci5oICovLAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLywK
IAkJCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAq
LywKIAkJCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmgg
Ki8sCkBAIC03MzM2LDYgKzczMzYsOSBAQAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5oICovLAogCQkJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8sCiAJCQkJQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5k
aW5nLmggKi8sCisJCQkJMzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50
cy5oICovLAorCQkJCTM3QUFDMDkwMjc5RjEyNDEwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNT
ZWN0aW9uUGFyc2VyLmNwcCAqLywKKwkJCQkzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2Fz
bUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oICovLAogCQkJCTUyNUMwREQ3MUU5MzU4NDcwMDIx
ODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLywKIAkJCQk1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0Qg
LyogV2FzbUNhbGxlZS5oICovLAogCQkJCTUyNkFDNEI0MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNt
Q2FsbGVlR3JvdXAuY3BwICovLApAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5
NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYy
NTUzQ0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYx
MzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3
OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYz
NzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEy
QUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgKi8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYx
QkRBMDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1By
b3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNS
ZW1vdGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5
NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDk3Myw3ICsxMDk3OSw2IEBACiAJCQkJMEZFMDUwMjkxQUE5MDk1NjAwRDMzQjMzIC8qIFNj
b3BlZEFyZ3VtZW50c1RhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyQjFBQTkwOTU2
MDBEMzNCMzMgLyogU2NvcGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUyMTdF
RTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTM3QUFDMDk0Mjc5RjFDMDUwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMzMTExQjhCMjM5NzI1NjUwMEFBMzRDRSAvKiBTY3JpYmJsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNjgxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNkUxODlCMDBBQTAwNjMzMjMxIC8qIFNj
cmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTEwMyw3ICsxMTEwOCw2IEBACiAJ
CQkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9y
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzdBQUMwOTMyNzlGMUJGQzAwRDY0ODQyIC8qIFdhc21C
cmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyRDRERTkxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMTE2MCw2ICsxMTE2NCw4IEBACiAJCQkJNTNGNDBFOTMxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0NBNzMw
QTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
NEIxREZBMURGMjQ0RTIwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzdBQUMwOTQyNzlGMUMwNTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzdBQUMwOTMyNzlGMUJGQzAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1Nl
Y3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNUMwRERBMUU5MzU4NDcwMDIxODRD
RCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjZBQzRCNzFFOTc3QzVEMDAz
NTAwRTEgLyogV2FzbUNhbGxlZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0ZCODUzQTIy
RjM2NjdCMDA4RjkwRUQgLyogV2FzbUNhbGxlZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3MDBjN2JhOTYyZDUwMDI3ZmJjNjY0OGI5NWY1
MDI3NmUwZTZiNzdiLi4zYTk1YzU4YjNkOTliOWJjZTgzMmMwMTc1ODJkZjk1ODRkOGVjYThhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MDIsNiArOTAyLDcgQEAgcnVudGltZS9K
U1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAog
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCiBydW50aW1lL0pTUHJveHkuY3Bw
CitydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cAogcnVudGltZS9KU1Njb3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDI4NWRmMGQx
YTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZlZTAwZTAuLjE4NWFhMzFmNjFkOTA0NzVjOTdhZjBh
MWJiMjYzZjdiMGE5YWZhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2KERGR1RodW5rKSBc
CiAgICAgdihGVExUaHVuaykgXAogICAgIHYoQm91bmRGdW5jdGlvblRodW5rKSBcCisgICAgdihS
ZW1vdGVGdW5jdGlvblRodW5rKSBcCiAgICAgdihTcGVjaWFsaXplZFRodW5rKSBcCiAgICAgdihW
aXJ0dWFsVGh1bmspIFwKICAgICB2KFdhc21UaHVuaykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDgwYTg3ZWIwMDdhOWQzOGM3MTU0Mjg5
NjU4Zjg4MTM4NDZiYzg4OGQuLmEwNTI1NzQ4NzZmYTE0OGFjOTgzYmM0MTcxZjQxNTVhNzBkM2Yw
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgK
QEAgLTE4OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvdXRPZkxpbmVS
ZWFjdGlvbkNvdW50cykgXAogICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikg
XAogICAgIG1hY3JvKHNlbnRpbmVsU3RyaW5nKSBcCisgICAgbWFjcm8oY3JlYXRlUmVtb3RlRnVu
Y3Rpb24pIFwKKyAgICBtYWNybyhpc1JlbW90ZUZ1bmN0aW9uKSBcCiAKIAogbmFtZXNwYWNlIFN5
bWJvbHMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRv
d1JlYWxtUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRv
d1JlYWxtUHJvdG90eXBlLmpzCmluZGV4IDhkODkwNjg4ZDdhN2QxNzNhZmRiZjRmMDEyODE1M2E2
YmU5YTRjNGIuLmEyYjQxMGIzNjdmNGZjOTI4NTc2ZDE4ZjdlN2YzNzhiNDNlZmJjMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90
b3R5cGUuanMKQEAgLTMyLDM5ICszMiw3IEBAIGZ1bmN0aW9uIHdyYXAoZnJvbVNoYWRvd1JlYWxt
LCBzaGFkb3dSZWFsbSwgdGFyZ2V0KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmIChAaXND
YWxsYWJsZSh0YXJnZXQpKSB7Ci0gICAgICAgIHZhciB3cmFwcGVkID0gZnVuY3Rpb24oLyogYXJn
cy4uLiAqLykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0g
ICAgICAgICAgICB2YXIgd3JhcHBlZEFyZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwot
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkK
LSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIGFyZ3VtZW50cywgd2UgZmxpcCBgZnJv
bVNoYWRvd1JlYWxtYCBzaW5jZSB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgYSBmdW5jdGlv
biBmcm9tIHJlYWxtIEEgdG8gd29yayBpbiByZWFsbSBCLCB3ZSBuZWVkIHRvCi0gICAgICAgICAg
ICAgICAgLy8gd3JhcCB0aGUgYXJndW1lbnRzIChmcm9tIHJlYWxtIEIpIHRvIHdvcmsgaW4gcmVh
bG0gQSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0
aW9uCi0gICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHdyYXBwZWRBcmdzLCBpbmRleCwg
QHdyYXAoIWZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIGFyZ3VtZW50c1tpbmRleF0pKTsK
LQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0
LkBhcHBseShAdW5kZWZpbmVkLCB3cmFwcGVkQXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gIndyYXBwZWQgZnVuY3Rpb24gdGhyZXc6
ICIgKyBlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb21TaGFkb3dSZWFsbSkK
LSAgICAgICAgICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKG1zZyk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1rVHlwZUVycm9yID0gQGV2YWxJ
blJlYWxtKHNoYWRvd1JlYWxtLCAiKG1zZykgPT4gbmV3IFR5cGVFcnJvcihtc2cpIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG1rVHlwZUVycm9yLkBhcHBseShtc2cpOwotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIEB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVh
bG0sIHJlc3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1lJ107
Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKLQotICAgICAgICAvLyBCZWNhdXNl
IHRoaXMgZnVuY3Rpb24gKHdyYXApIHdpbGwgcnVuIHdpdGggdGhlIGluY3ViYXRpbmcgcmVhbG0K
LSAgICAgICAgLy8gYWN0aXZlLCB3ZSBvbmx5IG5lZWQgdG8gZml4IHRoZSBwcm90b3R5cGUgb24g
YHdyYXBwZWRgIGlmIHdlIGFyZQotICAgICAgICAvLyBtb3ZpbmcgdGhlIGZ1bmN0aW9uIGZyb20g
dGhlIGluY3ViYXRpbmcgcmVhbG0gdG8gdGhlIHNoYWRvdyByZWFsbQotICAgICAgICBpZiAoIWZy
b21TaGFkb3dSZWFsbSkKLSAgICAgICAgICAgIEBtb3ZlRnVuY3Rpb25Ub1JlYWxtKHdyYXBwZWQs
IHNoYWRvd1JlYWxtKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgICAgIHJldHVybiBA
Y3JlYXRlUmVtb3RlRnVuY3Rpb24odGFyZ2V0LCBmcm9tU2hhZG93UmVhbG0gPyBudWxsIDogc2hh
ZG93UmVhbG0pOwogICAgIH0gZWxzZSBpZiAoQGlzT2JqZWN0KHRhcmdldCkpIHsKICAgICAgICAg
QHRocm93VHlwZUVycm9yKCJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2Fs
bGFibGUgb3IgcHJpbWl0aXZlIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIxNmFmMGY2ODlmMGFi
ZWE0ODBhZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkwMDQ4OGY2ZGNiZGQy
NzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1l
Q29uc3RhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVD
b25zdGFudC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAg
dihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5nLCBudWxscHRyKSBc
CisgICAgdihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAgIHYoaXNSZW1vdGVG
dW5jdGlvbiwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5LX1RJTUVfQ09OU1RB
TlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXgg
MzUzZmYwZGU4ZTc0N2I4NjliOGE1MTIzMDE1NTljNmIwOWVhNmNlMy4uNjI2YTBmMmNhYzk0Yjhk
OWY0NjI2NWU2Y2U1NmJlMjk1MmQ2NTdiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2lu
Y2x1ZGUgIkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAi
SlNXZWFrT2JqZWN0UmVmLmgiCkBAIC0zMjE3LDYgKzMyMTgsNyBAQCBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVs
ZU5hbWVzcAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0
ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9i
amVjdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9r
ZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFzaDoweGI1MDZhOTM5
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVtb3RlRnVuY3Rpb25T
cGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJsZSkKIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFj
ZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMp
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hlclNw
YWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggMzdmYTNmMTEzY2U4YjViNTRiMjRlMmE4NzQ0MTY4
NzQxMDUxMmM3NS4uM2NkMDY5NjViODg0ZDVhYWQ3OGY5NjkxMTgyNGMzZmQwOGNkMmQ5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTE5LDYgKzkxOSw3IEBAIHB1YmxpYzoKICAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNw
YWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0
aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRB
cmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCA0OTFlYTQ1MjdmZGY2NmIy
YjFiYzMxZDY5ZjU1NWU3ZTVmZjNlNjc3Li4zYTYyNzk4MGM1ZDFmOGFlZmIyNGI2OGJkMmE5NGY1
NzU5NGM0MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJMTEludFRodW5rcy5oIgpAQCAtNTU1LDEyICs1NTYsMTMgQEAgQ2F0Y2hJbmZvOjpDYXRj
aEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhhbmRsZXIsIGNvbnN0IFdhc206OkNhbGxl
ZSogY2FsbGUKIAogY2xhc3MgVW53aW5kRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgVW53aW5kRnVu
Y3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBK
U1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFu
ZGxlcikKKyAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIEpTVmFsdWUgdGhyb3duVmFsdWUsIENvZGVCbG9jayomIGNvZGVC
bG9jaywgQ2F0Y2hJbmZvJiBoYW5kbGVyLCBib29sJiBzZWVuUmVtb3RlRnVjbmN0aW9uKQogICAg
ICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAg
ICAsIG1faXNUZXJtaW5hdGlvbihpc1Rlcm1pbmF0aW9uKQogICAgICAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKICAgICAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgLCBtX3Nl
ZW5SZW1vdGVGdW5jdGlvbihzZWVuUmVtb3RlRnVjbmN0aW9uKQogICAgIHsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CkBAIC02MDksNiAr
NjExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgaWYgKCFtX2Nh
bGxGcmFtZS0+aXNXYXNtRnJhbWUoKSAmJiAgSlNDOjppc1JlbW90ZUZ1bmN0aW9uKG1fdm0sIG1f
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKSAmJiAhbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAg
ICAvLyBDb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgaGFuZGxlciwgYnV0IG1hcmsgdGhhdCBhIG1h
cnNoYWxsaW5nIGZ1bmN0aW9uIHdhcyBvbiB0aGUgc3RhY2sgc28gdGhhdCB3ZSBjYW4KKyAgICAg
ICAgICAgIC8vIHRyYW5zbGF0ZSB0aGUgZXhjZXB0aW9uIGJlZm9yZSBqdW1waW5nIHRvIHRoZSBo
YW5kbGVyLgorICAgICAgICAgICAgY29uc3RfY2FzdDxVbndpbmRGdW5jdG9yKj4odGhpcyktPm1f
c2VlblJlbW90ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2lu
ZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CkBAIC02NTcsOCArNjY2LDM5IEBAIHBy
aXZhdGU6CiAgICAgY29uc3QgV2FzbTo6VGFnKiBtX3dhc21UYWcgeyBudWxscHRyIH07CiAgICAg
Ym9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIHsgZmFsc2UgfTsKICNlbmRpZgorCisgICAgYm9vbCYg
bV9zZWVuUmVtb3RlRnVuY3Rpb247CiB9OwogCisvLyBSZXBsYWNlIGFuIGV4Y2VwdGlvbiB3aGlj
aCBwYXNzZXMgYWNyb3NzIGEgbWFyc2hhbGxpbmcgYm91bmRhcnkgd2l0aCBhIFR5cGVFcnJvciBm
b3IgaXRzIGhhbmRsZXIncyBnbG9iYWwgb2JqZWN0Lgorc3RhdGljIHZvaWQgc2FuaXRpemVSZW1v
dGVGdW5jdGlvbkV4Y2VwdGlvbihWTSYgdm0sIENhbGxGcmFtZSogaGFuZGxlckNhbGxGcmFtZSwg
RXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCF2bS5pc1Rl
cm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGhhbmRsZXJDYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIC8vIEF2b2lkIHVzZXItb2JzZXJ2YWJsZSBU
b1N0cmluZygpCisgICAgU3RyaW5nIGV4Y2VwdGlvblN0cmluZzsKKyAgICBpZiAoZXhjZXB0aW9u
VmFsdWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5nID0gZXhjZXB0aW9u
VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBlbHNlIGlmIChleGNlcHRpb25W
YWx1ZS5hc0NlbGwoKS0+aW5oZXJpdHM8RXJyb3JJbnN0YW5jZT4odm0pKQorICAgICAgICBleGNl
cHRpb25TdHJpbmcgPSBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uVmFsdWUu
YXNDZWxsKCkpLT5zYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKGdsb2JhbE9iamVjdCk7CisKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gV2UgbXVzdCBub3QgaGF2ZSBlbnRlcmVkIEpT
IGF0IHRoaXMgcG9pbnQKKworICAgIGlmIChleGNlcHRpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25TdHJp
bmcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKK30KKwogTkVWRVJfSU5MSU5FIENhdGNoSW5mbyBJbnRlcnByZXRl
cjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2Vw
dGlvbikKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CkBAIC02
NzgsOCArNzE4LDEzIEBAIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2lu
ZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0CiAKICAgICAvLyBDYWxjdWxh
dGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVj
ZXNzYXJ5LgogICAgIENhdGNoSW5mbyBjYXRjaEluZm87Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
ZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jaywgY2F0Y2hJbmZvKTsKKyAgICBib29sIHNlZW5SZW1v
dGVGdW5jdGlvbiA9IGZhbHNlOworICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZy
YW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVl
LCBjb2RlQmxvY2ssIGNhdGNoSW5mbywgc2VlblJlbW90ZUZ1bmN0aW9uKTsKICAgICBTdGFja1Zp
c2l0b3I6OnZpc2l0PFN0YWNrVmlzaXRvcjo6VGVybWluYXRlSWZUb3BFbnRyeUZyYW1lSXNFbXB0
eT4oY2FsbEZyYW1lLCB2bSwgZnVuY3Rvcik7CisKKyAgICBpZiAoc2VlblJlbW90ZUZ1bmN0aW9u
KQorICAgICAgICBzYW5pdGl6ZVJlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKHZtLCBjYWxsRnJhbWUs
IGV4Y2VwdGlvbik7CisKICAgICBpZiAodm0uaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpKQog
ICAgICAgICB2bS5wb3BBbGxDaGVja3BvaW50T1NSU2lkZVN0YXRlVW50aWwoY2FsbEZyYW1lKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNzdh
NGUwM2RkMTIyNzc3NzM4ZDUwZGNhMTJmYjA4ZGI4NTUyZjViNy4uYmRjZTczNGJhZWQ5N2FmODc5
ZDc1NGIyY2E5MDk3YzFhNDlmNGFmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCkBAIC0xMzQ1LDYgKzEzNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBq
aXRBc3NlcnRJc051bGwoR1BSUmVnKTsKICAgICB2b2lkIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7
CiAgICAgdm9pZCBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOworICAgIGlubGluZSB2b2lk
IGppdEFzc2VydE5vRXhjZXB0aW9uKFZNJiB2bSkgeyBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRp
b24odm0pOyB9CiAjZWxzZQogICAgIHZvaWQgaml0QXNzZXJ0SXNJbnQzMihHUFJSZWcpIHsgfQog
ICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMyKEdQUlJlZykgeyB9CkBAIC0xMzU1LDYgKzEzNTYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBqaXRBc3NlcnRJc051bGwoR1BSUmVnKSB7IH0KICAgICB2
b2lkIGppdEFzc2VydFRhZ3NJblBsYWNlKCkgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRBcmd1bWVu
dENvdW50U2FuZSgpIHsgfQorICAgIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mKSB7IH0K
ICNlbmRpZgogCiAgICAgdm9pZCBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oVk0mKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDFkZDdiNzNj
NjE2Nzk2MjdmMzAyZDkxNDIyZjViYzM3ZjIxNGU0YjAuLmI3MTc3NTI0OGQwZWEyYTliYjA1MTU5
YjVmMDgyZWJhMWI4ZTFkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCkBAIC0xMTUsNiArMTE2LDg3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywg
dm9pZCwgKEpTR2xvCiAgICAgQVNTRVJUKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKIH0K
IAorc3RhdGljIEpTVmFsdWUgZ2V0V3JhcHBlZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB2YWx1ZSk7CisKKyAgICBpZiAodmFsdWUu
aXNDYWxsYWJsZSh2bSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNSZW1v
dGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4odmFsdWUuYXNDZWxsKCkpKSk7CisKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxh
YmxlIG9yIHByaW1pdGl2ZSIpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2Fs
bGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZtLCBjYWxsZWUpKTsKKworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiB0
YXJnZXRHbG9iYWxPYmplY3QgPSBjYWxsZWUtPnRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVj
dCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGdldFdy
YXBwZWRWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVG
dW5jdGlvbiogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVu
Y3Rpb24odm0sIGNhbGxlZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
Z2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblRocm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1v
dGVGdW5jdGlvbiogY2FsbGVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZtLCBjYWxsZWUpKTsKKworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBFeGNlcHRpb24qIGV4
Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUg
aGVyZSB3aGVuICJyZXRocm93aW5nIiBhbiBleGNlcHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb24pOworCisgICAgaWYgKFVOTElLRUxZKHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24o
ZXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZh
bHVlKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIFN0cmluZyBleGNlcHRp
b25TdHJpbmcgPSBleGNlcHRpb25WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAg
IEV4Y2VwdGlvbiogdG9TdHJpbmdFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBp
ZiAoVU5MSUtFTFkodG9TdHJpbmdFeGNlcHRpb24gJiYgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlv
bih0b1N0cmluZ0V4Y2VwdGlvbikpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAg
IGlmIChleGNlcHRpb25TdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGV4Y2VwdGlvblN0cmluZyk7CisKKyAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKK30KKwogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKaW5kZXggNGI1ZDAxMWY5MDZhMzAzMmUyYTViODUwYTNhMGI5YTRjNjgzNGJmMy4uZDVlOWY1
YzcwNWE1ODkzOTA3MTFiYWY3MzcwYjAwNGIyNjFmZGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgSlNGdW5jdGlv
bjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQ7CiBj
bGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUmVtb3RlRnVuY3Rpb247CiBjbGFzcyBKU1Njb3BlOwog
Y2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBKU1ZhbHVlOwpAQCAtMTU1LDYgKzE1Niw5IEBAIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21D
YWxsZXJGcmFtZSwgdm9pZCwKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVk1I
YW5kbGVFeGNlcHRpb24sIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqKSk7CitKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5j
b2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1ZSkpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0
aW9uLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qKSk7CiAKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHZvaWQsIChD
b2RlQmxvY2sqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrLCBpbnQzMl90LCAoSlNHbG9iYWxPYmplY3QqKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggYzY1NzFhNmNiNTdlODI0ZGNjOWUx
Y2EyMzVlNGRiZGVhMzA5MzNiMC4uYWU5NDNiOTc3OTg5ODhlNjhhYmU0ZTQxOWIzYzA4NDA4NWI4
YTQzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJN
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1
bmtKSVQuaCIKQEAgLTE0MjIsNiArMTQyMywxOTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiAgICAgICAg
IGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5k
IGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOworCisgICAgLy8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgorICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQuc3RvcmUzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIHVuc2lnbmVkIGV4dHJhU3Rh
Y2tOZWVkZWQgPSAwOworICAgIGlmICh1bnNpZ25lZCBzdGFja01pc2FsaWdubWVudCA9IHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSkKKyAgICAgICAgZXh0
cmFTdGFja05lZWRlZCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIHN0YWNrTWlzYWxpZ25tZW50
OworCisgICAgLy8gV2UgbmVlZCB0byBmb3J3YXJkIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRoYXQg
d2Ugd2VyZSBwYXNzZWQuIFdlIGFyZW4ndCBhbGxvd2VkIHRvIGRvIGEgdGFpbAorICAgIC8vIGNh
bGwgaGVyZSBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gQXQgbGVhc3Qgbm90IHNvIGxvbmcgYXMgdGhl
IGdlbmVyaWMgcGF0aCBkb2Vzbid0IGRvIGEgdGFpbAorICAgIC8vIGNhbGwsIHNpbmNlIHRoYXQg
d291bGQgYmUgd2F5IHRvbyB3ZWlyZC4KKworICAgIC8vIFRoZSBmb3JtdWxhIGZvciB0aGUgbnVt
YmVyIG9mIHN0YWNrIGJ5dGVzIG5lZWRlZCBnaXZlbiBzb21lIG51bWJlciBvZiBwYXJhbWV0ZXJz
IChpbmNsdWRpbmcKKyAgICAvLyB0aGlzKSBpczoKKyAgICAvLworICAgIC8vICAgICBzdGFja0Fs
aWduKChudW1QYXJhbXMgKyBudW1GcmFtZUxvY2FscyArIENhbGxGcmFtZUhlYWRlclNpemUpICog
c2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkKKyAgICAvLworICAg
IC8vIFByb2JhYmx5IHdlIHdhbnQgdG8gd3JpdGUgdGhpcyBhczoKKyAgICAvLworICAgIC8vICAg
ICBzdGFja0FsaWduKChudW1QYXJhbXMgKyBudW1GcmFtZUxvY2FscyArIChDYWxsRnJhbWVIZWFk
ZXJTaXplIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemUpKSAqIHNpemVvZihSZWdpc3RlcikpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgbnVtRnJhbWVMb2NhbHMgPSAxOworICAgIFZpcnR1YWxSZWdp
c3RlciBsb29wSW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKTsKKworICAgIGppdC5s
b2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgR1BSSW5mbzo6cmVn
VDEpOworCisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzICsgbnVtRnJhbWVMb2NhbHMpLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzKSwgR1BSSW5mbzo6
cmVnVDIpOworICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0Fs
aWdubWVudEJ5dGVzKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hbmQzMihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgR1BSSW5mbzo6
cmVnVDIpOworCisgICAgaWYgKGV4dHJhU3RhY2tOZWVkZWQpCisgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYVN0YWNrTmVlZGVkKSwgR1BSSW5mbzo6cmVn
VDIpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCByZWdUMSBoYXMgdGhlIGFjdHVhbCBhcmd1bWVu
dCBjb3VudCwgYW5kIHJlZ1QyIGhhcyB0aGUgYW1vdW50IG9mIHN0YWNrIHdlIHdpbGwgbmVlZC4K
KyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBlbm91Z2ggc3RhY2sgc3BhY2UuCisKKyAg
ICBqaXQubmVnUHRyKEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVs
b3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0
U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOworCisgICAgLy8gVGhyb3cgU3RhY2sgT3Zl
cmZsb3cgZXhjZXB0aW9uCisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNCb3VuZEZ1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspPihHUFJJbmZv
OjpyZWdUMyk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KTsKKworICAgIGhhdmVTdGFja1NwYWNlLmxpbmsoJmppdCk7CisgICAgaml0Lm1vdmUoR1BSSW5m
bzo6cmVnVDIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8g
U2V0IGB0aGlzYCB0byB1bmRlZmluZWQKKyAgICAvLyBOT1RFOiBuZWVkcyBjb25jZW5zdXMgaW4g
VEMzOSAoaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vaXNzdWVz
LzMyOCkKKyAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQ0NhbGxIZWxwZXJzOjpjYWxs
ZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CisgICAgaml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIENDYWxsSGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUNCwgR1BS
SW5mbzo6cmVnVDIpOworCisgICAgLy8gQmVmb3JlIHByb2Nlc3NpbmcgdGhlIGFyZ3VtZW50cyBs
b29wLCBjaGVjayB0aGF0IHdlIGhhdmUgZ2VuZXJhdGVkIEpJVCBjb2RlIGZvciBjYWxsaW5nCisg
ICAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyB0aGUgbG9vcCB0d2ljZSBpbiB0aGUgc2xvdyBjYXNl
LgorICAgIENDYWxsSGVscGVyczo6SnVtcCBub0NvZGU7CisgICAgeworICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTUmVtb3RlRnVuY3Rp
b246Om9mZnNldE9mVGFyZ2V0RnVuY3Rpb24oKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6WmVybywgR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRh
YmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86
OnJlZ1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
Q29kZUZvckNhbGwpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgbm9D
b2RlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7
CisKKyAgICAvLyBBcmd1bWVudCBwcm9jZXNzaW5nIGxvb3A6CisgICAgLy8gRm9yIGVhY2ggYXJn
dW1lbnQgKG9yZGVyIHNob3VsZCBub3QgYmUgb2JzZXJ2YWJsZSk6CisgICAgLy8gICAgIGlmIHRo
ZSB2YWx1ZSBpcyBhIFByaW1pdGl2ZSwgY29weSBpdCBpbnRvIHRoZSBuZXcgY2FsbCBmcmFtZSBh
cmd1bWVudHMsIG90aGVyd2lzZQorICAgIC8vICAgICBwZXJmb3JtIHdyYXBwaW5nIGxvZ2ljLiBJ
ZiB0aGUgd3JhcHBpbmcgbG9naWMgcmVzdWx0cyBpbiBhIG5ldyBKU1JlbW90ZUZ1bmN0aW9uLAor
ICAgIC8vICAgICBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1lJ3MgYXJndW1lbnRzLCBv
dGhlcndpc2UgaXQgbXVzdCBoYXZlIHRocm93biBhIFR5cGVFcnJvci4KKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZSA9IGppdC5icmFuY2hTdWIzMihDQ2FsbEhlbHBlcnM6Olplcm8sIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgaml0Lmxv
YWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDApKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCB2YWx1ZUlzUHJpbWl0aXZlOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZl
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMSwgaml0LmFkZHJlc3NGb3IobG9v
cEluZGV4KSk7CisKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZv
clRhcmdldCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVl
Rm9yVGFyZ2V0KT4oR1BSSW5mbzo6cmVnVDAsIHZhbHVlUmVncyk7CisgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKKworICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZh
bHVlUmVncyk7CisgICAgICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGppdC5s
b2FkUHRyKGppdC5hZGRyZXNzRm9yKGxvb3BJbmRleCksIEdQUkluZm86OnJlZ1QxKTsKKworICAg
ICAgICB2YWx1ZUlzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zdG9yZVZhbHVl
KHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkuaW5kZXhlZEJ5
KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgaml0
LmJyYW5jaFN1YjMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKS5saW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOworICAgIH0KKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRG
dW5jdGlvbigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6
cmVnVDIsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhl
Y3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgaml0LmxvYWRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLCBFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZUZvckNhbGwp
KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDApOworCisgICAgLy8gQmFzZWQgb24gdGhlIGNoZWNr
IGFib3ZlLCB3ZSBzaG91bGQgYmUgZ29vZCB3aXRoIHRoaXMuIE9uIEFSTTY0LCBlbWl0UG9pbnRl
clZhbGlkYXRpb24gd2lsbCBkbyB0aGlzLgorI2lmIEFTU0VSVF9FTkFCTEVEICYmICFDUFUoQVJN
NjRFKQorICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNoZWNrTm90TnVsbCA9IGpp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKFRHSW52YWxpZFBvaW50ZXIpOworICAgICAgICBj
aGVja05vdE51bGwubGluaygmaml0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBqaXQu
Y2FsbChHUFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisKKyAgICAvLyBXcmFwIHJldHVy
biB2YWx1ZQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Cisj
ZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgcmVzdWx0SXNQcmltaXRpdmU7Cisg
ICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwocmVzdWx0UmVn
cykpOworICAgIHJlc3VsdElzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmplY3Qo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JDYWxsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKKworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIpPihHUFJJbmZvOjpyZWdU
MiwgcmVzdWx0UmVncyk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGV4Y2Vw
dGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKKworICAgIHJl
c3VsdElzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgaml0LnJldCgpOworCisgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7Cisg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRv
cEVudHJ5RnJhbWUpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25M
b29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSkp
OworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpSZW1vdGVGdW5jdGlvblRodW5rKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
cmVtb3RlIGZ1bmN0aW9uIGNhbGxzIik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5oCmluZGV4IGE5ZmVlZWE5MjRhZTAwNzhkODQ1MWUxNzJjNGM0OTQ1ZGYxZDVlZTEuLjU4
OWU3MDA0NjQzYTIyNTM3MjVhZjJiYjhmMGZmMDVkMzMxZTdhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtODIsNiArODIsOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsK
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2Fs
bEdlbmVyYXRvcihWTSYpOwogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOworCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZGYx
ODBmYmFkMWM3OTFlYzczY2Y2YjljYTNmNGI0NDI4YzQ2YmE4NC4uZjRiOTg5N2M3ZDMxZDA4MmZj
NTQ2N2RmYThkY2ViNWMxNTUxMzU4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbklu
bGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTG9j
ay5oIgogI2luY2x1ZGUgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKQEAgLTM2Niw2ICszNjcsNyBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckV2YWxTY3Jp
cHQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHQyk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckNsZWFyS2Vw
dE9iamVjdHMpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xs
YXJHbG9iYWxPYmplY3RGb3IpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVjZWl2ZUJyb2FkY2FzdCk7CiBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVwb3J0KTsKQEAg
LTY0OSw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFy
LCAiZ2MiLCBmdW5jdGlvbkRvbGxhckdDLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImNs
ZWFyS2VwdE9iamVjdHMiLCBmdW5jdGlvbkRvbGxhckNsZWFyS2VwdE9iamVjdHMsIDAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRG
dW5jdGlvbih2bSwgZG9sbGFyLCAiZ2xvYmFsT2JqZWN0Rm9yIiwgZnVuY3Rpb25Eb2xsYXJHbG9i
YWxPYmplY3RGb3IsIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
Tm9uZSkpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiaXNSZW1vdGVGdW5jdGlv
biIsIGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlvbiwgMSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgIAogICAgICAgICBkb2xsYXIt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpLCBnbG9i
YWxUaGlzKCkpOwogICAgICAgICBkb2xsYXItPnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSXNIVE1MRERBIiksCkBAIC0yMDg0LDYgKzIwODcs
MTggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0
Rm9yLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25E
b2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2Jh
bE9iamVjdCwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIl9zKSkpOworCisgICAgSlNWYWx1ZSBhcmcg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGlzUmVtb3RlRnVuY3Rpb24odm0sIGFyZykpKTsKK30KKwogSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwCmluZGV4IDY3NDIwNjUyM2QxYzRiY2RlZThjNTAwYTA3MTMxNjE1YzI0MWU1OGEu
LjAxNzZhMjU1ZDJjYjUzN2JmZjdjNjY0ZTg4MWYxNGRlNWFhMjliMzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC0xNjMsOCArMTYz
LDkgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1lc3NhZ2VTdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgbWVzc2FnZVZhbHVlID0gbWVzc2FnZVNs
b3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUHJvcGVydE5hbWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKKyAg
ICBpZiAoIW1lc3NhZ2VWYWx1ZSB8fCAhbWVzc2FnZVZhbHVlLmlzUHJpbWl0aXZlKCkpCiAgICAg
ICAgIHJldHVybiB7IH07CisKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1lc3NhZ2VW
YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKaW5kZXggZmY1ZjE5MjQ2OTBmNjJmNDhjNTEzNjVi
NTJlNmM1NjNiNGU2Mjg5ZC4uYjgxNzU5YmNhN2VhOGQ1NDJiYzkyZDExZmYyODdiNTBkODJmMzc2
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCkBAIC0y
MDUsNiArMjA1LDggQEAgY29uc3QgY2hhciogaW50cmluc2ljTmFtZShJbnRyaW5zaWMgaW50cmlu
c2ljKQogICAgICAgICByZXR1cm4gIklzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMiOwogICAgIGNh
c2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiQm91bmRGdW5j
dGlvbkNhbGxJbnRyaW5zaWMiOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2lj
OgorICAgICAgICByZXR1cm4gIlJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYyI7CiAgICAgY2Fz
ZSBKU01hcEdldEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJKU01hcEdldEludHJpbnNpYyI7
CiAgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgKaW5kZXggOGU2OGU3ZTc0ZmI3OGNkYmQzMzI0Y2ZiZjBhMjVlZDZkMjBk
NmQ1OC4uNGFlMzY1MWI1NzVlMjMxNThiZjY4OTYwYjZkY2NjMDlhNTdiYWYxZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBl
bnVtIEludHJpbnNpYyA6IHVpbnQ4X3QgewogICAgIFR5cGVkQXJyYXlFbnRyaWVzSW50cmluc2lj
LAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRGdW5jdGlvbkNhbGxJ
bnRyaW5zaWMsCisgICAgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAogICAgIEpTTWFwR2V0
SW50cmluc2ljLAogICAgIEpTTWFwSGFzSW50cmluc2ljLAogICAgIEpTTWFwU2V0SW50cmluc2lj
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCA2OGMwZTViYzJlYTA0
YjMwMmRjNDNkMjQ4YWI1MTg4ZjRiM2UzMGZmLi5hNjk5MzE1OTA5OWNjYzFiNzM5NmE5N2M1OGZk
NGVlMzFhNWMxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApAQCAt
OTksNiArOTksNyBAQCBzdHJ1Y3QgSlNUeXBlUmFuZ2UgewogICAgIG1hY3JvKEpTU3ltYm9sVGFi
bGVPYmplY3QsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpNb2R1bGVFbnZpcm9u
bWVudFR5cGUpIFwKICAgICBtYWNybyhKU1Njb3BlLCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUs
IEpTVHlwZTo6V2l0aFNjb3BlVHlwZSkgXAogICAgIG1hY3JvKFN0cmluZ09iamVjdCwgSlNUeXBl
OjpTdHJpbmdPYmplY3RUeXBlLCBKU1R5cGU6OkRlcml2ZWRTdHJpbmdPYmplY3RUeXBlKSBcCisg
ICAgbWFjcm8oU2hhZG93UmVhbG1PYmplY3QsIEpTVHlwZTo6U2hhZG93UmVhbG1UeXBlLCBKU1R5
cGU6OlNoYWRvd1JlYWxtVHlwZSkgXAogCiAKIC8vIEZvcndhcmQgZGVjbGFyZSB0aGUgY2xhc3Nl
cyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBhbHJlYWR5IGV4aXN0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCA4YTYwYTlmOWU4ZjY2OTQyYjViODVj
NWRhNWFiNTE2NmE1ODgzNGQwLi4yOTc4YTdhOTVjMDJkOWZhMmEwYjEwM2QwN2ViZGY2MzU2Y2Qz
MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpT
UmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVlLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAg
LTEyMyw4ICsxMjQsOCBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29ucwogICAgIEFTU0VSVChtZXRo
b2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENvbnN0cnVj
dERhdGEpOwogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhID09ICZKU0Z1
bmN0aW9uOjpnZXRDYWxsRGF0YSk7CiAKLSAgICAvLyBKU0JvdW5kRnVuY3Rpb24gaW5zdGFuY2Vz
IHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2FkIGFuZCBsYXppbHkgYWxsb2NhdGUgdGhl
aXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCi0gICAgQVNTRVJUKCF0aGlzLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KHZtKSk7CisgICAgLy8gSlNCb3VuZEZ1bmN0aW9uL0pTUmVtb3RlRnVuY3Rp
b24gaW5zdGFuY2VzIHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2FkIGFuZCBsYXppbHkg
YWxsb2NhdGUgdGhlaXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCisgICAgQVNTRVJUKCF0aGlzLT5p
bmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAhdGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVG
dW5jdGlvbj4odm0pKTsKIAogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcihsZW5ndGgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIGlmICghbmFtZS5pc051bGwoKSkKQEAgLTU3
MSw2ICs1NzIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TGVuZ3RoKFZNJiB2bSkKICAgICBk
b3VibGUgbGVuZ3RoID0gMDsKICAgICBpZiAodGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9u
Pih2bSkpCiAgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPih0aGlzKS0+
bGVuZ3RoKHZtKTsKKyAgICBlbHNlIGlmICh0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9u
Pih2bSkpCisgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odGhpcykt
Pmxlbmd0aCh2bSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb24o
KSk7CiAgICAgICAgIGxlbmd0aCA9IGpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOwpA
QCAtNjI0LDcgKzYyNyw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlOYW1lKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nIG5hbWUpCiAKIEpTRnVuY3Rpb246OlBy
b3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewotICAgIGlmIChpc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmICF0aGlzLT5pbmhlcml0
czxKU0JvdW5kRnVuY3Rpb24+KHZtKSkKKyAgICBpZiAoKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9u
KCkgJiYgIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKSkKICAgICAgICAgcmV0
dXJuIFByb3BlcnR5U3RhdHVzOjpFYWdlcjsKICAgICBQcm9wZXJ0eVN0YXR1cyBsYXp5TGVuZ3Ro
ID0gcmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KTsKICAgICBpZiAoaXNMYXp5KGxhenlMZW5ndGgpKQpAQCAtNjM4LDcgKzY0MSw3IEBAIEpTRnVu
Y3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVk
ZWQoVk0mIHZtLCBKU0dsb2JhCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9u
OjpyZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgQVNTRVJUKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpOwotICAgIGlmIChpc0J1aWx0aW5G
dW5jdGlvbigpIHx8IHRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKSB7CisgICAg
aWYgKGlzQnVpbHRpbkZ1bmN0aW9uKCkgfHwgdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9u
Pih2bSkgfHwgdGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSB7CiAgICAgICAg
IFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlmeUxhenlMZW5ndGhJZk5lZWRlZCh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaXNMYXp5KGxhenlMZW5n
dGgpKQogICAgICAgICAgICAgcmV0dXJuIGxhenlMZW5ndGg7CkBAIC02OTUsNiArNjk4LDE0IEBA
IEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eUJvdW5kTmFt
ZUlmTmVlZGVkKFZNJiB2bSwgSlNHbG9iCiAgICAgICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1
dGVzID0gUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5OwogICAgICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsKICAgICAgICAg
cHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIHN0cmluZywgaW5pdGlhbEF0dHJpYnV0ZXMpOworICAg
IH0gZWxzZSBpZiAodGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSB7CisgICAg
ICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+ZW5zdXJlUmFyZURhdGEodm0p
OworICAgICAgICBKU1N0cmluZyogbmFtZSA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odGhp
cyktPm5hbWVNYXlCZU51bGwoKTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgbmFt
ZSA9IGpzRW1wdHlTdHJpbmcodm0pOworICAgICAgICB1bnNpZ25lZCBpbml0aWFsQXR0cmlidXRl
cyA9IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seTsKKyAgICAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7CisgICAgICAgIHB1
dERpcmVjdCh2bSwgbmFtZUlkZW50LCBuYW1lLCBpbml0aWFsQXR0cmlidXRlcyk7CiAgICAgfQog
ICAgIHJldHVybiBQcm9wZXJ0eVN0YXR1czo6UmVpZmllZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCA4NDYwZDQyYzA3YTIxZjBhMjYzZmY4ZTgx
YjJjNTAyYTlmY2ZkOGZjLi5jMzE4ZDVlMTE4MzczZTBhOGM1OGVlMDM1OWVlOWMyN2UwZTI0N2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC0xNTAs
NiArMTUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29u
c3Q7CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAgIGJv
b2wgaXNSZW1vdGVGdW5jdGlvbihWTSYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5h
bWUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCAyNWQ2MDk0MzBiYjdk
ZWI1ZWNiMGFkOTcyMTJlODhmOTg3YTVkYjA4Li4yZWJmMDUyNjEwNmMzNTQ4NzdjYTBjZDMzODAx
Mjc3NDljYTI5ZjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb25JbmxpbmVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4
ZWN1dGFibGUuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2
ZUV4ZWN1dGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OCw2ICs3OSwxMSBAQCBpbmxp
bmUgYm9vbCBKU0Z1bmN0aW9uOjppc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0CiAg
ICAgcmV0dXJuICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhlY3V0YWJsZSgpLT5pc0NsYXNzQ29u
c3RydWN0b3JGdW5jdGlvbigpOwogfQogCitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc1JlbW90
ZUZ1bmN0aW9uKFZNJiB2bSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5oZXJpdHM8SlNSZW1vdGVG
dW5jdGlvbj4odm0pOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlv
bjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklubGlu
ZSgpKTsKQEAgLTk4LDYgKzEwNCwxMyBAQCBpbmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihKU1Zh
bHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICByZXR1
cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAKK2lu
bGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmIChhdXRvKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2YWx1
ZSkpCisgICAgICAgIHJldHVybiBmdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTGVu
Z3RoKCkgY29uc3QKIHsKICAgICBpZiAoRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlz
LT5yYXJlRGF0YSgpKQpAQCAtMTE0LDYgKzEyNyw4IEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246
Omhhc1JlaWZpZWROYW1lKCkgY29uc3QKIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6Y2FuQXNz
dW1lTmFtZUFuZExlbmd0aEFyZU9yaWdpbmFsKFZNJikKIHsKKyAgICAvLyBKU1JlbW90ZUZ1bmN0
aW9uIG5ldmVyIGhhcyBhICduYW1lJyBmaWVsZCwgcmV0dXJuIHRydWUKKyAgICAvLyB0byBhdm9p
ZCBhbGxvY2F0aW5nIGEgRnVuY3Rpb25SYXJlRGF0YS4KICAgICBpZiAoaXNIb3N0RnVuY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRh
ID0gdGhpcy0+cmFyZURhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOGEyMWRhNjZlMGRmMjg2NmU5OGE2OTM2YmU3ZDcx
MTE4ZDFkMWNlLi5hOTA3Njc5ODhlYmM2Yzc3OWNmZjM4Y2Y3NjMzNGRlM2M4Y2JlNzBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBA
IC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1By
b21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUg
IkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCkBAIC03NzAs
NiArNzcxLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgICAgICBb
XSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAgICAgICAgICAgaW5p
dC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQu
b3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAg
fSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtd
IChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0
LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25l
ciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsK
ICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMSw2ICsxNTM2LDE0IEBAIGNhcGl0YWxOYW1l
ICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/
IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5p
dC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBj
cmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwogCisgICAgLy8gU2hhZG93UmVhbG1z
CisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVD
b25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRp
YWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246
OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwg
U3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0pOworICAgIG1fbGlu
a1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6Omlz
UmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4m
IGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZt
LCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGlzUmVt
b3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1RpbWVDb25zdGFudHNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFzc2VtYmx5Q29tcGls
ZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0Nl
bGw+JiBpbml0KSB7CkBAIC0yMjU5LDYgKzIyNzIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhp
c09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZp
c2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hhZG93UmVhbG1PYmpl
Y3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcmVnRXhwU3Ry
dWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dlbmVyYXRvckZ1bmN0
aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCmluZGV4IDFiMWQ5YjU1M2M3NDcyYmViYjY3NDg5ZDkyYzc3YTNkOTM2OTZkMmEu
LjNhZGZhMzhlOGEzMjQ5YTQ1OGJjYjE3NDViMTgyNjUzZGY1YzhiNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDIxLDYgKzQyMSw3
IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAg
ICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcmVnRXhwU3RydWN0dXJlOworCiAgICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9hc3luY0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fYXN5bmNHZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOwpA
QCAtNDM3LDYgKzQzOCw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5
UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJh
cnJpZXI8QXN5bmNGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0Z1bmN0aW9uUHJvdG90eXBlOwog
ICAgIFdyaXRlQmFycmllcjxBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlPiBtX2FzeW5j
R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU+IG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmU7CkBAIC04NzIs
NiArODc0LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVdpdGhJbmRpY2VzU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVj
dHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0cnVj
dHVyZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAg
IFN0cnVjdHVyZSogbW9kdWxlUmVjb3JkU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBtb2R1bGVOYW1l
c3BhY2VPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9i
amVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHByb3h5T2JqZWN0U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eU9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzFhY2Q4OTZlMjFlNWU2OGUwODU3MjA1Zjk4NDg0MDdmMGFjMDM5
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVt
b3RlRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIElnYWxpYSBTLkwuCisgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVG
dW5jdGlvbi5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNoYWRvd1JlYWxtT2JqZWN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTUmVtb3RlRnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1JlbW90ZUZ1bmN0aW9u
KSB9OworCitKU1JlbW90ZUZ1bmN0aW9uOjpKU1JlbW90ZUZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbikKKyAgICA6IEJhc2Uo
dm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorICAgICwgbV90YXJnZXRG
dW5jdGlvbih2bSwgdGhpcywgdGFyZ2V0RnVuY3Rpb24pCisgICAgLCBtX2xlbmd0aCgwLjApCit7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlIHdyYXBWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh2YWx1ZS5pc1By
aW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBpZiAodmFsdWUuaXNDYWxs
YWJsZSh2bSkpIHsKKyAgICAgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiBKU1JlbW90ZUZ1
bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24pOwor
ICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSB3cmFwQXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBv
ciBwcmltaXRpdmUiKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSB3cmFwUmV0dXJuVmFsdWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3Jh
cFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2Vl
biByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihy
ZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlv
bio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5p
c1JlbW90ZUZ1bmN0aW9uKHZtKSk7CisgICAgSlNGdW5jdGlvbiogdGFyZ2V0RnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gdGFyZ2V0RnVuY3Rpb24tPmds
b2JhbE9iamVjdCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7ICsraSkgewor
ICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1ZSA9IHdyYXBBcmd1bWVudChnbG9iYWxPYmplY3Qs
IHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHRhcmdldEZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3JDYWxsKCkpIHsKKyAgICAgICAgLy8gRm9yY2UgdGhlIGV4ZWN1
dGFibGUgdG8gY2FjaGUgaXRzIGFyaXR5IGVudHJ5cG9pbnQuCisgICAgICAgIGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9CisKKyAg
ICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byBy
ZXN1bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUod3Jh
cFJldHVyblZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQpKSk7Cit9CisK
K0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBq
c0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNT
RVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9uKHZtKSk7CisgICAgSlNPYmplY3Qq
IHRhcmdldEZ1bmN0aW9uID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9i
YWxPYmplY3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgSlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0
YXJnZXRHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAg
ICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFko
YXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBh
dXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBBU1NF
UlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1
bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhLCBq
c1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUod3JhcFJl
dHVyblZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCByZXN1bHQpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIEFTU0VS
VChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAxKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihKU0M6OmlzUmVtb3RlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LT52bSgpLCB2
YWx1ZSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNyZWF0ZVJlbW90ZUZ1bmN0
aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPT0gMik7CisgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbiA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgQVNTRVJUKHRhcmdldEZ1bmN0aW9uLmlzQ2FsbGFi
bGUodm0pKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSA9IGpzQ2FzdDxKU09iamVj
dCo+KHRhcmdldEZ1bmN0aW9uLmFzQ2VsbCgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZGVzdGlu
YXRpb25HbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CisgICAgaWYgKCFjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8gc2hhZG93UmVhbG0gPSBqc0R5bmFtaWNDYXN0PFNoYWRvd1JlYWxtT2JqZWN0Kj4odm0sIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKQorICAgICAgICAgICAgZGVzdGluYXRpb25H
bG9iYWxPYmplY3QgPSBzaGFkb3dSZWFsbS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCwgdGFyZ2V0Q2FsbGFibGUpKSk7Cit9
CisKK2lubGluZSBTdHJ1Y3R1cmUqIGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBnbG9iYWxP
YmplY3QtYXdhcmUgc3RydWN0dXJlIGNhY2hpbmcKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5y
ZW1vdGVGdW5jdGlvblN0cnVjdHVyZSgpOworfQorCitKU1JlbW90ZUZ1bmN0aW9uKiBKU1JlbW90
ZUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogdGFyZ2V0Q2FsbGFibGUpCit7CisgICAgQVNTRVJUKHRhcmdldENhbGxhYmxlICYm
IHRhcmdldENhbGxhYmxlLT5pc0NhbGxhYmxlKHZtKSk7CisgICAgaWYgKGF1dG8gcmVtb3RlID0g
anNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRhcmdldENhbGxhYmxlKSkgewor
ICAgICAgICB0YXJnZXRDYWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0RnVuY3Rpb24oKTsKKyAgICAg
ICAgQVNTRVJUKCFKU0M6OmlzUmVtb3RlRnVuY3Rpb24odm0sIHRhcmdldENhbGxhYmxlKSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0pTRnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHRhcmdldENhbGxh
YmxlKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0UmVtb3RlRnVu
Y3Rpb24oaXNKU0Z1bmN0aW9uKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlbW90
ZUZ1bmN0aW9uU3RydWN0dXJlKGdsb2JhbE9iamVjdCk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JlbW90ZUZ1bmN0aW9uPih2
bSkpIEpTUmVtb3RlRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCB0YXJnZXRDYWxsYWJsZSk7CisKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICAvLyAzLjEuMjogQ29weU5hbWVB
bmRMZW5ndGgKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworCisg
ICAgUHJvcGVydHlTbG90IHNsb3QobV90YXJnZXRGdW5jdGlvbi5nZXQoKSwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CisgICAgYm9vbCB0YXJnZXRIYXNMZW5ndGggPSBt
X3RhcmdldEZ1bmN0aW9uLT5nZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisKKyAgICBpZiAodGFyZ2V0SGFzTGVuZ3RoKSB7CisgICAgICAgIEpT
VmFsdWUgdGFyZ2V0TGVuZ3RoID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisgICAgICAgIGRvdWJsZSB0YXJnZXRMZW5ndGhBc0ludCA9IHRhcmdldExlbmd0aC50
b0ludGVnZXJPckluZmluaXR5KGdsb2JhbE9iamVjdCk7CisgICAgICAgIG1fbGVuZ3RoID0gc3Rk
OjptYXgodGFyZ2V0TGVuZ3RoQXNJbnQsIDAuMCk7CisgICAgfQorCisgICAgSlNWYWx1ZSB0YXJn
ZXROYW1lID0gSlNWYWx1ZShtX3RhcmdldEZ1bmN0aW9uLmdldCgpKS5nZXQoZ2xvYmFsT2JqZWN0
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworICAgIGlmICh0YXJnZXROYW1lLmlzU3RyaW5nKCkpCisgICAgICAgIG1fbmFt
ZU1heUJlTnVsbC5zZXQodm0sIHRoaXMsIGFzU3RyaW5nKHRhcmdldE5hbWUpKTsKKworICAgIHNj
b3BlLnJlbGVhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNS
ZW1vdGVGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNS
ZW1vdGVGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXRGdW5jdGlv
bik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKK30K
KworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUmVtb3RlRnVuY3Rpb24pOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVt
b3RlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yYWVhOGQyODk5MmRhMWMxODJjMzg2YWYzMWMzZmUwNDkzMmY3
NDllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNS
ZW1vdGVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuTC4KKyAqIEF1dGhvcjogQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmll
ci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3Rv
cmFnZVB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihyZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYyk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGlzUmVtb3RlRnVuY3Rpb24pOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjcmVhdGVS
ZW1vdGVGdW5jdGlvbik7CisKKy8vIEpTUmVtb3RlRnVuY3Rpb24gY3JlYXRlcyBhIGJyaWRnZSBi
ZXR3ZWVuIGl0cyBuYXRpdmUgUmVhbG0gYW5kIGEgcmVtb3RlIG9uZS4KKy8vIFdoZW4gaW52b2tl
ZCwgYXJndW1lbnRzIGFyZSB3cmFwcGVkIHRvIHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiBh
Y3Jvc3MgdGhlIHJlYWxtIGJvdW5kYXJ5LgorLy8gVGhlIHJldHVybiB2YWx1ZSBhbmQgYW55IGFi
cnVwdCBjb21wbGV0aW9ucyBhcmUgYWxzbyBmaWx0ZXJlZC4KK2NsYXNzIEpTUmVtb3RlRnVuY3Rp
b24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1
bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0ucmVtb3RlRnVuY3Rpb25TcGFj
ZTxtb2RlPigpOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1JlbW90
ZUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRD
YWxsYWJsZSk7CisKKyAgICBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3Rh
cmdldEZ1bmN0aW9uLmdldCgpOyB9CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9i
amVjdCgpIHsgcmV0dXJuIHRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVjdCgpOyB9CisgICAg
SlNTdHJpbmcqIG5hbWVNYXlCZU51bGwoKSBjb25zdCB7IHJldHVybiBtX25hbWVNYXlCZU51bGwu
Z2V0KCk7IH0KKworICAgIGRvdWJsZSBsZW5ndGgoVk0mKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1JlbW90ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldENh
bGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0
aW9uOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lTWF5QmVOdWxsOworICAgIGRv
dWJsZSBtX2xlbmd0aDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApp
bmRleCBlZWY1MTVkOTAzYmRmNjkyYmFiYjcyNmMyY2Y2MGJiNWJjNmUxOGRjLi40ZGZhM2IyZmZl
ZTVkOWY4YjE4Mjk2MmI1OWE3ZDhhOThiYzVmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCkBAIC02MzEsNiArNjMxLDggQEAgc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5r
R2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVy
biByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVuY3Rpb25DYWxsSW50cmlu
c2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CisgICAgY2Fz
ZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiByZW1vdGVGdW5j
dGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpAQCAtNzA4LDYgKzcxMCwyNSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0Qm91
bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpCiAgICAgcmV0
dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9CiAKK05hdGl2ZUV4ZWN1
dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKK3sKKyAgICBi
b29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdldE9yQ3JlYXRlID0gWyZd
IChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVFeGVjdXRhYmxlKiB7Cisg
ICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0ID0gZ2V0SG9zdEZ1bmN0
aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljIDog
cmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAgICAgIHNsb3dDYXNlID8g
Tm9JbnRyaW5zaWMgOiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgICAgICAgICBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3RyaW5nKCkpOworICAgICAg
ICBzbG90ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAgICAgIHJldHVybiBnZXRP
ckNyZWF0ZShtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworICAgIHJldHVybiBnZXRP
ckNyZWF0ZShtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworfQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTU2ZGE5NGEwOGVhMTQ5ZDFjNzU1
NGM3NDQzOWQxNzExMWU0ZTAzNS4uOTY2MjUzODU0NjgyOGZlMzkyZmMzZDRlNmViZjViZWQ4NjU0
NjUxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00MzIsNiArNDMyLDcgQEAg
cHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0aXZlU3Rk
RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHBy
b3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihw
cm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
cmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKQEAgLTU3Miw2ICs1
NzMsOSBAQCBwdWJsaWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dCb3VuZEV4
ZWN1dGFibGU7CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dDYW5Db25zdHJ1Y3RC
b3VuZEV4ZWN1dGFibGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fZmFzdFJlbW90
ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd1Jl
bW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJlZFdvcmtUaW1lcj4gZGVm
ZXJyZWRXb3JrVGltZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJh
Y2tPYmplY3Q7CkBAIC02ODQsNiArNjg4LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlz
SlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdl
dFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNF
bnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTExMTIyMjEwOTdhMTQxYmVmYjlhM2NlNjlm
OWVhMTE4NWQyZmIwOS4uNDlhYjEyZTI5MGI4MzRlOWNiMWExNmQ5YjNhMWQ3YjIzYWU5ZjZjYiAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMSBAQAorMjAyMi0wMS0zMSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBu
ZXcgRnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkcyBhIG5ldyBmaWxlIHRlc3RpbmcgQ29weU5hbWVBbmRMZW5ndGggc3R1ZmYg
aW4gdGhlIFNoYWRvd1JlYWxtIHByb3Bvc2FsLAorICAgICAgICBhbmQgZml4IHVwIGFzc2VydGlv
bnMgYWJvdXQgdGhpcyBpbiBzaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMuCisKKyAgICAgICAgKiBz
dHJlc3Mvc2hhZG93LXJlYWxtLWV2YWx1YXRlLmpzOgorICAgICAgICAqIHN0cmVzcy9zaGFkb3ct
cmVhbG0tcmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHN1bW1hcml6ZUVsZW1lbnQpOgorICAgICAgICAoc3VtbWFyaXplQXJyYXkpOgorICAg
ICAgICAoc2hvdWxkQmVBcnJheUVxdWFsKToKKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAg
KHNob3VsZEhhdmVEZXNjcmlwdG9yKToKKwogMjAyMi0wMS0yOCAgVG9tIFRhcnRhcmluICA8dG9t
QGxlYW5pbmd0ZWNoLmNvbT4KIAogICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgV0FTTSBi
cmFuY2ggaGludGluZyBwcm9wb3NhbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2hhZG93
LXJlYWxtLWV2YWx1YXRlLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxtLWV2YWx1YXRl
LmpzCmluZGV4IGIwMWRhMWY1N2E4Zjk1YjgzZGIxYmU5Y2NiZmU4OWFmZWE4ZmY4Y2UuLjgzNjE5
MjBlNmFkM2QwMTgyNzhmNWZmMTk4YzZhNzc5OGNiNDg5NTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
c3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9zaGFk
b3ctcmVhbG0tZXZhbHVhdGUuanMKQEAgLTgwLDggKzgwLDE3IEBAIGZ1bmN0aW9uIHNob3VsZFRo
cm93KGZ1bmMsIGVycm9yVHlwZSwgYXNzZXJ0aW9uRm4pIHsKICAgICBzaG91bGRCZShPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yod3JhcHBlZEludm9rZUFuZEFkZCksIEZ1bmN0aW9uLnByb3RvdHlwZSk7
CiAKICAgICAvLyBuYW1lIGFuZCBsZW5ndGggcHJvcGVydGllcyBmcm9tIHdyYXBwZWQgZnVuY3Rp
b24gYXJlIGFic2VudAotICAgIHNob3VsZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iod3JhcHBlZEludm9rZUFuZEFkZCwgImxlbmd0aCIpLCB1bmRlZmluZWQpOwotICAgIHNob3Vs
ZEJlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod3JhcHBlZEludm9rZUFuZEFkZCwg
Im5hbWUiKSwgdW5kZWZpbmVkKTsKKyAgICBsZXQgbGVuZ3RoRGVzYyA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod3JhcHBlZEludm9rZUFuZEFkZCwgImxlbmd0aCIpOworICAgIHNo
b3VsZEJlKGxlbmd0aERlc2MudmFsdWUsIDIpOworICAgIHNob3VsZEJlKGxlbmd0aERlc2Mud3Jp
dGFibGUsIGZhbHNlKTsKKyAgICBzaG91bGRCZShsZW5ndGhEZXNjLmVudW1lcmFibGUsIGZhbHNl
KTsKKyAgICBzaG91bGRCZShsZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSwgdHJ1ZSk7CisKKyAgICBs
ZXQgbmFtZURlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdyYXBwZWRJbnZv
a2VBbmRBZGQsICJuYW1lIik7CisgICAgc2hvdWxkQmUobmFtZURlc2MudmFsdWUsICJpbnZva2VB
bmRBZGQiKTsKKyAgICBzaG91bGRCZShuYW1lRGVzYy53cml0YWJsZSwgZmFsc2UpOworICAgIHNo
b3VsZEJlKG5hbWVEZXNjLmVudW1lcmFibGUsIGZhbHNlKTsKKyAgICBzaG91bGRCZShuYW1lRGVz
Yy5jb25maWd1cmFibGUsIHRydWUpOwogCiAgICAgLy8gY2FuJ3QgcGFzcyBvYmplY3RzIGludG8g
YSBzaGFkb3cgcmVhbG0td3JhcHBlZCBmdW5jdGlvbgogICAgIGxldCBudW1iZXJPYmogPSB7IHZh
bHVlT2YoKSB7IHJldHVybiAtMSB9IH07CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zaGFk
b3ctcmVhbG0tcmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzIGIvSlNUZXN0
cy9zdHJlc3Mvc2hhZG93LXJlYWxtLXJlbW90ZS1mdW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFt
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42ZWNlMTJkODAzNzE1ZTI2ZDVkMDJmNDg3NzM1MzYxNzI2OTA3MDE4
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxtLXJlbW90ZS1m
dW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFtZS5qcwpAQCAtMCwwICsxLDQxNCBAQAorLy9AIHJl
cXVpcmVPcHRpb25zKCItLXVzZVNoYWRvd1JlYWxtPTEiKQorCitmdW5jdGlvbiBzdW1tYXJpemVF
bGVtZW50KGVsZW1lbnQpIHsKKyAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAib2JqZWN0Iikgewor
ICAgIGlmIChlbGVtZW50ID09PSBudWxsKQorICAgICAgcmV0dXJuICJudWxsIjsKKyAgICBpZiAo
QXJyYXkuaXNBcnJheShlbGVtZW50KSkKKyAgICAgIHJldHVybiBzdW1tYXJpemVBcnJheShlbGVt
ZW50LCAwKTsKKyAgfQorICBsZXQgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkoZWxlbWVudCk7Cisg
IGlmIChyZXN1bHQubGVuZ3RoID4gMjApIHsKKyAgICBsZXQgYyA9IHJlc3VsdFswXTsKKyAgICBp
ZiAoYyA9PT0gInsiKQorICAgICAgYyA9ICJ9IjsKKyAgICByZXN1bHQgPSBgJHtyZXN1bHQuc3Vi
c3RyKDAsIDE1KX0uLi4ke2N9YDsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlv
biBzdW1tYXJpemVBcnJheShhcnJheSwgaW5kZXgsIHNob3dJbmRleCkgeworCisgIGxldCBwcmVm
aXggPSBpbmRleCA9PT0gMCA/ICIiIDogYC4uLiR7c3VtbWFyaXplRWxlbWVudChhcnJheVtpbmRl
eCAtIDFdKX0sIGA7CisgIGxldCBzdWZmaXggPSBpbmRleCArIDEgPCBhcnJheS5sZW5ndGggPyBg
LCAke3N1bW1hcml6ZUVsZW1lbnQoYXJyYXlbaW5kZXggKyAxXSl9Li4uYCA6ICIiOworCisgIGlm
IChwcmVmaXgubGVuZ3RoID4gMjApCisgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cihwcmVmaXgu
bGVuZ3RoIC0gMjApOworICBpZiAoc3VmZml4Lmxlbmd0aCA+IDIwKQorICAgIHN1ZmZpeCA9IHN1
ZmZpeC5zdWJzdHIoMCwgMjApOworICBlbmRlciA9IHNob3dJbmRleCA/IGAgKGF0IGluZGV4ICR7
aW5kZXh9KWAgOiAiIjsKKyAgcmV0dXJuIGBbJHtwcmVmaXh9JHtKU09OLnN0cmluZ2lmeShhcnJh
eVtpbmRleF0pfSR7c3VmZml4fV0ke2VuZGVyfWA7Cit9CitmdW5jdGlvbiBzaG91bGRCZUFycmF5
RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkgeworICBpZiAoKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQp
ICYmICFBcnJheS5pc0FycmF5KGFjdHVhbCkpKQorICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0
ZWQgJHtKU09OLnN0cmluZ2lmeX0gYnV0IGZvdW5kICR7SlNPTi5zdHJpbmdpZnkoYWN0dWFsKX1g
KTsKKworICB2YXIgaTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7ICsr
aSkgeworICAgIGxldCBlID0gZXhwZWN0ZWRbaV07CisgICAgbGV0IGEgPSBhY3R1YWxbaV07Cisg
ICAgaWYgKGUgPT09IGEpCisgICAgICBjb250aW51ZTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShl
KSkKKyAgICAgIHNob3VsZEJlQXJyYXlFcXVhbChhLCBlKTsKKyAgICB0aHJvdyBuZXcgRXJyb3Io
YEV4cGVjdGVkICR7c3VtbWFyaXplQXJyYXkoZXhwZWN0ZWQsIGksIHRydWUpfSBidXQgZm91bmQg
JHtzdW1tYXJpemVBcnJheShhY3R1YWwsIGkpfWApCisgIH0KK30KKworZnVuY3Rpb24gc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChBcnJheS5pc0FycmF5KGFjdHVhbCkgfHwg
QXJyYXkuaXNBcnJheShleHBlY3RlZCkpCisgICAgICByZXR1cm4gc2hvdWxkQmVBcnJheUVxdWFs
KGFjdHVhbCwgZXhwZWN0ZWQpOworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9
YCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEhhdmVEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yKSB7CisgIGxldCBhY3R1YWwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgbGV0IG9yZGVyID0gT2JqZWN0Lmtl
eXMoZGVzY3JpcHRvcikuc29ydCgpOworICBmb3IgKGxldCBrZXkgb2Ygb3JkZXIpIHsKKyAgICBs
ZXQgdmFsdWUgPSBkZXNjcmlwdG9yW2tleV07CisgICAgaWYgKFsidW5kZWZpbmVkIiwgImJvb2xl
YW4iLCAibnVtYmVyIiwgInN0cmluZyIsICJzeW1ib2wiLCAiYmlnaW50Il0uaW5jbHVkZXModHlw
ZW9mIHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbCkgeworICAgICAgaWYgKGFjdHVhbFtrZXldICE9
PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3N1bW1hcml6ZUVs
ZW1lbnQoYWN0dWFsKX0ncyAnJHtrZXl9JyB0byBiZSAke3N1bW1hcml6ZUVsZW1lbnQodmFsdWUp
fSwgYnV0IGZvdW5kICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWxba2V5XSl9YCk7CisgICAgfSBl
bHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgIGlmIChhY3R1YWxb
a2V5XSAhPT0gdmFsdWUgJiYgU3RyaW5nKHZhbHVlKSAhPT0gU3RyaW5nKGFjdHVhbFtrZXldKSkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke3N1bW1hcml6ZUVsZW1lbnQoYWN0
dWFsKX0ncyAnJHtrZXl9JyB0byBiZSAke3N1bW1hcml6ZUVsZW1lbnQodmFsdWUpfSwgYnV0IGZv
dW5kICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWxba2V5XSl9YCk7CisgICAgfQorICB9Cit9CisK
K2Z1bmN0aW9uIHNob3VsZFRocm93KG9wLCBlcnJvckNvbnN0cnVjdG9yLCBkZXNjKSB7CisgICAg
dHJ5IHsKKyAgICAgICAgb3AoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmICghKGUg
aW5zdGFuY2VvZiBlcnJvckNvbnN0cnVjdG9yKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKGB0aHJldyAke2V9LCBidXQgc2hvdWxkIGhhdmUgdGhyb3duICR7ZXJyb3JDb25zdHJ1Y3Rv
ci5uYW1lfWApOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhyb3cg
bmV3IEVycm9yKGBFeHBlY3RlZCAke2Rlc2MgfHwgJ29wZXJhdGlvbid9IHRvIHRocm93ICR7ZXJy
b3JDb25zdHJ1Y3Rvci5uYW1lfSwgYnV0IG5vIGV4Y2VwdGlvbiB0aHJvd25gKTsKK30KKworbGV0
IHJlYWxtID0gbmV3IFNoYWRvd1JlYWxtOworCitsZXQgZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkg
PT4geworICBsZXQgdGVzdDEgPSBmdW5jdGlvbihhLCBiLCBjKSB7CisgIH07CisgIHJldHVybiB0
ZXN0MTsKK30pKClgKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAg
dmFsdWU6IDMsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUiLCB7
CisgIHZhbHVlOiAidGVzdDEiLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZh
bHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAo
KCkgPT4geworICBmdW5jdGlvbiB0ZXN0MihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBr
LCBsLCBtLCBuLCBvLCBwKSB7CisgIH0KKyAgcmV0dXJuIHRlc3QyOworfSkoKWApOworCitzaG91
bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMTYsCisgIHdyaXRhYmxl
OiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30p
Oworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUiLCB7CisgIHZhbHVlOiAidGVzdDIiLAor
ICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6
IHRydWUsCit9KTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQgZiA9IGZ1
bmN0aW9uKCkgeworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibGVuZ3RoIiwgewor
ICAgIHZhbHVlOiAtSW5maW5pdHksCisgICAgd3JpdGFibGU6IHRydWUsCisgICAgY29uZmlndXJh
YmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShmLCAibmFtZSIsIHsKKyAgICB2YWx1ZTogIjI3IiwKKyAgICB3cml0YWJsZTogdHJ1
ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsK
KyAgcmV0dXJuIGY7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgi
LCB7CisgIHZhbHVlOiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNl
LAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJu
YW1lIiwgeworICB2YWx1ZTogIjI3IiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxl
OiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CisKK2YgPSByZWFsbS5ldmFsdWF0
ZShgKCgpID0+IHsKKyAgbGV0IGYgPSBmdW5jdGlvbigpIHsKKyAgfQorICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoZiwgImxlbmd0aCIsIHsKKyAgICB2YWx1ZTogLTkuNzQsCisgICAgd3JpdGFibGU6
IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAg
fSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibmFtZSIsIHsKKyAgICB2YWx1ZTogNTcs
CisgICAgd3JpdGFibGU6IHRydWUsCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1l
cmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVybiBmOworfSkoKWApOworCitzaG91bGRIYXZlRGVz
Y3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMCwKKyAgd3JpdGFibGU6IGZhbHNlLAor
ICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRI
YXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICIiLAorICB3cml0YWJsZTogZmFs
c2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKKwor
bGV0IGlubmVyTG9nID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGdsb2JhbFRoaXMuX2xv
ZyA9IFtdOworICBnbG9iYWxUaGlzLmxvZyA9IGZ1bmN0aW9uIGxvZyhpdGVtKSB7CisgICAgZ2xv
YmFsVGhpcy5fbG9nLnB1c2goaXRlbSk7CisgIH07CisKKyAgcmV0dXJuIGZ1bmN0aW9uIGxvZygp
IHsKKyAgICBsZXQgbG9nID0gZ2xvYmFsVGhpcy5fbG9nOworICAgIGdsb2JhbFRoaXMuX2xvZyA9
IFtdOworICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShsb2cpOworICB9OworfSkoKWApOworCitm
dW5jdGlvbiBsb2coKSB7CisgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGlubmVyTG9nKCkpOwor
ICBzaG91bGRCZShBcnJheS5pc0FycmF5KHJlc3VsdCksIHRydWUpOworICByZXR1cm4gcmVzdWx0
OworfQorCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGxldCB0YXJnZXQgPSAoZnVu
Y3Rpb24oKSB7CisgICAgbG9nKFxgY2FsbGVkXGApOworICB9KTsKKyAgbGV0IHAgPSBuZXcgUHJv
eHkodGFyZ2V0LCB7CisgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHApIHsKKyAgICAg
IGxvZyhcYGdldE93blByb3BlcnR5RGVzY3JpcHRvciBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBS
ZWZsZWN0LmdldE93blByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBnZXQodCwg
cCkgeworICAgICAgbG9nKFxgZ2V0IFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBkZWZpbmVQcm9wZXJ0eSh0LCBwLCBvKSB7Cisg
ICAgICBsb2coXGBkZWZpbmVQcm9wZXJ0eSBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0
LmRlZmluZVByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBnZXRQcm90b3R5cGVP
Zih0KSB7CisgICAgICBsb2coXGBnZXRQcm90b3R5cGVPZlxgKTsKKyAgICAgIHJldHVybiBSZWZs
ZWN0LmdldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBzZXRQcm90b3R5
cGVPZih0LCB2KSB7CisgICAgICBsb2coXGBzZXRQcm90b3R5cGVPZlxgKTsKKyAgICAgIHJldHVy
biBSZWZsZWN0LnNldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBpc0V4
dGVuc2libGUodCkgeworICAgICAgbG9nKFxgaXNFeHRlbnNpYmxlXGApOworICAgICAgcmV0dXJu
IFJlZmxlY3QuaXNFeHRlbnNpYmxlKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBwcmV2ZW50
RXh0ZW5zaW9ucyh0KSB7CisgICAgICBsb2coXGBwcmV2ZW50RXh0ZW5zaW9uc1xgKTsKKyAgICAg
IHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3VtZW50cyk7CisgICAgfSwK
KyAgICBoYXModCwgcCkgeworICAgICAgbG9nKFxgaGFzIFwke3B9XGApOworICAgICAgcmV0dXJu
IFJlZmxlY3QuaGFzKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBzZXQodCwgcCwgdikgewor
ICAgICAgbG9nKFxgc2V0IFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KC4uLmFy
Z3VtZW50cyk7CisgICAgfSwKKyAgICBkZWxldGUodCwgcCkgeworICAgICAgbG9nKFxgZGVsZXRl
IFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlKC4uLmFyZ3VtZW50cyk7Cisg
ICAgfSwKKyAgICBvd25LZXlzKHQpIHsKKyAgICAgIGxvZyhcYG93bktleXNcYCk7CisgICAgICBy
ZXR1cm4gUmVmbGVjdC5vd25LZXlzKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBhcHBseSgp
IHsKKyAgICAgIGxvZyhcYGFwcGx5XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoLi4u
YXJndW1lbnRzKTsKKyAgICB9LAorICAgIGNvbnN0cnVjdCgpIHsKKyAgICAgIGxvZyhcYGNvbnN0
cnVjdFxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFyZ3VtZW50TGlzdCguLi5hcmd1bWVudHMp
OworICAgIH0sCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAibGVuZ3Ro
IiwgeworICAgIGdldCgpIHsKKyAgICAgIGxvZygibGVuZ3RoIGdldHRlciIpOworICAgICAgcmV0
dXJuIEluZmluaXR5OworICAgIH0sCisgICAgc2V0KCkgeworICAgICAgbG9nKCJsZW5ndGggc2V0
dGVyIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHRhcmdldCwgIm5hbWUiLCB7CisgICAgZ2V0KCkgeworICAgICAgbG9nKCJuYW1lIGdldHRlciIp
OworICAgICAgcmV0dXJuIEluZmluaXR5OworICAgIH0sCisgICAgc2V0KCkgeworICAgICAgbG9n
KCJuYW1lIHNldHRlciIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgY29uZmln
dXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVybiBwOwor
fSkoKWApOworCitmKCk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2
YWx1ZTogSW5maW5pdHksCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2Us
CisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5h
bWUiLCB7CisgIHZhbHVlOiAiIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBm
YWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRCZShsb2coKSwgWworICAi
Z2V0IGxlbmd0aCIsCisgICJsZW5ndGggZ2V0dGVyIiwKKyAgImdldCBuYW1lIiwKKyAgIm5hbWUg
Z2V0dGVyIiwKKyAgImFwcGx5IiwKKyAgImNhbGxlZCIKK10pOworZigpOworc2hvdWxkQmUobG9n
KCksIFsiYXBwbHkiLCAiY2FsbGVkIl0pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7
CisgIGxldCB0YXJnZXQgPSAoZnVuY3Rpb24oKSB7CisgICAgbG9nKFxgY2FsbGVkIDJcYCk7Cisg
IH0pOworICBsZXQgcCA9IG5ldyBQcm94eSh0YXJnZXQsIHsKKyAgICBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodCwgcCkgeworICAgICAgbG9nKFxgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIFwk
e3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHkoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICAgIGdldCh0LCBwKSB7CisgICAgICBsb2coXGBnZXQgXCR7cH1cYCk7Cisg
ICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGRlZmlu
ZVByb3BlcnR5KHQsIHAsIG8pIHsKKyAgICAgIGxvZyhcYGRlZmluZVByb3BlcnR5IFwke3B9XGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoLi4uYXJndW1lbnRzKTsKKyAg
ICB9LAorICAgIGdldFByb3RvdHlwZU9mKHQpIHsKKyAgICAgIGxvZyhcYGdldFByb3RvdHlwZU9m
XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoLi4uYXJndW1lbnRzKTsK
KyAgICB9LAorICAgIHNldFByb3RvdHlwZU9mKHQsIHYpIHsKKyAgICAgIGxvZyhcYHNldFByb3Rv
dHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YoLi4uYXJndW1l
bnRzKTsKKyAgICB9LAorICAgIGlzRXh0ZW5zaWJsZSh0KSB7CisgICAgICBsb2coXGBpc0V4dGVu
c2libGVcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICAgIHByZXZlbnRFeHRlbnNpb25zKHQpIHsKKyAgICAgIGxvZyhcYHByZXZl
bnRFeHRlbnNpb25zXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMo
Li4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGhhcyh0LCBwKSB7CisgICAgICBsb2coXGBoYXMg
XCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5oYXMoLi4uYXJndW1lbnRzKTsKKyAgICB9
LAorICAgIHNldCh0LCBwLCB2KSB7CisgICAgICBsb2coXGBzZXQgXCR7cH1cYCk7CisgICAgICBy
ZXR1cm4gUmVmbGVjdC5zZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGRlbGV0ZSh0LCBw
KSB7CisgICAgICBsb2coXGBkZWxldGUgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5k
ZWxldGUoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIG93bktleXModCkgeworICAgICAgbG9n
KFxgb3duS2V5c1xgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICAgIGFwcGx5KCkgeworICAgICAgbG9nKFxgYXBwbHlcYCk7CisgICAgICBy
ZXR1cm4gUmVmbGVjdC5hcHBseSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgY29uc3RydWN0
KCkgeworICAgICAgbG9nKFxgY29uc3RydWN0XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuYXJn
dW1lbnRMaXN0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0YXJnZXQsICJsZW5ndGgiLCB7CisgICAgZ2V0KCkgeyByZXR1cm4gfSwKKyAgICBj
b25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHRhcmdldCwgIm5hbWUiLCB7CisgICAgdmFsdWU6IDU3LAorICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1cm4g
cDsKK30pKClgKTsKKworZigpOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsK
KyAgdmFsdWU6IDAsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUi
LCB7CisgIHZhbHVlOiAiIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxz
ZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRCZShsb2coKSwgWworICAiZ2V0
IGxlbmd0aCIsCisgICJnZXQgbmFtZSIsCisgICJhcHBseSIsCisgICJjYWxsZWQgMiIKK10pOwor
ZigpOworc2hvdWxkQmUobG9nKCksIFsiYXBwbHkiLCAiY2FsbGVkIDIiXSk7CisKK3Nob3VsZEhh
dmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVy
YWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2Ny
aXB0b3IoZiwgIm5hbWUiLCB7CisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFs
c2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450467</attachid>
            <date>2022-01-31 14:35:13 -0800</date>
            <delta_ts>2022-02-04 11:28:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235382-20220131223512.patch</filename>
            <type>text/plain</type>
            <size>83167</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTllM2FlNjZjOWYwYjNiYTcyY2Y0Yjg3MWZlNGVhMzNiYTliNmIzLi4wZGNmZjQyNWU1YzNjZDE2
NTJmOTM5MTM1NDg4NTA0MmYxYmIwNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAyMi0wMS0zMSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDEt
MzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVs
YW5kIFN0cnVjdHVyZUlEIG92ZXJoYXVsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggNzg4Mzc3ZjY3MTM5OWExM2IwYjUxNTMxZTBjMjljMjQ3NDNkYjgyMS4uMjc3N2JlOTlh
ZDFiN2MwOWQyYjZjOTUwMjI3ZGFjM2UxNzNiY2JkYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTA4Myw2ICsxMDgzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmgK
ICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCiAgICAgcnVudGltZS9KU1By
b3h5LmgKKyAgICBydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaAogICAgIHJ1bnRpbWUvSlNSdW5M
b29wVGltZXIuaAogICAgIHJ1bnRpbWUvSlNTY29wZS5oCiAgICAgcnVudGltZS9KU1NjcmlwdEZl
dGNoUGFyYW1ldGVycy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRmZjI5N2Qz
ZTNhZDgxNDkwNzQ1MWNmNmYwMGIyMWY2N2VkNmE2MzkuLjU4OGViZGNiODRmYzlhZTJhYmQyYTIy
M2MzZDcxZGI0OTdhNDJmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTMz
LDYgKzExMzMsNyBAQAogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5j
dGlvbkFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTNGQTJBRTExQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50UHJvdG90eXBl
TG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGQTJBRTAxQ0YzN0YzRjAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMy
ODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI0MDMyN0Uy
Nzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1QjcwQ0ZERTFEQjY5RTY2MDBFQzIzRjkg
LyogSlNBc3luY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QjcwQ0ZEODFEQjY5RTVDMDBFQzIzRjkgLyogSlNBc3luY0Z1bmN0aW9uLmgg
Ki87IH07CiAJCTVCNzBDRkUwMURCNjlFNjYwMEVDMjNGOSAvKiBBc3luY0Z1bmN0aW9uUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qjcw
Q0ZEQTFEQjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovOyB9Owog
CQk1QjcwQ0ZFMjFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjcwQ0ZEQzFE
QjY5RTVDMDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvbkNvbnN0cnVjdG9yLmggKi87IH07CkBAIC00
MDg0LDYgKzQwODUsOCBAQAogCQk1M0ZBMkFFMjFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90
b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQxMUQ3
QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGRDA0RDIxRDdBQjE4NzAwMzI4N0QzIC8qIFdhc21D
YWxsaW5nQ29udmVudGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
Q2FsbGluZ0NvbnZlbnRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMy
N0UyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSZW1vdGVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjQwMzI3
RjI3OThEMUZEMDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1JlbW90ZUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FzeW5jRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNUI3MENGRDkxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FzeW5jRnVuY3Rp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QjcwQ0ZEQTFEQjY5RTVDMDBF
QzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3luY0Z1bmN0aW9uUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC03MzI0LDkgKzczMjcsNiBAQAogCQk3Qjk4RDEzMzFCNjBDRDFFMDAyM0IxQTQg
Lyogd2FzbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oICovLAotCQkJCTM3
QUFDMDkwMjc5RjEyNDEwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNTZWN0aW9uUGFyc2VyLmNw
cCAqLywKLQkJCQkzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2FzbUJyYW5jaEhpbnRzU2Vj
dGlvblBhcnNlci5oICovLAogCQkJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLywK
IAkJCQk1Mjg0N0FEOTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmNwcCAq
LywKIAkJCQk1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmgg
Ki8sCkBAIC03MzM2LDYgKzczMzYsOSBAQAogCQkJCTUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAv
KiBXYXNtQkJRUGxhbi5oICovLAogCQkJCUFENEIxREY3MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNt
QmluZGluZy5jcHAgKi8sCiAJCQkJQUQ0QjFERjgxREYyNDRENzAwNzFBRTMyIC8qIFdhc21CaW5k
aW5nLmggKi8sCisJCQkJMzdBQUMwOTEyNzlGMTI0MjAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50
cy5oICovLAorCQkJCTM3QUFDMDkwMjc5RjEyNDEwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHNT
ZWN0aW9uUGFyc2VyLmNwcCAqLywKKwkJCQkzN0FBQzA5MjI3OUYxMjQyMDBENjQ4NDIgLyogV2Fz
bUJyYW5jaEhpbnRzU2VjdGlvblBhcnNlci5oICovLAogCQkJCTUyNUMwREQ3MUU5MzU4NDcwMDIx
ODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLywKIAkJCQk1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0Qg
LyogV2FzbUNhbGxlZS5oICovLAogCQkJCTUyNkFDNEI0MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNt
Q2FsbGVlR3JvdXAuY3BwICovLApAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5
NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYy
NTUzQ0UxNjEzNkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYx
MzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3
OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYz
NzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEy
QUMxIC8qIEpTUnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJB
QzEgLyogSlNSdW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgKi8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYx
QkRBMDhFRjAwMzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1By
b3h5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNS
ZW1vdGVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5
NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYz
ODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xMDk3Myw3ICsxMDk3OSw2IEBACiAJCQkJMEZFMDUwMjkxQUE5MDk1NjAwRDMzQjMzIC8qIFNj
b3BlZEFyZ3VtZW50c1RhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAyQjFBQTkwOTU2
MDBEMzNCMzMgLyogU2NvcGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUyMTdF
RTI3NDkwMEFCQjIxNyAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTM3QUFDMDk0Mjc5RjFDMDUwMEQ2NDg0MiAvKiBXYXNtQnJhbmNoSGludHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMzMTExQjhCMjM5NzI1NjUwMEFBMzRDRSAvKiBTY3JpYmJsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNjgxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNkUxODlCMDBBQTAwNjMzMjMxIC8qIFNj
cmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTEwMyw3ICsxMTEwOCw2IEBACiAJ
CQkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9y
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzdBQUMwOTMyNzlGMUJGQzAwRDY0ODQyIC8qIFdhc21C
cmFuY2hIaW50c1NlY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTU5ODk4MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyRDRERTkxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMTE2MCw2ICsxMTE2NCw4IEBACiAJCQkJNTNGNDBFOTMxRDVBNEFCMzAw
OTlBMUI2IC8qIFdhc21CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0NBNzMw
QTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUFE
NEIxREZBMURGMjQ0RTIwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMzdBQUMwOTQyNzlGMUMwNTAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzdBQUMwOTMyNzlGMUJGQzAwRDY0ODQyIC8qIFdhc21CcmFuY2hIaW50c1Nl
Y3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNUMwRERBMUU5MzU4NDcwMDIxODRD
RCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjZBQzRCNzFFOTc3QzVEMDAz
NTAwRTEgLyogV2FzbUNhbGxlZUdyb3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0ZCODUzQTIy
RjM2NjdCMDA4RjkwRUQgLyogV2FzbUNhbGxlZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3MDBjN2JhOTYyZDUwMDI3ZmJjNjY0OGI5NWY1
MDI3NmUwZTZiNzdiLi4zYTk1YzU4YjNkOTliOWJjZTgzMmMwMTc1ODJkZjk1ODRkOGVjYThhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC05MDIsNiArOTAyLDcgQEAgcnVudGltZS9K
U1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKIHJ1bnRpbWUvSlNQcm9taXNlUHJvdG90eXBlLmNwcAog
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCiBydW50aW1lL0pTUHJveHkuY3Bw
CitydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCiBydW50aW1lL0pTUnVuTG9vcFRpbWVyLmNw
cAogcnVudGltZS9KU1Njb3BlLmNwcAogcnVudGltZS9KU1NjcmlwdEZldGNoZXIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCmluZGV4IDI4NWRmMGQx
YTE4MDlkYjIwYjQ3OTRjZDMxMjA1OWVmYzZlZTAwZTAuLjE4NWFhMzFmNjFkOTA0NzVjOTdhZjBh
MWJiMjYzZjdiMGE5YWZhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2KERGR1RodW5rKSBc
CiAgICAgdihGVExUaHVuaykgXAogICAgIHYoQm91bmRGdW5jdGlvblRodW5rKSBcCisgICAgdihS
ZW1vdGVGdW5jdGlvblRodW5rKSBcCiAgICAgdihTcGVjaWFsaXplZFRodW5rKSBcCiAgICAgdihW
aXJ0dWFsVGh1bmspIFwKICAgICB2KFdhc21UaHVuaykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IDgwYTg3ZWIwMDdhOWQzOGM3MTU0Mjg5
NjU4Zjg4MTM4NDZiYzg4OGQuLmEwNTI1NzQ4NzZmYTE0OGFjOTgzYmM0MTcxZjQxNTVhNzBkM2Yw
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgK
QEAgLTE4OSw2ICsxODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvdXRPZkxpbmVS
ZWFjdGlvbkNvdW50cykgXAogICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikg
XAogICAgIG1hY3JvKHNlbnRpbmVsU3RyaW5nKSBcCisgICAgbWFjcm8oY3JlYXRlUmVtb3RlRnVu
Y3Rpb24pIFwKKyAgICBtYWNybyhpc1JlbW90ZUZ1bmN0aW9uKSBcCiAKIAogbmFtZXNwYWNlIFN5
bWJvbHMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRv
d1JlYWxtUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRv
d1JlYWxtUHJvdG90eXBlLmpzCmluZGV4IDhkODkwNjg4ZDdhN2QxNzNhZmRiZjRmMDEyODE1M2E2
YmU5YTRjNGIuLmEyYjQxMGIzNjdmNGZjOTI4NTc2ZDE4ZjdlN2YzNzhiNDNlZmJjMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90
b3R5cGUuanMKQEAgLTMyLDM5ICszMiw3IEBAIGZ1bmN0aW9uIHdyYXAoZnJvbVNoYWRvd1JlYWxt
LCBzaGFkb3dSZWFsbSwgdGFyZ2V0KQogICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIGlmIChAaXND
YWxsYWJsZSh0YXJnZXQpKSB7Ci0gICAgICAgIHZhciB3cmFwcGVkID0gZnVuY3Rpb24oLyogYXJn
cy4uLiAqLykgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0g
ICAgICAgICAgICB2YXIgd3JhcHBlZEFyZ3MgPSBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwot
ICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkK
LSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIGFyZ3VtZW50cywgd2UgZmxpcCBgZnJv
bVNoYWRvd1JlYWxtYCBzaW5jZSB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAgYSBmdW5jdGlv
biBmcm9tIHJlYWxtIEEgdG8gd29yayBpbiByZWFsbSBCLCB3ZSBuZWVkIHRvCi0gICAgICAgICAg
ICAgICAgLy8gd3JhcCB0aGUgYXJndW1lbnRzIChmcm9tIHJlYWxtIEIpIHRvIHdvcmsgaW4gcmVh
bG0gQSBiZWZvcmUKLSAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSB3cmFwcGVkIGZ1bmN0
aW9uCi0gICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHdyYXBwZWRBcmdzLCBpbmRleCwg
QHdyYXAoIWZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0sIGFyZ3VtZW50c1tpbmRleF0pKTsK
LQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0
LkBhcHBseShAdW5kZWZpbmVkLCB3cmFwcGVkQXJncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gIndyYXBwZWQgZnVuY3Rpb24gdGhyZXc6
ICIgKyBlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyb21TaGFkb3dSZWFsbSkK
LSAgICAgICAgICAgICAgICAgICAgQHRocm93VHlwZUVycm9yKG1zZyk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1rVHlwZUVycm9yID0gQGV2YWxJ
blJlYWxtKHNoYWRvd1JlYWxtLCAiKG1zZykgPT4gbmV3IFR5cGVFcnJvcihtc2cpIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG1rVHlwZUVycm9yLkBhcHBseShtc2cpOwotICAg
ICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIEB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVh
bG0sIHJlc3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWyduYW1lJ107
Ci0gICAgICAgIGRlbGV0ZSB3cmFwcGVkWydsZW5ndGgnXTsKLQotICAgICAgICAvLyBCZWNhdXNl
IHRoaXMgZnVuY3Rpb24gKHdyYXApIHdpbGwgcnVuIHdpdGggdGhlIGluY3ViYXRpbmcgcmVhbG0K
LSAgICAgICAgLy8gYWN0aXZlLCB3ZSBvbmx5IG5lZWQgdG8gZml4IHRoZSBwcm90b3R5cGUgb24g
YHdyYXBwZWRgIGlmIHdlIGFyZQotICAgICAgICAvLyBtb3ZpbmcgdGhlIGZ1bmN0aW9uIGZyb20g
dGhlIGluY3ViYXRpbmcgcmVhbG0gdG8gdGhlIHNoYWRvdyByZWFsbQotICAgICAgICBpZiAoIWZy
b21TaGFkb3dSZWFsbSkKLSAgICAgICAgICAgIEBtb3ZlRnVuY3Rpb25Ub1JlYWxtKHdyYXBwZWQs
IHNoYWRvd1JlYWxtKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZWQ7CisgICAgICAgIHJldHVybiBA
Y3JlYXRlUmVtb3RlRnVuY3Rpb24odGFyZ2V0LCBmcm9tU2hhZG93UmVhbG0gPyBudWxsIDogc2hh
ZG93UmVhbG0pOwogICAgIH0gZWxzZSBpZiAoQGlzT2JqZWN0KHRhcmdldCkpIHsKICAgICAgICAg
QHRocm93VHlwZUVycm9yKCJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2Fs
bGFibGUgb3IgcHJpbWl0aXZlIik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZTY2ZThmZGIxNmFmMGY2ODlmMGFi
ZWE0ODBhZWNiNDUyYWM4YjlmMS4uZGY5OTQyZjIxMjUzYjA4MjZkM2E3ZDkwMDQ4OGY2ZGNiZGQy
NzlkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1l
Q29uc3RhbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVD
b25zdGFudC5oCkBAIC0xMTcsNiArMTE3LDggQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAg
dihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBcCiAgICAgdihlbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKICAgICB2KHNlbnRpbmVsU3RyaW5nLCBudWxscHRyKSBc
CisgICAgdihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgbnVsbHB0cikgXAorICAgIHYoaXNSZW1vdGVG
dW5jdGlvbiwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9MSU5LX1RJTUVfQ09OU1RB
TlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXgg
MzUzZmYwZGU4ZTc0N2I4NjliOGE1MTIzMDE1NTljNmIwOWVhNmNlMy4uNjI2YTBmMmNhYzk0Yjhk
OWY0NjI2NWU2Y2U1NmJlMjk1MmQ2NTdiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKSVRTdHViUm91dGluZVNldC5oIgogI2lu
Y2x1ZGUgIkpJVFdvcmtsaXN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAi
SlNXZWFrT2JqZWN0UmVmLmgiCkBAIC0zMjE3LDYgKzMyMTgsNyBAQCBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cobW9kdWxlTmFtZXNwYWNlT2JqZWN0U3BhY2UsIG1vZHVs
ZU5hbWVzcAogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG5hdGl2ZVN0
ZEZ1bmN0aW9uU3BhY2UsIG5hdGl2ZVN0ZEZ1bmN0aW9uSGVhcENlbGxUeXBlLCBKU05hdGl2ZVN0
ZEZ1bmN0aW9uKSAvLyBIYXNoOjB4NzBlZDYxZTQKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklO
RV9NRU1CRVJfU0xPVyhwcm94eU9iamVjdFNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eU9i
amVjdCkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhwcm94eVJldm9r
ZVNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLCBQcm94eVJldm9rZSkgLy8gSGFzaDoweGI1MDZhOTM5
CitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocmVtb3RlRnVuY3Rpb25T
cGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgSlNSZW1vdGVGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NV
QlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY29wZWRBcmd1bWVudHNUYWJsZVNwYWNlLCBkZXN0
cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBTY29wZWRBcmd1bWVudHNUYWJsZSkKIERZTkFNSUNf
SVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFj
ZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMp
CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hlclNw
YWNlLCBkZXN0cnVjdGlibGVDZWxsSGVhcENlbGxUeXBlLCBKU1NjcmlwdEZldGNoZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggMzdmYTNmMTEzY2U4YjViNTRiMjRlMmE4NzQ0MTY4
NzQxMDUxMmM3NS4uM2NkMDY5NjViODg0ZDVhYWQ3OGY5NjkxMTgyNGMzZmQwOGNkMmQ5NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtOTE5LDYgKzkxOSw3IEBAIHB1YmxpYzoKICAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9uU3Bh
Y2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVjdFNw
YWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZva2VT
cGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1bmN0
aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29wZWRB
cmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCA0OTFlYTQ1MjdmZGY2NmIy
YjFiYzMxZDY5ZjU1NWU3ZTVmZjNlNjc3Li4zYTYyNzk4MGM1ZDFmOGFlZmIyNGI2OGJkMmE5NGY1
NzU5NGM0MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJK
U01vZHVsZVJlY29yZC5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJMTEludFRodW5rcy5oIgpAQCAtNTU1LDEyICs1NTYsMTMgQEAgQ2F0Y2hJbmZvOjpDYXRj
aEluZm8oY29uc3QgV2FzbTo6SGFuZGxlckluZm8qIGhhbmRsZXIsIGNvbnN0IFdhc206OkNhbGxl
ZSogY2FsbGUKIAogY2xhc3MgVW53aW5kRnVuY3RvciB7CiBwdWJsaWM6Ci0gICAgVW53aW5kRnVu
Y3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBK
U1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFu
ZGxlcikKKyAgICBVbndpbmRGdW5jdG9yKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBi
b29sIGlzVGVybWluYXRpb24sIEpTVmFsdWUgdGhyb3duVmFsdWUsIENvZGVCbG9jayomIGNvZGVC
bG9jaywgQ2F0Y2hJbmZvJiBoYW5kbGVyLCBib29sJiBzZWVuUmVtb3RlRnVjbmN0aW9uKQogICAg
ICAgICA6IG1fdm0odm0pCiAgICAgICAgICwgbV9jYWxsRnJhbWUoY2FsbEZyYW1lKQogICAgICAg
ICAsIG1faXNUZXJtaW5hdGlvbihpc1Rlcm1pbmF0aW9uKQogICAgICAgICAsIG1fY29kZUJsb2Nr
KGNvZGVCbG9jaykKICAgICAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgLCBtX3Nl
ZW5SZW1vdGVGdW5jdGlvbihzZWVuUmVtb3RlRnVjbmN0aW9uKQogICAgIHsKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCiAgICAgICAgIGlmICghbV9pc1Rlcm1pbmF0aW9uKSB7CkBAIC02MDksNiAr
NjExLDEzIEBAIHB1YmxpYzoKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgaWYgKCFtX2Nh
bGxGcmFtZS0+aXNXYXNtRnJhbWUoKSAmJiAgSlNDOjppc1JlbW90ZUZ1bmN0aW9uKG1fdm0sIG1f
Y2FsbEZyYW1lLT5qc0NhbGxlZSgpKSAmJiAhbV9pc1Rlcm1pbmF0aW9uKSB7CisgICAgICAgICAg
ICAvLyBDb250aW51ZSBzZWFyY2hpbmcgZm9yIGEgaGFuZGxlciwgYnV0IG1hcmsgdGhhdCBhIG1h
cnNoYWxsaW5nIGZ1bmN0aW9uIHdhcyBvbiB0aGUgc3RhY2sgc28gdGhhdCB3ZSBjYW4KKyAgICAg
ICAgICAgIC8vIHRyYW5zbGF0ZSB0aGUgZXhjZXB0aW9uIGJlZm9yZSBqdW1waW5nIHRvIHRoZSBo
YW5kbGVyLgorICAgICAgICAgICAgY29uc3RfY2FzdDxVbndpbmRGdW5jdG9yKj4odGhpcyktPm1f
c2VlblJlbW90ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0
b3I6OkNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2lu
ZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CkBAIC02NTcsOCArNjY2LDM5IEBAIHBy
aXZhdGU6CiAgICAgY29uc3QgV2FzbTo6VGFnKiBtX3dhc21UYWcgeyBudWxscHRyIH07CiAgICAg
Ym9vbCBtX2NhdGNoYWJsZUZyb21XYXNtIHsgZmFsc2UgfTsKICNlbmRpZgorCisgICAgYm9vbCYg
bV9zZWVuUmVtb3RlRnVuY3Rpb247CiB9OwogCisvLyBSZXBsYWNlIGFuIGV4Y2VwdGlvbiB3aGlj
aCBwYXNzZXMgYWNyb3NzIGEgbWFyc2hhbGxpbmcgYm91bmRhcnkgd2l0aCBhIFR5cGVFcnJvciBm
b3IgaXRzIGhhbmRsZXIncyBnbG9iYWwgb2JqZWN0Lgorc3RhdGljIHZvaWQgc2FuaXRpemVSZW1v
dGVGdW5jdGlvbkV4Y2VwdGlvbihWTSYgdm0sIENhbGxGcmFtZSogaGFuZGxlckNhbGxGcmFtZSwg
RXhjZXB0aW9uKiBleGNlcHRpb24pCit7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCF2bS5pc1Rl
cm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGhhbmRsZXJDYWxsRnJhbWUtPmpzQ2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
OworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZhbHVlKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIC8vIEF2b2lkIHVzZXItb2JzZXJ2YWJsZSBU
b1N0cmluZygpCisgICAgU3RyaW5nIGV4Y2VwdGlvblN0cmluZzsKKyAgICBpZiAoZXhjZXB0aW9u
VmFsdWUuaXNQcmltaXRpdmUoKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5nID0gZXhjZXB0aW9u
VmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBlbHNlIGlmIChleGNlcHRpb25W
YWx1ZS5hc0NlbGwoKS0+aW5oZXJpdHM8RXJyb3JJbnN0YW5jZT4odm0pKQorICAgICAgICBleGNl
cHRpb25TdHJpbmcgPSBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uVmFsdWUu
YXNDZWxsKCkpLT5zYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKGdsb2JhbE9iamVjdCk7CisKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gV2UgbXVzdCBub3QgaGF2ZSBlbnRlcmVkIEpT
IGF0IHRoaXMgcG9pbnQKKworICAgIGlmIChleGNlcHRpb25TdHJpbmcubGVuZ3RoKCkpIHsKKyAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25TdHJp
bmcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGhyb3dWTVR5cGVFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlKTsKK30KKwogTkVWRVJfSU5MSU5FIENhdGNoSW5mbyBJbnRlcnByZXRl
cjo6dW53aW5kKFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2Vw
dGlvbikKIHsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CkBAIC02
NzgsOCArNzE4LDEzIEBAIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2lu
ZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0CiAKICAgICAvLyBDYWxjdWxh
dGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBDLCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVj
ZXNzYXJ5LgogICAgIENhdGNoSW5mbyBjYXRjaEluZm87Ci0gICAgVW53aW5kRnVuY3RvciBmdW5j
dG9yKHZtLCBjYWxsRnJhbWUsIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSwg
ZXhjZXB0aW9uVmFsdWUsIGNvZGVCbG9jaywgY2F0Y2hJbmZvKTsKKyAgICBib29sIHNlZW5SZW1v
dGVGdW5jdGlvbiA9IGZhbHNlOworICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2FsbEZy
YW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZhbHVl
LCBjb2RlQmxvY2ssIGNhdGNoSW5mbywgc2VlblJlbW90ZUZ1bmN0aW9uKTsKICAgICBTdGFja1Zp
c2l0b3I6OnZpc2l0PFN0YWNrVmlzaXRvcjo6VGVybWluYXRlSWZUb3BFbnRyeUZyYW1lSXNFbXB0
eT4oY2FsbEZyYW1lLCB2bSwgZnVuY3Rvcik7CisKKyAgICBpZiAoc2VlblJlbW90ZUZ1bmN0aW9u
KQorICAgICAgICBzYW5pdGl6ZVJlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKHZtLCBjYWxsRnJhbWUs
IGV4Y2VwdGlvbik7CisKICAgICBpZiAodm0uaGFzQ2hlY2twb2ludE9TUlNpZGVTdGF0ZSgpKQog
ICAgICAgICB2bS5wb3BBbGxDaGVja3BvaW50T1NSU2lkZVN0YXRlVW50aWwoY2FsbEZyYW1lKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggNzdh
NGUwM2RkMTIyNzc3NzM4ZDUwZGNhMTJmYjA4ZGI4NTUyZjViNy4uYmRjZTczNGJhZWQ5N2FmODc5
ZDc1NGIyY2E5MDk3YzFhNDlmNGFmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCkBAIC0xMzQ1LDYgKzEzNDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBq
aXRBc3NlcnRJc051bGwoR1BSUmVnKTsKICAgICB2b2lkIGppdEFzc2VydFRhZ3NJblBsYWNlKCk7
CiAgICAgdm9pZCBqaXRBc3NlcnRBcmd1bWVudENvdW50U2FuZSgpOworICAgIGlubGluZSB2b2lk
IGppdEFzc2VydE5vRXhjZXB0aW9uKFZNJiB2bSkgeyBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRp
b24odm0pOyB9CiAjZWxzZQogICAgIHZvaWQgaml0QXNzZXJ0SXNJbnQzMihHUFJSZWcpIHsgfQog
ICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMyKEdQUlJlZykgeyB9CkBAIC0xMzU1LDYgKzEzNTYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBqaXRBc3NlcnRJc051bGwoR1BSUmVnKSB7IH0KICAgICB2
b2lkIGppdEFzc2VydFRhZ3NJblBsYWNlKCkgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRBcmd1bWVu
dENvdW50U2FuZSgpIHsgfQorICAgIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mKSB7IH0K
ICNlbmRpZgogCiAgICAgdm9pZCBqaXRSZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oVk0mKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDFkZDdiNzNj
NjE2Nzk2MjdmMzAyZDkxNDIyZjViYzM3ZjIxNGU0YjAuLmI3MTc3NTI0OGQwZWEyYTliYjA1MTU5
YjVmMDgyZWJhMWI4ZTFkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCkBAIC0xMTUsNiArMTE2LDg3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywg
dm9pZCwgKEpTR2xvCiAgICAgQVNTRVJUKHZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKIH0K
IAorc3RhdGljIEpTVmFsdWUgZ2V0V3JhcHBlZFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB2YWx1ZSk7CisKKyAgICBpZiAodmFsdWUu
aXNDYWxsYWJsZSh2bSkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNSZW1v
dGVGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEpT
T2JqZWN0Kj4odmFsdWUuYXNDZWxsKCkpKSk7CisKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxh
YmxlIG9yIHByaW1pdGl2ZSIpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qIGNhbGxlZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2Fs
bGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAg
SklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUp
OworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZtLCBjYWxsZWUpKTsKKworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiB0
YXJnZXRHbG9iYWxPYmplY3QgPSBjYWxsZWUtPnRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVj
dCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGdldFdy
YXBwZWRWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVG
dW5jdGlvbiogY2FsbGVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVu
Y3Rpb24odm0sIGNhbGxlZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
Z2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblRocm93UmVtb3RlRnVuY3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1v
dGVGdW5jdGlvbiogY2FsbGVlKSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZtLCBjYWxsZWUpKTsKKworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBFeGNlcHRpb24qIGV4
Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworCisgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUg
aGVyZSB3aGVuICJyZXRocm93aW5nIiBhbiBleGNlcHRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb24pOworCisgICAgaWYgKFVOTElLRUxZKHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24o
ZXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGNlcHRpb24tPnZh
bHVlKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgIFN0cmluZyBleGNlcHRp
b25TdHJpbmcgPSBleGNlcHRpb25WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAg
IEV4Y2VwdGlvbiogdG9TdHJpbmdFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBp
ZiAoVU5MSUtFTFkodG9TdHJpbmdFeGNlcHRpb24gJiYgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlv
bih0b1N0cmluZ0V4Y2VwdGlvbikpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAg
IGlmIChleGNlcHRpb25TdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGV4Y2VwdGlvblN0cmluZyk7CisKKyAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKK30KKwogSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwg
dm9pZCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKaW5kZXggNGI1ZDAxMWY5MDZhMzAzMmUyYTViODUwYTNhMGI5YTRjNjgzNGJmMy4uZDVlOWY1
YzcwNWE1ODkzOTA3MTFiYWY3MzcwYjAwNGIyNjFmZGI4NCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgSlNGdW5jdGlv
bjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgSlNMZXhpY2FsRW52aXJvbm1lbnQ7CiBj
bGFzcyBKU09iamVjdDsKK2NsYXNzIEpTUmVtb3RlRnVuY3Rpb247CiBjbGFzcyBKU1Njb3BlOwog
Y2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBKU1ZhbHVlOwpAQCAtMTU1LDYgKzE1Niw5IEBAIEpTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21D
YWxsZXJGcmFtZSwgdm9pZCwKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVk1I
YW5kbGVFeGNlcHRpb24sIHZvaWQsIChWTSopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChKU0dsb2Jh
bE9iamVjdCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVy
YXRvclJlc3VsdElzTm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqKSk7CitKU0NfREVD
TEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5j
b2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yVGFyZ2V0LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1ZSkpOworSlND
X0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1JlbW90ZUZ1bmN0aW9uRXhjZXB0
aW9uLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qKSk7CiAKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IsIHZvaWQsIChD
b2RlQmxvY2sqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNhbGxBcml0
eUNoZWNrLCBpbnQzMl90LCAoSlNHbG9iYWxPYmplY3QqKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggYzY1NzFhNmNiNTdlODI0ZGNjOWUx
Y2EyMzVlNGRiZGVhMzA5MzNiMC4uYWU5NDNiOTc3OTg5ODhlNjhhYmU0ZTQxOWIzYzA4NDA4NWI4
YTQzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKSVRUaHVua3MuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJN
YXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1
bmtKSVQuaCIKQEAgLTE0MjIsNiArMTQyMywxOTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiAgICAgICAg
IGxpbmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5k
IGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1
ZSgpOworCisgICAgLy8gU2V0IHVwIG91ciBjYWxsIGZyYW1lLgorICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIENDYWxsSGVscGVyczo6YWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKyAgICBqaXQuc3RvcmUzMihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigwKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKworICAgIHVuc2lnbmVkIGV4dHJhU3Rh
Y2tOZWVkZWQgPSAwOworICAgIGlmICh1bnNpZ25lZCBzdGFja01pc2FsaWdubWVudCA9IHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSAlIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSkKKyAgICAgICAgZXh0
cmFTdGFja05lZWRlZCA9IHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIHN0YWNrTWlzYWxpZ25tZW50
OworCisgICAgLy8gV2UgbmVlZCB0byBmb3J3YXJkIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRoYXQg
d2Ugd2VyZSBwYXNzZWQuIFdlIGFyZW4ndCBhbGxvd2VkIHRvIGRvIGEgdGFpbAorICAgIC8vIGNh
bGwgaGVyZSBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gQXQgbGVhc3Qgbm90IHNvIGxvbmcgYXMgdGhl
IGdlbmVyaWMgcGF0aCBkb2Vzbid0IGRvIGEgdGFpbAorICAgIC8vIGNhbGwsIHNpbmNlIHRoYXQg
d291bGQgYmUgd2F5IHRvbyB3ZWlyZC4KKworICAgIC8vIFRoZSBmb3JtdWxhIGZvciB0aGUgbnVt
YmVyIG9mIHN0YWNrIGJ5dGVzIG5lZWRlZCBnaXZlbiBzb21lIG51bWJlciBvZiBwYXJhbWV0ZXJz
IChpbmNsdWRpbmcKKyAgICAvLyB0aGlzKSBpczoKKyAgICAvLworICAgIC8vICAgICBzdGFja0Fs
aWduKChudW1QYXJhbXMgKyBudW1GcmFtZUxvY2FscyArIENhbGxGcmFtZUhlYWRlclNpemUpICog
c2l6ZW9mKFJlZ2lzdGVyKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkKKyAgICAvLworICAg
IC8vIFByb2JhYmx5IHdlIHdhbnQgdG8gd3JpdGUgdGhpcyBhczoKKyAgICAvLworICAgIC8vICAg
ICBzdGFja0FsaWduKChudW1QYXJhbXMgKyBudW1GcmFtZUxvY2FscyArIChDYWxsRnJhbWVIZWFk
ZXJTaXplIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemUpKSAqIHNpemVvZihSZWdpc3RlcikpCisgICAg
c3RhdGljIGNvbnN0ZXhwciBpbnQgbnVtRnJhbWVMb2NhbHMgPSAxOworICAgIFZpcnR1YWxSZWdp
c3RlciBsb29wSW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKTsKKworICAgIGppdC5s
b2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIGppdC5sb2FkMzIoQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgR1BSSW5mbzo6cmVn
VDEpOworCisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzIC0gQ2FsbGVyRnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0
ZXJzICsgbnVtRnJhbWVMb2NhbHMpLCBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIpOwor
ICAgIGppdC5sc2hpZnQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigzKSwgR1BSSW5mbzo6
cmVnVDIpOworICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0Fs
aWdubWVudEJ5dGVzKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hbmQzMihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgR1BSSW5mbzo6
cmVnVDIpOworCisgICAgaWYgKGV4dHJhU3RhY2tOZWVkZWQpCisgICAgICAgIGppdC5hZGQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYVN0YWNrTmVlZGVkKSwgR1BSSW5mbzo6cmVn
VDIpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCByZWdUMSBoYXMgdGhlIGFjdHVhbCBhcmd1bWVu
dCBjb3VudCwgYW5kIHJlZ1QyIGhhcyB0aGUgYW1vdW50IG9mIHN0YWNrIHdlIHdpbGwgbmVlZC4K
KyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBlbm91Z2ggc3RhY2sgc3BhY2UuCisKKyAg
ICBqaXQubmVnUHRyKEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgaGF2ZVN0YWNrU3BhY2UgPSBqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVs
b3dPckVxdWFsLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyh2bS5hZGRyZXNzT2ZTb2Z0
U3RhY2tMaW1pdCgpKSwgR1BSSW5mbzo6cmVnVDIpOworCisgICAgLy8gVGhyb3cgU3RhY2sgT3Zl
cmZsb3cgZXhjZXB0aW9uCisgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLnRvcEVudHJ5RnJhbWUpOworICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNCb3VuZEZ1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVj
bHR5cGUob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspPihHUFJJbmZv
OjpyZWdUMyk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmspKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9u
QXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdH
UFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZt
KTsKKworICAgIGhhdmVTdGFja1NwYWNlLmxpbmsoJmppdCk7CisgICAgaml0Lm1vdmUoR1BSSW5m
bzo6cmVnVDIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8g
U2V0IGB0aGlzYCB0byB1bmRlZmluZWQKKyAgICAvLyBOT1RFOiBuZWVkcyBjb25jZW5zdXMgaW4g
VEMzOSAoaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vaXNzdWVz
LzMyOCkKKyAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQ0NhbGxIZWxwZXJzOjpjYWxs
ZWVGcmFtZVBheWxvYWRTbG90KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSk7CisgICAgaml0LnN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVkKCksIENDYWxsSGVs
cGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVn
cyA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhHUFJJbmZvOjpyZWdUNCwgR1BS
SW5mbzo6cmVnVDIpOworCisgICAgLy8gQmVmb3JlIHByb2Nlc3NpbmcgdGhlIGFyZ3VtZW50cyBs
b29wLCBjaGVjayB0aGF0IHdlIGhhdmUgZ2VuZXJhdGVkIEpJVCBjb2RlIGZvciBjYWxsaW5nCisg
ICAgLy8gdG8gYXZvaWQgcHJvY2Vzc2luZyB0aGUgbG9vcCB0d2ljZSBpbiB0aGUgc2xvdyBjYXNl
LgorICAgIENDYWxsSGVscGVyczo6SnVtcCBub0NvZGU7CisgICAgeworICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTUmVtb3RlRnVuY3Rp
b246Om9mZnNldE9mVGFyZ2V0RnVuY3Rpb24oKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6WmVybywgR1BSSW5mbzo6cmVnVDIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZFeGVjdXRh
YmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAg
ICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgICAgIGppdC5sb2FkUHRyKAorICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgIEdQUkluZm86
OnJlZ1QyLCBFeGVjdXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3Io
Q29kZUZvckNhbGwpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgbm9D
b2RlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7
CisKKyAgICAvLyBBcmd1bWVudCBwcm9jZXNzaW5nIGxvb3A6CisgICAgLy8gRm9yIGVhY2ggYXJn
dW1lbnQgKG9yZGVyIHNob3VsZCBub3QgYmUgb2JzZXJ2YWJsZSk6CisgICAgLy8gICAgIGlmIHRo
ZSB2YWx1ZSBpcyBhIFByaW1pdGl2ZSwgY29weSBpdCBpbnRvIHRoZSBuZXcgY2FsbCBmcmFtZSBh
cmd1bWVudHMsIG90aGVyd2lzZQorICAgIC8vICAgICBwZXJmb3JtIHdyYXBwaW5nIGxvZ2ljLiBJ
ZiB0aGUgd3JhcHBpbmcgbG9naWMgcmVzdWx0cyBpbiBhIG5ldyBKU1JlbW90ZUZ1bmN0aW9uLAor
ICAgIC8vICAgICBjb3B5IGl0IGludG8gdGhlIG5ldyBjYWxsIGZyYW1lJ3MgYXJndW1lbnRzLCBv
dGhlcndpc2UgaXQgbXVzdCBoYXZlIHRocm93biBhIFR5cGVFcnJvci4KKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgZG9uZSA9IGppdC5icmFuY2hTdWIzMihDQ2FsbEhlbHBlcnM6Olplcm8sIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgeworICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICAgICAgaml0Lmxv
YWRWYWx1ZShDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnRJbmNsdWRpbmdUaGlzKDApKS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCksIHZhbHVlUmVncyk7CisKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCB2YWx1ZUlzUHJpbWl0aXZlOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZlLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOworICAgICAgICB2YWx1ZUlzUHJpbWl0aXZl
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpOwor
CisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMSwgaml0LmFkZHJlc3NGb3IobG9v
cEluZGV4KSk7CisKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZv
clRhcmdldCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAg
ICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVl
Rm9yVGFyZ2V0KT4oR1BSSW5mbzo6cmVnVDAsIHZhbHVlUmVncyk7CisgICAgICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQ
UjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKKworICAgICAgICBqaXQuc2V0dXBSZXN1bHRzKHZh
bHVlUmVncyk7CisgICAgICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Io
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDApOworCisgICAgICAgIGppdC5s
b2FkUHRyKGppdC5hZGRyZXNzRm9yKGxvb3BJbmRleCksIEdQUkluZm86OnJlZ1QxKTsKKworICAg
ICAgICB2YWx1ZUlzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zdG9yZVZhbHVl
KHZhbHVlUmVncywgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkuaW5kZXhlZEJ5
KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQpKTsKKyAgICAgICAgaml0
LmJyYW5jaFN1YjMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKS5saW5rVG8obG9vcCwgJmppdCk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOworICAgIH0KKworICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNSZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRG
dW5jdGlvbigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6
cmVnVDIsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOworCisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJl
Z1QyLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhl
Y3V0YWJsZSgpIC0gSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgaGFzRXhlY3V0YWJsZS5saW5rKCZqaXQpOworCisgICAgaml0LmxvYWRQdHIoCisgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwLCBFeGVj
dXRhYmxlQmFzZTo6b2Zmc2V0T2ZKSVRDb2RlV2l0aEFyaXR5Q2hlY2tGb3IoQ29kZUZvckNhbGwp
KSwKKyAgICAgICAgR1BSSW5mbzo6cmVnVDApOworCisgICAgLy8gQmFzZWQgb24gdGhlIGNoZWNr
IGFib3ZlLCB3ZSBzaG91bGQgYmUgZ29vZCB3aXRoIHRoaXMuIE9uIEFSTTY0LCBlbWl0UG9pbnRl
clZhbGlkYXRpb24gd2lsbCBkbyB0aGlzLgorI2lmIEFTU0VSVF9FTkFCTEVEICYmICFDUFUoQVJN
NjRFKQorICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGNoZWNrTm90TnVsbCA9IGpp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKFRHSW52YWxpZFBvaW50ZXIpOworICAgICAgICBj
aGVja05vdE51bGwubGluaygmaml0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGVtaXRQb2ludGVy
VmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKyAgICBqaXQu
Y2FsbChHUFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisKKyAgICAvLyBXcmFwIHJldHVy
biB2YWx1ZQorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Cisj
ZW5kaWYKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgcmVzdWx0SXNQcmltaXRpdmU7Cisg
ICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwocmVzdWx0UmVn
cykpOworICAgIHJlc3VsdElzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RPYmplY3Qo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JDYWxsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFn
KTsKKworICAgIGppdC5sb2FkQ2VsbChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIpPihHUFJJbmZvOjpyZWdU
MiwgcmVzdWx0UmVncyk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGV4Y2Vw
dGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKKworICAgIHJl
c3VsdElzUHJpbWl0aXZlLmxpbmsoJmppdCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgaml0LnJldCgpOworCisgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7Cisg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLnRv
cEVudHJ5RnJhbWUpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25M
b29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZ2bSkp
OworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9u
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworCisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIodm0pOworCisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpSZW1vdGVGdW5jdGlvblRodW5rKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2Rl
TG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4odm0uaml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxD
YWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKKyAg
ICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3Ig
cmVtb3RlIGZ1bmN0aW9uIGNhbGxzIik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5oCmluZGV4IGE5ZmVlZWE5MjRhZTAwNzhkODQ1MWUxNzJjNGM0OTQ1ZGYxZDVlZTEuLjU4
OWU3MDA0NjQzYTIyNTM3MjVhZjJiYjhmMGZmMDVkMzMxZTdhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtODIsNiArODIsOCBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHRydW5jVGh1bmtHZW5lcmF0b3IoVk0mKTsK
IAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBib3VuZEZ1bmN0aW9uQ2Fs
bEdlbmVyYXRvcihWTSYpOwogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYpOworCiAjaWYgRU5BQkxFKEVYVFJBX0NU
SV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggZGYx
ODBmYmFkMWM3OTFlYzczY2Y2YjljYTNmNGI0NDI4YzQ2YmE4NC4uZjRiOTg5N2M3ZDMxZDA4MmZj
NTQ2N2RmYThkY2ViNWMxNTUxMzU4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJKU0JpZ0ludC5oIgogI2luY2x1ZGUgIkpTRmluYWxpemF0aW9uUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbklu
bGluZXMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2luY2x1ZGUgIkpTTG9j
ay5oIgogI2luY2x1ZGUgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKQEAgLTM2Niw2ICszNjcsNyBA
QCBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckV2YWxTY3Jp
cHQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJHQyk7
CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckNsZWFyS2Vw
dE9iamVjdHMpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xs
YXJHbG9iYWxPYmplY3RGb3IpOworc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVu
Y3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZV
TkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9T
VF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVjZWl2ZUJyb2FkY2FzdCk7CiBzdGF0aWMg
SlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckFnZW50UmVwb3J0KTsKQEAg
LTY0OSw2ICs2NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFy
LCAiZ2MiLCBmdW5jdGlvbkRvbGxhckdDLCAwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVy
dHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImNs
ZWFyS2VwdE9iamVjdHMiLCBmdW5jdGlvbkRvbGxhckNsZWFyS2VwdE9iamVjdHMsIDAsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRG
dW5jdGlvbih2bSwgZG9sbGFyLCAiZ2xvYmFsT2JqZWN0Rm9yIiwgZnVuY3Rpb25Eb2xsYXJHbG9i
YWxPYmplY3RGb3IsIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
Tm9uZSkpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgZG9sbGFyLCAiaXNSZW1vdGVGdW5jdGlv
biIsIGZ1bmN0aW9uRG9sbGFySXNSZW1vdGVGdW5jdGlvbiwgMSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAgICAgICAgIAogICAgICAgICBkb2xsYXIt
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImdsb2JhbCIpLCBnbG9i
YWxUaGlzKCkpOwogICAgICAgICBkb2xsYXItPnB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiSXNIVE1MRERBIiksCkBAIC0yMDg0LDYgKzIwODcs
MTggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0
Rm9yLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogfQogCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25E
b2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVycm9yKGdsb2Jh
bE9iamVjdCwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIl9zKSkpOworCisgICAgSlNWYWx1ZSBhcmcg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGlzUmVtb3RlRnVuY3Rpb24odm0sIGFyZykpKTsKK30KKwogSlNDX0RFRklORV9IT1NU
X0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRTdGFydCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvckluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwCmluZGV4IDY3NDIwNjUyM2QxYzRiY2RlZThjNTAwYTA3MTMxNjE1YzI0MWU1OGEu
LjAxNzZhMjU1ZDJjYjUzN2JmZjdjNjY0ZTg4MWYxNGRlNWFhMjliMzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC0xNjMsOCArMTYz
LDkgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE1lc3NhZ2VTdHJpbmcoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgbWVzc2FnZVZhbHVlID0gbWVzc2FnZVNs
b3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUHJvcGVydE5hbWUpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKKyAg
ICBpZiAoIW1lc3NhZ2VWYWx1ZSB8fCAhbWVzc2FnZVZhbHVlLmlzUHJpbWl0aXZlKCkpCiAgICAg
ICAgIHJldHVybiB7IH07CisKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1lc3NhZ2VW
YWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKaW5kZXggZmY1ZjE5MjQ2OTBmNjJmNDhjNTEzNjVi
NTJlNmM1NjNiNGU2Mjg5ZC4uYjgxNzU5YmNhN2VhOGQ1NDJiYzkyZDExZmYyODdiNTBkODJmMzc2
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCkBAIC0y
MDUsNiArMjA1LDggQEAgY29uc3QgY2hhciogaW50cmluc2ljTmFtZShJbnRyaW5zaWMgaW50cmlu
c2ljKQogICAgICAgICByZXR1cm4gIklzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMiOwogICAgIGNh
c2UgQm91bmRGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiQm91bmRGdW5j
dGlvbkNhbGxJbnRyaW5zaWMiOworICAgIGNhc2UgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2lj
OgorICAgICAgICByZXR1cm4gIlJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYyI7CiAgICAgY2Fz
ZSBKU01hcEdldEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJKU01hcEdldEludHJpbnNpYyI7
CiAgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgKaW5kZXggOGU2OGU3ZTc0ZmI3OGNkYmQzMzI0Y2ZiZjBhMjVlZDZkMjBk
NmQ1OC4uNGFlMzY1MWI1NzVlMjMxNThiZjY4OTYwYjZkY2NjMDlhNTdiYWYxZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBl
bnVtIEludHJpbnNpYyA6IHVpbnQ4X3QgewogICAgIFR5cGVkQXJyYXlFbnRyaWVzSW50cmluc2lj
LAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRGdW5jdGlvbkNhbGxJ
bnRyaW5zaWMsCisgICAgUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAogICAgIEpTTWFwR2V0
SW50cmluc2ljLAogICAgIEpTTWFwSGFzSW50cmluc2ljLAogICAgIEpTTWFwU2V0SW50cmluc2lj
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCA2OGMwZTViYzJlYTA0
YjMwMmRjNDNkMjQ4YWI1MTg4ZjRiM2UzMGZmLi5hNjk5MzE1OTA5OWNjYzFiNzM5NmE5N2M1OGZk
NGVlMzFhNWMxODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApAQCAt
OTksNiArOTksNyBAQCBzdHJ1Y3QgSlNUeXBlUmFuZ2UgewogICAgIG1hY3JvKEpTU3ltYm9sVGFi
bGVPYmplY3QsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpNb2R1bGVFbnZpcm9u
bWVudFR5cGUpIFwKICAgICBtYWNybyhKU1Njb3BlLCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUs
IEpTVHlwZTo6V2l0aFNjb3BlVHlwZSkgXAogICAgIG1hY3JvKFN0cmluZ09iamVjdCwgSlNUeXBl
OjpTdHJpbmdPYmplY3RUeXBlLCBKU1R5cGU6OkRlcml2ZWRTdHJpbmdPYmplY3RUeXBlKSBcCisg
ICAgbWFjcm8oU2hhZG93UmVhbG1PYmplY3QsIEpTVHlwZTo6U2hhZG93UmVhbG1UeXBlLCBKU1R5
cGU6OlNoYWRvd1JlYWxtVHlwZSkgXAogCiAKIC8vIEZvcndhcmQgZGVjbGFyZSB0aGUgY2xhc3Nl
cyBiZWNhdXNlIHRoZXkgbWF5IG5vdCBhbHJlYWR5IGV4aXN0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAppbmRleCA4YTYwYTlmOWU4ZjY2OTQyYjViODVj
NWRhNWFiNTE2NmE1ODgzNGQwLi4yOTc4YTdhOTVjMDJkOWZhMmEwYjEwM2QwN2ViZGY2MzU2Y2Qz
MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcApA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpT
UmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVlLmgiCiAjaW5jbHVk
ZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKQEAg
LTEyMyw4ICsxMjQsOCBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29ucwogICAgIEFTU0VSVChtZXRo
b2RUYWJsZSh2bSktPmdldENvbnN0cnVjdERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENvbnN0cnVj
dERhdGEpOwogICAgIEFTU0VSVChtZXRob2RUYWJsZSh2bSktPmdldENhbGxEYXRhID09ICZKU0Z1
bmN0aW9uOjpnZXRDYWxsRGF0YSk7CiAKLSAgICAvLyBKU0JvdW5kRnVuY3Rpb24gaW5zdGFuY2Vz
IHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2FkIGFuZCBsYXppbHkgYWxsb2NhdGUgdGhl
aXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCi0gICAgQVNTRVJUKCF0aGlzLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KHZtKSk7CisgICAgLy8gSlNCb3VuZEZ1bmN0aW9uL0pTUmVtb3RlRnVuY3Rp
b24gaW5zdGFuY2VzIHVzZSBmaW5pc2hDcmVhdGlvbihWTSYpIG92ZXJsb2FkIGFuZCBsYXppbHkg
YWxsb2NhdGUgdGhlaXIgbmFtZSBzdHJpbmcgLyBsZW5ndGguCisgICAgQVNTRVJUKCF0aGlzLT5p
bmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAhdGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVG
dW5jdGlvbj4odm0pKTsKIAogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcihsZW5ndGgpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIGlmICghbmFtZS5pc051bGwoKSkKQEAgLTU3
MSw2ICs1NzIsOCBAQCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TGVuZ3RoKFZNJiB2bSkKICAgICBk
b3VibGUgbGVuZ3RoID0gMDsKICAgICBpZiAodGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9u
Pih2bSkpCiAgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPih0aGlzKS0+
bGVuZ3RoKHZtKTsKKyAgICBlbHNlIGlmICh0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9u
Pih2bSkpCisgICAgICAgIGxlbmd0aCA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odGhpcykt
Pmxlbmd0aCh2bSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb24o
KSk7CiAgICAgICAgIGxlbmd0aCA9IGpzRXhlY3V0YWJsZSgpLT5wYXJhbWV0ZXJDb3VudCgpOwpA
QCAtNjI0LDcgKzYyNyw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlOYW1lKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nIG5hbWUpCiAKIEpTRnVuY3Rpb246OlBy
b3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVkZWQoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewotICAgIGlmIChpc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmICF0aGlzLT5pbmhlcml0
czxKU0JvdW5kRnVuY3Rpb24+KHZtKSkKKyAgICBpZiAoKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9u
KCkgJiYgIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKSkKICAgICAgICAgcmV0
dXJuIFByb3BlcnR5U3RhdHVzOjpFYWdlcjsKICAgICBQcm9wZXJ0eVN0YXR1cyBsYXp5TGVuZ3Ro
ID0gcmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KTsKICAgICBpZiAoaXNMYXp5KGxhenlMZW5ndGgpKQpAQCAtNjM4LDcgKzY0MSw3IEBAIEpTRnVu
Y3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eVByb3BlcnR5SWZOZWVk
ZWQoVk0mIHZtLCBKU0dsb2JhCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9u
OjpyZWlmeUxhenlQcm9wZXJ0eUZvckhvc3RPckJ1aWx0aW5JZk5lZWRlZChWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgQVNTRVJUKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkpOwotICAgIGlmIChpc0J1aWx0aW5G
dW5jdGlvbigpIHx8IHRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKSB7CisgICAg
aWYgKGlzQnVpbHRpbkZ1bmN0aW9uKCkgfHwgdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9u
Pih2bSkgfHwgdGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSB7CiAgICAgICAg
IFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlmeUxhenlMZW5ndGhJZk5lZWRlZCh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaXNMYXp5KGxhenlMZW5n
dGgpKQogICAgICAgICAgICAgcmV0dXJuIGxhenlMZW5ndGg7CkBAIC02OTUsNiArNjk4LDE0IEBA
IEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5TGF6eUJvdW5kTmFt
ZUlmTmVlZGVkKFZNJiB2bSwgSlNHbG9iCiAgICAgICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1
dGVzID0gUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5OwogICAgICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsKICAgICAgICAg
cHV0RGlyZWN0KHZtLCBuYW1lSWRlbnQsIHN0cmluZywgaW5pdGlhbEF0dHJpYnV0ZXMpOworICAg
IH0gZWxzZSBpZiAodGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSB7CisgICAg
ICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+ZW5zdXJlUmFyZURhdGEodm0p
OworICAgICAgICBKU1N0cmluZyogbmFtZSA9IGpzQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odGhp
cyktPm5hbWVNYXlCZU51bGwoKTsKKyAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgbmFt
ZSA9IGpzRW1wdHlTdHJpbmcodm0pOworICAgICAgICB1bnNpZ25lZCBpbml0aWFsQXR0cmlidXRl
cyA9IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seTsKKyAgICAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7CisgICAgICAgIHB1
dERpcmVjdCh2bSwgbmFtZUlkZW50LCBuYW1lLCBpbml0aWFsQXR0cmlidXRlcyk7CiAgICAgfQog
ICAgIHJldHVybiBQcm9wZXJ0eVN0YXR1czo6UmVpZmllZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAppbmRleCA4NDYwZDQyYzA3YTIxZjBhMjYzZmY4ZTgx
YjJjNTAyYTlmY2ZkOGZjLi5jMzE4ZDVlMTE4MzczZTBhOGM1OGVlMDM1OWVlOWMyN2UwZTI0N2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCkBAIC0xNTAs
NiArMTUwLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNCdWlsdGluRnVuY3Rpb24oKSBjb25zdDsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkgY29u
c3Q7CiAgICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0OworICAgIGJv
b2wgaXNSZW1vdGVGdW5jdGlvbihWTSYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRGdW5jdGlvbk5h
bWUoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIG5hbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAppbmRleCAyNWQ2MDk0MzBiYjdk
ZWI1ZWNiMGFkOTcyMTJlODhmOTg3YTVkYjA4Li4yZWJmMDUyNjEwNmMzNTQ4NzdjYTBjZDMzODAx
Mjc3NDljYTI5ZjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb25JbmxpbmVzLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkV4
ZWN1dGFibGUuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk5hdGl2
ZUV4ZWN1dGFibGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC03OCw2ICs3OSwxMSBAQCBpbmxp
bmUgYm9vbCBKU0Z1bmN0aW9uOjppc0NsYXNzQ29uc3RydWN0b3JGdW5jdGlvbigpIGNvbnN0CiAg
ICAgcmV0dXJuICFpc0hvc3RGdW5jdGlvbigpICYmIGpzRXhlY3V0YWJsZSgpLT5pc0NsYXNzQ29u
c3RydWN0b3JGdW5jdGlvbigpOwogfQogCitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc1JlbW90
ZUZ1bmN0aW9uKFZNJiB2bSkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5oZXJpdHM8SlNSZW1vdGVG
dW5jdGlvbj4odm0pOworfQorCiBpbmxpbmUgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gSlNGdW5jdGlv
bjo6bmF0aXZlRnVuY3Rpb24oKQogewogICAgIEFTU0VSVChpc0hvc3RGdW5jdGlvbk5vbklubGlu
ZSgpKTsKQEAgLTk4LDYgKzEwNCwxMyBAQCBpbmxpbmUgYm9vbCBpc0hvc3RGdW5jdGlvbihKU1Zh
bHVlIHZhbHVlLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbikKICAgICByZXR1
cm4gZnVuY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkgPT0gbmF0aXZlRnVuY3Rpb247CiB9CiAKK2lu
bGluZSBib29sIGlzUmVtb3RlRnVuY3Rpb24oVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmIChhdXRvKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZtLCB2YWx1
ZSkpCisgICAgICAgIHJldHVybiBmdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTGVu
Z3RoKCkgY29uc3QKIHsKICAgICBpZiAoRnVuY3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlz
LT5yYXJlRGF0YSgpKQpAQCAtMTE0LDYgKzEyNyw4IEBAIGlubGluZSBib29sIEpTRnVuY3Rpb246
Omhhc1JlaWZpZWROYW1lKCkgY29uc3QKIAogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6Y2FuQXNz
dW1lTmFtZUFuZExlbmd0aEFyZU9yaWdpbmFsKFZNJikKIHsKKyAgICAvLyBKU1JlbW90ZUZ1bmN0
aW9uIG5ldmVyIGhhcyBhICduYW1lJyBmaWVsZCwgcmV0dXJuIHRydWUKKyAgICAvLyB0byBhdm9p
ZCBhbGxvY2F0aW5nIGEgRnVuY3Rpb25SYXJlRGF0YS4KICAgICBpZiAoaXNIb3N0RnVuY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRh
ID0gdGhpcy0+cmFyZURhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyOGEyMWRhNjZlMGRmMjg2NmU5OGE2OTM2YmU3ZDcx
MTE4ZDFkMWNlLi5hOTA3Njc5ODhlYmM2Yzc3OWNmZjM4Y2Y3NjMzNGRlM2M4Y2JlNzBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBA
IC0xNDAsNiArMTQwLDcgQEAKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKICNpbmNsdWRlICJKU1By
b21pc2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVByb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUg
IkpTU2V0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZ0l0ZXJhdG9yLmgiCkBAIC03NzAs
NiArNzcxLDEwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgICAgICBb
XSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAgICAgICAgICAgaW5p
dC5zZXQoSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQu
b3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAg
fSk7CisgICAgbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCisgICAgICAgIFtd
IChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0
LnNldChKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25l
ciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOworICAgICAgICB9KTsK
ICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IGFwcGx5RnVuY3Rpb24gPSBudWxscHRyOwogICAgIEpTRnVuY3Rpb24qIGhhc0luc3RhbmNlU3lt
Ym9sRnVuY3Rpb24gPSBudWxscHRyOwpAQCAtMTUzMSw2ICsxNTM2LDE0IEBAIGNhcGl0YWxOYW1l
ICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/
IGNhcGl0YWxOYW1lCiAgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5p
dC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBj
cmVhdGVQcml2YXRlU3ltYm9sKSk7CiAgICAgICAgIH0pOwogCisgICAgLy8gU2hhZG93UmVhbG1z
CisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVD
b25zdGFudDo6Y3JlYXRlUmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRp
YWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246
OmNyZWF0ZShpbml0LnZtLCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwg
U3RyaW5nKCksIGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSk7CisgICAgICAgIH0pOworICAgIG1fbGlu
a1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6Omlz
UmVtb3RlRnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4m
IGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVuY3Rpb246OmNyZWF0ZShpbml0LnZt
LCBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihpbml0Lm93bmVyKSwgMCwgU3RyaW5nKCksIGlzUmVt
b3RlRnVuY3Rpb24pKTsKKyAgICAgICAgfSk7CisKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAg
ICAgLy8gV2ViQXNzZW1ibHkgU3RyZWFtaW5nIEFQSQogICAgIG1fbGlua1RpbWVDb25zdGFudHNb
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OndlYkFzc2VtYmx5Q29tcGls
ZVN0cmVhbWluZ0ludGVybmFsKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0Nl
bGw+JiBpbml0KSB7CkBAIC0yMjU5LDYgKzIyNzIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgdGhp
c09iamVjdC0+bV9jdXN0b21TZXR0ZXJGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB0aGlzT2JqZWN0LT5tX2JvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7
CiAgICAgdGhpc09iamVjdC0+bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNp
dG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZp
c2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fc2hhZG93UmVhbG1PYmpl
Y3RTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcmVnRXhwU3Ry
dWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2dlbmVyYXRvckZ1bmN0
aW9uU3RydWN0dXJlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCmluZGV4IDFiMWQ5YjU1M2M3NDcyYmViYjY3NDg5ZDkyYzc3YTNkOTM2OTZkMmEu
LjNhZGZhMzhlOGEzMjQ5YTQ1OGJjYjE3NDViMTgyNjUzZGY1YzhiNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtNDIxLDYgKzQyMSw3
IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBtX2Z1bmN0aW9uTmFtZU9mZnNldDsKICAg
ICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0dXJlOwog
ICAgIFdyaXRlQmFycmllclN0cnVjdHVyZUlEIG1fcmVnRXhwU3RydWN0dXJlOworCiAgICAgV3Jp
dGVCYXJyaWVyU3RydWN0dXJlSUQgbV9hc3luY0Z1bmN0aW9uU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllclN0cnVjdHVyZUlEIG1fYXN5bmNHZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX2dlbmVyYXRvckZ1bmN0aW9uU3RydWN0dXJlOwpA
QCAtNDM3LDYgKzQzOCw3IEBAIHB1YmxpYzoKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZT4gbV9jdXN0b21HZXR0ZXJGdW5jdGlvblN0cnVjdHVyZTsKICAgICBMYXp5
UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9jdXN0b21TZXR0ZXJGdW5jdGlv
blN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4g
bV9uYXRpdmVTdGRGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxP
YmplY3QsIFN0cnVjdHVyZT4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJh
cnJpZXI8QXN5bmNGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0Z1bmN0aW9uUHJvdG90eXBlOwog
ICAgIFdyaXRlQmFycmllcjxBc3luY0dlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlPiBtX2FzeW5j
R2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU+IG1faXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmU7CkBAIC04NzIs
NiArODc0LDcgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVdpdGhJbmRpY2VzU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVj
dHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0
cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0luZGljZXNBcnJheVN0cnVj
dHVyZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3JlbW90ZUZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAg
IFN0cnVjdHVyZSogbW9kdWxlUmVjb3JkU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVSZWNvcmRTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBtb2R1bGVOYW1l
c3BhY2VPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX21vZHVsZU5hbWVzcGFjZU9i
amVjdFN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHByb3h5T2JqZWN0U3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9wcm94eU9iamVjdFN0cnVjdHVyZS5nZXQodGhpcyk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNSZW1vdGVGdW5jdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzFhY2Q4OTZlMjFlNWU2OGUwODU3MjA1Zjk4NDg0MDdmMGFjMDM5
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVt
b3RlRnVuY3Rpb24uY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIElnYWxpYSBTLkwuCisgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVG
dW5jdGlvbi5oIgorCisjaW5jbHVkZSAiRXhlY3V0YWJsZUJhc2VJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlNoYWRvd1JlYWxtT2JqZWN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTUmVtb3RlRnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1JlbW90ZUZ1bmN0aW9u
KSB9OworCitKU1JlbW90ZUZ1bmN0aW9uOjpKU1JlbW90ZUZ1bmN0aW9uKFZNJiB2bSwgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbikKKyAgICA6IEJhc2Uo
dm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorICAgICwgbV90YXJnZXRG
dW5jdGlvbih2bSwgdGhpcywgdGFyZ2V0RnVuY3Rpb24pCisgICAgLCBtX2xlbmd0aCgwLjApCit7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlIHdyYXBWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlmICh2YWx1ZS5pc1By
aW1pdGl2ZSgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBpZiAodmFsdWUuaXNDYWxs
YWJsZSh2bSkpIHsKKyAgICAgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiBKU1JlbW90ZUZ1
bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24pOwor
ICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSB3cmFwQXJndW1lbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3JhcFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0
R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBv
ciBwcmltaXRpdmUiKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSB3cmFwUmV0dXJuVmFsdWUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTVmFsdWUgcmVzdWx0ID0gd3Jh
cFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2Vl
biByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBwcmltaXRpdmUiKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihy
ZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1bmN0aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlv
bio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKHJlbW90ZUZ1bmN0aW9uLT5p
c1JlbW90ZUZ1bmN0aW9uKHZtKSk7CisgICAgSlNGdW5jdGlvbiogdGFyZ2V0RnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0ID0gdGFyZ2V0RnVuY3Rpb24tPmds
b2JhbE9iamVjdCgpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7ICsraSkgewor
ICAgICAgICBKU1ZhbHVlIHdyYXBwZWRWYWx1ZSA9IHdyYXBBcmd1bWVudChnbG9iYWxPYmplY3Qs
IHRhcmdldEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGFyZ3MuYXBw
ZW5kKHdyYXBwZWRWYWx1ZSk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWShhcmdzLmhhc092ZXJm
bG93ZWQoKSkpIHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSA9IHRhcmdldEZ1bmN0aW9uLT5leGVjdXRhYmxlKCk7CisgICAgaWYgKGV4ZWN1
dGFibGUtPmhhc0pJVENvZGVGb3JDYWxsKCkpIHsKKyAgICAgICAgLy8gRm9yY2UgdGhlIGV4ZWN1
dGFibGUgdG8gY2FjaGUgaXRzIGFyaXR5IGVudHJ5cG9pbnQuCisgICAgICAgIGV4ZWN1dGFibGUt
PmVudHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9CisKKyAg
ICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBB
U1NFUlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byBy
ZXN1bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUod3Jh
cFJldHVyblZhbHVlKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCByZXN1bHQpKSk7Cit9CisK
K0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihyZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiogcmVtb3RlRnVuY3Rpb24gPSBq
c0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CisgICAgQVNT
RVJUKHJlbW90ZUZ1bmN0aW9uLT5pc1JlbW90ZUZ1bmN0aW9uKHZtKSk7CisgICAgSlNPYmplY3Qq
IHRhcmdldEZ1bmN0aW9uID0gcmVtb3RlRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9i
YWxPYmplY3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgSlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0
YXJnZXRHbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAg
ICAgICBhcmdzLmFwcGVuZCh3cmFwcGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFko
YXJncy5oYXNPdmVyZmxvd2VkKCkpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBh
dXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIHRhcmdldEZ1bmN0aW9uKTsKKyAgICBBU1NF
UlQoY2FsbERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6Tm9uZSk7CisgICAgYXV0byByZXN1
bHQgPSBjYWxsKHRhcmdldEdsb2JhbE9iamVjdCwgdGFyZ2V0RnVuY3Rpb24sIGNhbGxEYXRhLCBq
c1VuZGVmaW5lZCgpLCBhcmdzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUod3JhcFJl
dHVyblZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCByZXN1bHQpKSk7Cit9
CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9uLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQoreworICAgIEFTU0VS
VChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA9PSAxKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihKU0M6OmlzUmVtb3RlRnVuY3Rpb24oZ2xvYmFsT2JqZWN0LT52bSgpLCB2
YWx1ZSkpKTsKK30KKworSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGNyZWF0ZVJlbW90ZUZ1bmN0
aW9uLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPT0gMik7CisgICAgSlNWYWx1ZSB0YXJnZXRGdW5jdGlvbiA9IGNhbGxGcmFtZS0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgQVNTRVJUKHRhcmdldEZ1bmN0aW9uLmlzQ2FsbGFi
bGUodm0pKTsKKworICAgIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSA9IGpzQ2FzdDxKU09iamVj
dCo+KHRhcmdldEZ1bmN0aW9uLmFzQ2VsbCgpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZGVzdGlu
YXRpb25HbG9iYWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CisgICAgaWYgKCFjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8gc2hhZG93UmVhbG0gPSBqc0R5bmFtaWNDYXN0PFNoYWRvd1JlYWxtT2JqZWN0Kj4odm0sIGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpKQorICAgICAgICAgICAgZGVzdGluYXRpb25H
bG9iYWxPYmplY3QgPSBzaGFkb3dSZWFsbS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgfQorCisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCwgdGFyZ2V0Q2FsbGFibGUpKSk7Cit9
CisKK2lubGluZSBTdHJ1Y3R1cmUqIGdldFJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCBnbG9iYWxP
YmplY3QtYXdhcmUgc3RydWN0dXJlIGNhY2hpbmcKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5y
ZW1vdGVGdW5jdGlvblN0cnVjdHVyZSgpOworfQorCitKU1JlbW90ZUZ1bmN0aW9uKiBKU1JlbW90
ZUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogdGFyZ2V0Q2FsbGFibGUpCit7CisgICAgQVNTRVJUKHRhcmdldENhbGxhYmxlICYm
IHRhcmdldENhbGxhYmxlLT5pc0NhbGxhYmxlKHZtKSk7CisgICAgaWYgKGF1dG8gcmVtb3RlID0g
anNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9uKj4odm0sIHRhcmdldENhbGxhYmxlKSkgewor
ICAgICAgICB0YXJnZXRDYWxsYWJsZSA9IHJlbW90ZS0+dGFyZ2V0RnVuY3Rpb24oKTsKKyAgICAg
ICAgQVNTRVJUKCFKU0M6OmlzUmVtb3RlRnVuY3Rpb24odm0sIHRhcmdldENhbGxhYmxlKSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0pTRnVuY3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHRhcmdldENhbGxh
YmxlKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0UmVtb3RlRnVu
Y3Rpb24oaXNKU0Z1bmN0aW9uKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlbW90
ZUZ1bmN0aW9uU3RydWN0dXJlKGdsb2JhbE9iamVjdCk7CisgICAgSlNSZW1vdGVGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1JlbW90ZUZ1bmN0aW9uPih2
bSkpIEpTUmVtb3RlRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCB0YXJnZXRDYWxsYWJsZSk7CisKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiBmdW5jdGlvbjsKK30KKwordm9pZCBKU1JlbW90ZUZ1bmN0aW9uOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICAvLyAzLjEuMjogQ29weU5hbWVB
bmRMZW5ndGgKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworCisg
ICAgUHJvcGVydHlTbG90IHNsb3QobV90YXJnZXRGdW5jdGlvbi5nZXQoKSwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CisgICAgYm9vbCB0YXJnZXRIYXNMZW5ndGggPSBt
X3RhcmdldEZ1bmN0aW9uLT5nZXRPd25Qcm9wZXJ0eVNsb3RJbmxpbmUoZ2xvYmFsT2JqZWN0LCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIHNsb3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHZvaWQoKSk7CisKKyAgICBpZiAodGFyZ2V0SGFzTGVuZ3RoKSB7CisgICAgICAgIEpT
VmFsdWUgdGFyZ2V0TGVuZ3RoID0gc2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZv
aWQoKSk7CisgICAgICAgIGRvdWJsZSB0YXJnZXRMZW5ndGhBc0ludCA9IHRhcmdldExlbmd0aC50
b0ludGVnZXJPckluZmluaXR5KGdsb2JhbE9iamVjdCk7CisgICAgICAgIG1fbGVuZ3RoID0gc3Rk
OjptYXgodGFyZ2V0TGVuZ3RoQXNJbnQsIDAuMCk7CisgICAgfQorCisgICAgSlNWYWx1ZSB0YXJn
ZXROYW1lID0gSlNWYWx1ZShtX3RhcmdldEZ1bmN0aW9uLmdldCgpKS5nZXQoZ2xvYmFsT2JqZWN0
LCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOworICAgIGlmICh0YXJnZXROYW1lLmlzU3RyaW5nKCkpCisgICAgICAgIG1fbmFt
ZU1heUJlTnVsbC5zZXQodm0sIHRoaXMsIGFzU3RyaW5nKHRhcmdldE5hbWUpKTsKKworICAgIHNj
b3BlLnJlbGVhc2UoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlzaXRvcj4KK3ZvaWQgSlNS
ZW1vdGVGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNS
ZW1vdGVGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YXJnZXRGdW5jdGlv
bik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9uYW1lTWF5QmVOdWxsKTsKK30K
KworREVGSU5FX1ZJU0lUX0NISUxEUkVOKEpTUmVtb3RlRnVuY3Rpb24pOworCit9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVt
b3RlRnVuY3Rpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yYWVhOGQyODk5MmRhMWMxODJjMzg2YWYzMWMzZmUwNDkzMmY3
NDllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNS
ZW1vdGVGdW5jdGlvbi5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgSWdhbGlhIFMuTC4KKyAqIEF1dGhvcjogQ2FpdGxpbiBQb3R0ZXIgPGNhaXRwQGlnYWxpYS5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXV4aWxpYXJ5QmFycmll
ci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1RhZ2dlZEFycmF5U3Rv
cmFnZVB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElP
TihyZW1vdGVGdW5jdGlvbkNhbGxGb3JKU0Z1bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVO
Q1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYyk7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNU
SU9OKGlzUmVtb3RlRnVuY3Rpb24pOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihjcmVhdGVS
ZW1vdGVGdW5jdGlvbik7CisKKy8vIEpTUmVtb3RlRnVuY3Rpb24gY3JlYXRlcyBhIGJyaWRnZSBi
ZXR3ZWVuIGl0cyBuYXRpdmUgUmVhbG0gYW5kIGEgcmVtb3RlIG9uZS4KKy8vIFdoZW4gaW52b2tl
ZCwgYXJndW1lbnRzIGFyZSB3cmFwcGVkIHRvIHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiBh
Y3Jvc3MgdGhlIHJlYWxtIGJvdW5kYXJ5LgorLy8gVGhlIHJldHVybiB2YWx1ZSBhbmQgYW55IGFi
cnVwdCBjb21wbGV0aW9ucyBhcmUgYWxzbyBmaWx0ZXJlZC4KK2NsYXNzIEpTUmVtb3RlRnVuY3Rp
b24gZmluYWwgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Z1
bmN0aW9uIEJhc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5
cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CisgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvcihWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0ucmVtb3RlRnVuY3Rpb25TcGFj
ZTxtb2RlPigpOworICAgIH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1JlbW90
ZUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0YXJnZXRD
YWxsYWJsZSk7CisKKyAgICBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBtX3Rh
cmdldEZ1bmN0aW9uLmdldCgpOyB9CisgICAgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9i
amVjdCgpIHsgcmV0dXJuIHRhcmdldEZ1bmN0aW9uKCktPmdsb2JhbE9iamVjdCgpOyB9CisgICAg
SlNTdHJpbmcqIG5hbWVNYXlCZU51bGwoKSBjb25zdCB7IHJldHVybiBtX25hbWVNYXlCZU51bGwu
Z2V0KCk7IH0KKworICAgIGRvdWJsZSBsZW5ndGgoVk0mKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNGdW5jdGlvblR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1JlbW90ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKFZNJiwgTmF0aXZlRXhl
Y3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHRhcmdldENh
bGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICBERUNMQVJFX1ZJ
U0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX3RhcmdldEZ1bmN0
aW9uOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lTWF5QmVOdWxsOworICAgIGRv
dWJsZSBtX2xlbmd0aDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApp
bmRleCBlZWY1MTVkOTAzYmRmNjkyYmFiYjcyNmMyY2Y2MGJiNWJjNmUxOGRjLi40ZGZhM2IyZmZl
ZTVkOWY4YjE4Mjk2MmI1OWE3ZDhhOThiYzVmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCkBAIC02MzEsNiArNjMxLDggQEAgc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5r
R2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVy
biByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVuY3Rpb25DYWxsSW50cmlu
c2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CisgICAgY2Fz
ZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiByZW1vdGVGdW5j
dGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpAQCAtNzA4LDYgKzcxMCwyNSBAQCBOYXRpdmVFeGVjdXRhYmxlKiBWTTo6Z2V0Qm91
bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpCiAgICAgcmV0
dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9CiAKK05hdGl2ZUV4ZWN1
dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbikKK3sKKyAgICBi
b29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdldE9yQ3JlYXRlID0gWyZd
IChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVFeGVjdXRhYmxlKiB7Cisg
ICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAgICAgICAgICAgcmV0dXJu
IGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0ID0gZ2V0SG9zdEZ1bmN0
aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmljIDog
cmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAgICAgIHNsb3dDYXNlID8g
Tm9JbnRyaW5zaWMgOiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgICAgICAgICBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3RyaW5nKCkpOworICAgICAg
ICBzbG90ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAgICAgIHJldHVybiBnZXRP
ckNyZWF0ZShtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworICAgIHJldHVybiBnZXRP
ckNyZWF0ZShtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOworfQorCiBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICNpZiBFTkFCTEUoSklU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTU2ZGE5NGEwOGVhMTQ5ZDFjNzU1
NGM3NDQzOWQxNzExMWU0ZTAzNS4uOTY2MjUzODU0NjgyOGZlMzkyZmMzZDRlNmViZjViZWQ4NjU0
NjUxYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00MzIsNiArNDMyLDcgQEAg
cHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIobmF0aXZlU3Rk
RnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHBy
b3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihw
cm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIo
cmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVN
QkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkKICAgICBEWU5BTUlDX0lT
T19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFjZSkKQEAgLTU3Miw2ICs1
NzMsOSBAQCBwdWJsaWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dCb3VuZEV4
ZWN1dGFibGU7CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dDYW5Db25zdHJ1Y3RC
b3VuZEV4ZWN1dGFibGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fZmFzdFJlbW90
ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+IG1fc2xvd1Jl
bW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJlZFdvcmtUaW1lcj4gZGVm
ZXJyZWRXb3JrVGltZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURlc3RydWN0aW5nQ2FsbGJh
Y2tPYmplY3Q7CkBAIC02ODQsNiArNjg4LDcgQEAgcHVibGljOgogICAgIE5hdGl2ZUV4ZWN1dGFi
bGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljLCBOYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUqLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRGdW5jdGlvbihib29sIGlz
SlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdl
dFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNF
bnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTExMTIyMjEwOTdhMTQxYmVmYjlhM2NlNjlm
OWVhMTE4NWQyZmIwOS4uOGZlMDFhYWM4ZGIzNTQ4NTFmZTZjYzM1Y2EzZDgwZTY2ZDIyNmUyNSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAyMi0wMS0zMSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBu
ZXcgRnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkcyBhIG5ldyBmaWxlIHRlc3RpbmcgQ29weU5hbWVBbmRMZW5ndGggc3R1ZmYg
aW4gdGhlIFNoYWRvd1JlYWxtIHByb3Bvc2FsLAorICAgICAgICBhbmQgZml4IHVwIGFzc2VydGlv
bnMgYWJvdXQgdGhpcyBpbiBzaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKKworICAgICAgICAqIHN0
cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanM6CisgICAgICAgICogc3RyZXNzL3NoYWRvdy1y
ZWFsbS1yZW1vdGUtZnVuY3Rpb24tY29weS1sZW5ndGgtYW5kLW5hbWUuanM6IEFkZGVkLgorCiAy
MDIyLTAxLTI4ICBUb20gVGFydGFyaW4gIDx0b21AbGVhbmluZ3RlY2guY29tPgogCiAgICAgICAg
IFtKU0NdIEFkZCBzdXBwb3J0IGZvciBXQVNNIGJyYW5jaCBoaW50aW5nIHByb3Bvc2FsCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKaW5kZXggYjAxZGExZjU3YThmOTViODNk
YjFiZTljY2JmZTg5YWZlYThmZjhjZS4uODM2MTkyMGU2YWQzZDAxODI3OGY1ZmYxOThjNmE3Nzk4
Y2I0ODk1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxtLWV2YWx1YXRl
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwpAQCAtODAs
OCArODAsMTcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlLCBhc3NlcnRp
b25GbikgewogICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZih3cmFwcGVkSW52b2tl
QW5kQWRkKSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKIAogICAgIC8vIG5hbWUgYW5kIGxlbmd0aCBw
cm9wZXJ0aWVzIGZyb20gd3JhcHBlZCBmdW5jdGlvbiBhcmUgYWJzZW50Ci0gICAgc2hvdWxkQmUo
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRkLCAibGVu
Z3RoIiksIHVuZGVmaW5lZCk7Ci0gICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRkLCAibmFtZSIpLCB1bmRlZmluZWQpOworICAgIGxl
dCBsZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52
b2tlQW5kQWRkLCAibGVuZ3RoIik7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy52YWx1ZSwgMik7
CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy53cml0YWJsZSwgZmFsc2UpOworICAgIHNob3VsZEJl
KGxlbmd0aERlc2MuZW51bWVyYWJsZSwgZmFsc2UpOworICAgIHNob3VsZEJlKGxlbmd0aERlc2Mu
Y29uZmlndXJhYmxlLCB0cnVlKTsKKworICAgIGxldCBuYW1lRGVzYyA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iod3JhcHBlZEludm9rZUFuZEFkZCwgIm5hbWUiKTsKKyAgICBzaG91
bGRCZShuYW1lRGVzYy52YWx1ZSwgImludm9rZUFuZEFkZCIpOworICAgIHNob3VsZEJlKG5hbWVE
ZXNjLndyaXRhYmxlLCBmYWxzZSk7CisgICAgc2hvdWxkQmUobmFtZURlc2MuZW51bWVyYWJsZSwg
ZmFsc2UpOworICAgIHNob3VsZEJlKG5hbWVEZXNjLmNvbmZpZ3VyYWJsZSwgdHJ1ZSk7CiAKICAg
ICAvLyBjYW4ndCBwYXNzIG9iamVjdHMgaW50byBhIHNoYWRvdyByZWFsbS13cmFwcGVkIGZ1bmN0
aW9uCiAgICAgbGV0IG51bWJlck9iaiA9IHsgdmFsdWVPZigpIHsgcmV0dXJuIC0xIH0gfTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24tY29w
eS1sZW5ndGgtYW5kLW5hbWUuanMgYi9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tcmVtb3Rl
LWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2UxMmQ4MDM3
MTVlMjZkNWQwMmY0ODc3MzUzNjE3MjY5MDcwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9zaGFkb3ctcmVhbG0tcmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1l
LmpzCkBAIC0wLDAgKzEsNDE0IEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tdXNlU2hhZG93UmVh
bG09MSIpCisKK2Z1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnQoZWxlbWVudCkgeworICBpZiAodHlw
ZW9mIGVsZW1lbnQgPT09ICJvYmplY3QiKSB7CisgICAgaWYgKGVsZW1lbnQgPT09IG51bGwpCisg
ICAgICByZXR1cm4gIm51bGwiOworICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpKQorICAg
ICAgcmV0dXJuIHN1bW1hcml6ZUFycmF5KGVsZW1lbnQsIDApOworICB9CisgIGxldCByZXN1bHQg
PSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTsKKyAgaWYgKHJlc3VsdC5sZW5ndGggPiAyMCkgewor
ICAgIGxldCBjID0gcmVzdWx0WzBdOworICAgIGlmIChjID09PSAieyIpCisgICAgICBjID0gIn0i
OworICAgIHJlc3VsdCA9IGAke3Jlc3VsdC5zdWJzdHIoMCwgMTUpfS4uLiR7Y31gOworICB9Cisg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHN1bW1hcml6ZUFycmF5KGFycmF5LCBpbmRl
eCwgc2hvd0luZGV4KSB7CisKKyAgbGV0IHByZWZpeCA9IGluZGV4ID09PSAwID8gIiIgOiBgLi4u
JHtzdW1tYXJpemVFbGVtZW50KGFycmF5W2luZGV4IC0gMV0pfSwgYDsKKyAgbGV0IHN1ZmZpeCA9
IGluZGV4ICsgMSA8IGFycmF5Lmxlbmd0aCA/IGAsICR7c3VtbWFyaXplRWxlbWVudChhcnJheVtp
bmRleCArIDFdKX0uLi5gIDogIiI7CisKKyAgaWYgKHByZWZpeC5sZW5ndGggPiAyMCkKKyAgICBw
cmVmaXggPSBwcmVmaXguc3Vic3RyKHByZWZpeC5sZW5ndGggLSAyMCk7CisgIGlmIChzdWZmaXgu
bGVuZ3RoID4gMjApCisgICAgc3VmZml4ID0gc3VmZml4LnN1YnN0cigwLCAyMCk7CisgIGVuZGVy
ID0gc2hvd0luZGV4ID8gYCAoYXQgaW5kZXggJHtpbmRleH0pYCA6ICIiOworICByZXR1cm4gYFsk
e3ByZWZpeH0ke0pTT04uc3RyaW5naWZ5KGFycmF5W2luZGV4XSl9JHtzdWZmaXh9XSR7ZW5kZXJ9
YDsKK30KK2Z1bmN0aW9uIHNob3VsZEJlQXJyYXlFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSB7Cisg
IGlmICgoQXJyYXkuaXNBcnJheShleHBlY3RlZCkgJiYgIUFycmF5LmlzQXJyYXkoYWN0dWFsKSkp
CisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke0pTT04uc3RyaW5naWZ5fSBidXQgZm91
bmQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWwpfWApOworCisgIHZhciBpOworICBmb3IgKHZhciBp
ID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7CisgICAgbGV0IGUgPSBleHBlY3RlZFtp
XTsKKyAgICBsZXQgYSA9IGFjdHVhbFtpXTsKKyAgICBpZiAoZSA9PT0gYSkKKyAgICAgIGNvbnRp
bnVlOworICAgIGlmIChBcnJheS5pc0FycmF5KGUpKQorICAgICAgc2hvdWxkQmVBcnJheUVxdWFs
KGEsIGUpOworICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVBcnJheShl
eHBlY3RlZCwgaSwgdHJ1ZSl9IGJ1dCBmb3VuZCAke3N1bW1hcml6ZUFycmF5KGFjdHVhbCwgaSl9
YCkKKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAg
aWYgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSB8fCBBcnJheS5pc0FycmF5KGV4cGVjdGVkKSkKKyAg
ICAgIHJldHVybiBzaG91bGRCZUFycmF5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7CisgICAgaWYg
KGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQg
JHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hvdWxkSGF2
ZURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpIHsKKyAgbGV0IGFj
dHVhbCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOworICBsZXQgb3JkZXIgPSBPYmplY3Qua2V5cyhkZXNjcmlwdG9yKS5zb3J0KCk7CisgIGZv
ciAobGV0IGtleSBvZiBvcmRlcikgeworICAgIGxldCB2YWx1ZSA9IGRlc2NyaXB0b3Jba2V5XTsK
KyAgICBpZiAoWyJ1bmRlZmluZWQiLCAiYm9vbGVhbiIsICJudW1iZXIiLCAic3RyaW5nIiwgInN5
bWJvbCIsICJiaWdpbnQiXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpIHx8IHZhbHVlID09PSBudWxs
KSB7CisgICAgICBpZiAoYWN0dWFsW2tleV0gIT09IHZhbHVlKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYEV4cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWwpfSdzICcke2tleX0nIHRv
IGJlICR7c3VtbWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQgZm91bmQgJHtzdW1tYXJpemVFbGVt
ZW50KGFjdHVhbFtrZXldKX1gKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImZ1
bmN0aW9uIikgeworICAgICAgaWYgKGFjdHVhbFtrZXldICE9PSB2YWx1ZSAmJiBTdHJpbmcodmFs
dWUpICE9PSBTdHJpbmcoYWN0dWFsW2tleV0pKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4
cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWwpfSdzICcke2tleX0nIHRvIGJlICR7c3Vt
bWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQgZm91bmQgJHtzdW1tYXJpemVFbGVtZW50KGFjdHVh
bFtrZXldKX1gKTsKKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3cob3AsIGVy
cm9yQ29uc3RydWN0b3IsIGRlc2MpIHsKKyAgICB0cnkgeworICAgICAgICBvcCgpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIGVycm9yQ29uc3RydWN0b3Ip
KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRocmV3ICR7ZX0sIGJ1dCBzaG91bGQg
aGF2ZSB0aHJvd24gJHtlcnJvckNvbnN0cnVjdG9yLm5hbWV9YCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7ZGVzYyB8
fCAnb3BlcmF0aW9uJ30gdG8gdGhyb3cgJHtlcnJvckNvbnN0cnVjdG9yLm5hbWV9LCBidXQgbm8g
ZXhjZXB0aW9uIHRocm93bmApOworfQorCitsZXQgcmVhbG0gPSBuZXcgU2hhZG93UmVhbG07CisK
K2xldCBmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGxldCB0ZXN0MSA9IGZ1bmN0aW9u
KGEsIGIsIGMpIHsKKyAgfTsKKyAgcmV0dXJuIHRlc3QxOworfSkoKWApOworCitzaG91bGRIYXZl
RGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMywKKyAgd3JpdGFibGU6IGZhbHNl
LAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91
bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICJ0ZXN0MSIsCisgIHdyaXRh
YmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
K30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGZ1bmN0aW9uIHRlc3QyKGEs
IGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwsIG0sIG4sIG8sIHApIHsKKyAgfQorICBy
ZXR1cm4gdGVzdDI7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgi
LCB7CisgIHZhbHVlOiAxNiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxz
ZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAi
bmFtZSIsIHsKKyAgdmFsdWU6ICJ0ZXN0MiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVy
YWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitmID0gcmVhbG0uZXZh
bHVhdGUoYCgoKSA9PiB7CisgIGxldCBmID0gZnVuY3Rpb24oKSB7CisgIH0KKyAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGYsICJsZW5ndGgiLCB7CisgICAgdmFsdWU6IC1JbmZpbml0eSwKKyAgICB3
cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTog
dHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICJuYW1lIiwgeworICAgIHZh
bHVlOiAiMjciLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
KyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1cm4gZjsKK30pKClgKTsKKworc2hv
dWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDAsCisgIHdyaXRhYmxl
OiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30p
Oworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUiLCB7CisgIHZhbHVlOiAiMjciLAorICB3
cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRy
dWUsCit9KTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQgZiA9IGZ1bmN0
aW9uKCkgeworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibGVuZ3RoIiwgeworICAg
IHZhbHVlOiAtOS43NCwKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGYsICJuYW1lIiwgeworICAgIHZhbHVlOiA1NywKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBj
b25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJu
IGY7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZh
bHVlOiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25m
aWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgewor
ICB2YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitsZXQgaW5uZXJMb2cgPSByZWFsbS5ldmFsdWF0
ZShgKCgpID0+IHsKKyAgZ2xvYmFsVGhpcy5fbG9nID0gW107CisgIGdsb2JhbFRoaXMubG9nID0g
ZnVuY3Rpb24gbG9nKGl0ZW0pIHsKKyAgICBnbG9iYWxUaGlzLl9sb2cucHVzaChpdGVtKTsKKyAg
fTsKKworICByZXR1cm4gZnVuY3Rpb24gbG9nKCkgeworICAgIGxldCBsb2cgPSBnbG9iYWxUaGlz
Ll9sb2c7CisgICAgZ2xvYmFsVGhpcy5fbG9nID0gW107CisgICAgcmV0dXJuIEpTT04uc3RyaW5n
aWZ5KGxvZyk7CisgIH07Cit9KSgpYCk7CisKK2Z1bmN0aW9uIGxvZygpIHsKKyAgbGV0IHJlc3Vs
dCA9IEpTT04ucGFyc2UoaW5uZXJMb2coKSk7CisgIHNob3VsZEJlKEFycmF5LmlzQXJyYXkocmVz
dWx0KSwgdHJ1ZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2YgPSByZWFsbS5ldmFsdWF0ZShg
KCgpID0+IHsKKyAgbGV0IHRhcmdldCA9IChmdW5jdGlvbigpIHsKKyAgICBsb2coXGBjYWxsZWRc
YCk7CisgIH0pOworICBsZXQgcCA9IG5ldyBQcm94eSh0YXJnZXQsIHsKKyAgICBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodCwgcCkgeworICAgICAgbG9nKFxgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yIFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHkoLi4uYXJn
dW1lbnRzKTsKKyAgICB9LAorICAgIGdldCh0LCBwKSB7CisgICAgICBsb2coXGBnZXQgXCR7cH1c
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAg
IGRlZmluZVByb3BlcnR5KHQsIHAsIG8pIHsKKyAgICAgIGxvZyhcYGRlZmluZVByb3BlcnR5IFwk
e3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICAgIGdldFByb3RvdHlwZU9mKHQpIHsKKyAgICAgIGxvZyhcYGdldFByb3Rv
dHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoLi4uYXJndW1l
bnRzKTsKKyAgICB9LAorICAgIHNldFByb3RvdHlwZU9mKHQsIHYpIHsKKyAgICAgIGxvZyhcYHNl
dFByb3RvdHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBlT2YoLi4u
YXJndW1lbnRzKTsKKyAgICB9LAorICAgIGlzRXh0ZW5zaWJsZSh0KSB7CisgICAgICBsb2coXGBp
c0V4dGVuc2libGVcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUoLi4uYXJn
dW1lbnRzKTsKKyAgICB9LAorICAgIHByZXZlbnRFeHRlbnNpb25zKHQpIHsKKyAgICAgIGxvZyhc
YHByZXZlbnRFeHRlbnNpb25zXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QucHJldmVudEV4dGVu
c2lvbnMoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGhhcyh0LCBwKSB7CisgICAgICBsb2co
XGBoYXMgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5oYXMoLi4uYXJndW1lbnRzKTsK
KyAgICB9LAorICAgIHNldCh0LCBwLCB2KSB7CisgICAgICBsb2coXGBzZXQgXCR7cH1cYCk7Cisg
ICAgICByZXR1cm4gUmVmbGVjdC5zZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGRlbGV0
ZSh0LCBwKSB7CisgICAgICBsb2coXGBkZWxldGUgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVm
bGVjdC5kZWxldGUoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIG93bktleXModCkgeworICAg
ICAgbG9nKFxgb3duS2V5c1xgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMoLi4uYXJn
dW1lbnRzKTsKKyAgICB9LAorICAgIGFwcGx5KCkgeworICAgICAgbG9nKFxgYXBwbHlcYCk7Cisg
ICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgY29u
c3RydWN0KCkgeworICAgICAgbG9nKFxgY29uc3RydWN0XGApOworICAgICAgcmV0dXJuIFJlZmxl
Y3QuYXJndW1lbnRMaXN0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgfSk7CisgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICJsZW5ndGgiLCB7CisgICAgZ2V0KCkgeworICAgICAgbG9n
KCJsZW5ndGggZ2V0dGVyIik7CisgICAgICByZXR1cm4gSW5maW5pdHk7CisgICAgfSwKKyAgICBz
ZXQoKSB7CisgICAgICBsb2coImxlbmd0aCBzZXR0ZXIiKTsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisg
IH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAibmFtZSIsIHsKKyAgICBnZXQo
KSB7CisgICAgICBsb2coIm5hbWUgZ2V0dGVyIik7CisgICAgICByZXR1cm4gSW5maW5pdHk7Cisg
ICAgfSwKKyAgICBzZXQoKSB7CisgICAgICBsb2coIm5hbWUgc2V0dGVyIik7CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJs
ZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJuIHA7Cit9KSgpYCk7CisKK2YoKTsKK3Nob3VsZEhhdmVE
ZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiBJbmZpbml0eSwKKyAgd3JpdGFibGU6
IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7
CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICIiLAorICB3cml0
YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUs
Cit9KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVuZ3RoIiwKKyAgImxlbmd0aCBnZXR0
ZXIiLAorICAiZ2V0IG5hbWUiLAorICAibmFtZSBnZXR0ZXIiLAorICAiYXBwbHkiLAorICAiY2Fs
bGVkIgorXSk7CitmKCk7CitzaG91bGRCZShsb2coKSwgWyJhcHBseSIsICJjYWxsZWQiXSk7CisK
K2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0IHRhcmdldCA9IChmdW5jdGlvbigp
IHsKKyAgICBsb2coXGBjYWxsZWQgMlxgKTsKKyAgfSk7CisgIGxldCBwID0gbmV3IFByb3h5KHRh
cmdldCwgeworICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBwKSB7CisgICAgICBsb2co
XGBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRPd25Qcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0KHQsIHApIHsK
KyAgICAgIGxvZyhcYGdldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmdldCguLi5h
cmd1bWVudHMpOworICAgIH0sCisgICAgZGVmaW5lUHJvcGVydHkodCwgcCwgbykgeworICAgICAg
bG9nKFxgZGVmaW5lUHJvcGVydHkgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5kZWZp
bmVQcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0UHJvdG90eXBlT2YodCkg
eworICAgICAgbG9nKFxgZ2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5n
ZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0UHJvdG90eXBlT2Yo
dCwgdikgeworICAgICAgbG9nKFxgc2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVm
bGVjdC5zZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaXNFeHRlbnNp
YmxlKHQpIHsKKyAgICAgIGxvZyhcYGlzRXh0ZW5zaWJsZVxgKTsKKyAgICAgIHJldHVybiBSZWZs
ZWN0LmlzRXh0ZW5zaWJsZSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgcHJldmVudEV4dGVu
c2lvbnModCkgeworICAgICAgbG9nKFxgcHJldmVudEV4dGVuc2lvbnNcYCk7CisgICAgICByZXR1
cm4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAg
aGFzKHQsIHApIHsKKyAgICAgIGxvZyhcYGhhcyBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZs
ZWN0LmhhcyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0KHQsIHAsIHYpIHsKKyAgICAg
IGxvZyhcYHNldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldCguLi5hcmd1bWVu
dHMpOworICAgIH0sCisgICAgZGVsZXRlKHQsIHApIHsKKyAgICAgIGxvZyhcYGRlbGV0ZSBcJHtw
fVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZSguLi5hcmd1bWVudHMpOworICAgIH0s
CisgICAgb3duS2V5cyh0KSB7CisgICAgICBsb2coXGBvd25LZXlzXGApOworICAgICAgcmV0dXJu
IFJlZmxlY3Qub3duS2V5cyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgYXBwbHkoKSB7Cisg
ICAgICBsb2coXGBhcHBseVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KC4uLmFyZ3Vt
ZW50cyk7CisgICAgfSwKKyAgICBjb25zdHJ1Y3QoKSB7CisgICAgICBsb2coXGBjb25zdHJ1Y3Rc
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5hcmd1bWVudExpc3QoLi4uYXJndW1lbnRzKTsKKyAg
ICB9LAorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgImxlbmd0aCIsIHsK
KyAgICBnZXQoKSB7IHJldHVybiB9LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVt
ZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAibmFt
ZSIsIHsKKyAgICB2YWx1ZTogNTcsCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1l
cmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVybiBwOworfSkoKWApOworCitmKCk7CitzaG91bGRI
YXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMCwKKyAgd3JpdGFibGU6IGZh
bHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7Citz
aG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICIiLAorICB3cml0YWJs
ZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9
KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVuZ3RoIiwKKyAgImdldCBuYW1lIiwKKyAg
ImFwcGx5IiwKKyAgImNhbGxlZCAyIgorXSk7CitmKCk7CitzaG91bGRCZShsb2coKSwgWyJhcHBs
eSIsICJjYWxsZWQgMiJdKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsK
KyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxl
OiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgd3JpdGFi
bGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAor
fSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450922</attachid>
            <date>2022-02-04 11:28:43 -0800</date>
            <delta_ts>2022-02-08 11:28:49 -0800</delta_ts>
            <desc>patch-for-review</desc>
            <filename>bug-235382-20220204192842.patch</filename>
            <type>text/plain</type>
            <size>80665</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg2ZWVjYjYwODZlYzQ2MDAwZTkyMzdmMDgwNzAxYzQ2OWVhNDY1Li4xMzY1YzUzYTYwY2Q1ZDFj
YjQ4Y2I0ODM3YTVkM2ZjMzZiYmJiMzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAyMi0wMS0zMSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKiBqaXQv
VGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDIt
MDQgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJldmVydGluZyByMjg4OTk2LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDc4ODM3N2Y2NzEzOTlhMTNiMGI1MTUzMWUwYzI5YzI0NzQzZGI4MjEuLjI3Nzdi
ZTk5YWQxYjdjMDlkMmI2Yzk1MDIyN2RhYzNlMTczYmNiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rv
ci5oCiAgICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAogICAgIHJ1bnRpbWUv
SlNQcm94eS5oCisgICAgcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKICAgICBydW50aW1lL0pT
UnVuTG9vcFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNTY3Jp
cHRGZXRjaFBhcmFtZXRlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YzFk
Y2JkMmE2NzRhNTEzYjA3MTE2MzAwYmM4MzEzNTAwZTZkYzJmLi5kMDQ4MDkxOGNiMDQ3ZDQ0OTgz
ZWRkNWU2ZDdhMDFiZTUzZWVlZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTEzMyw2ICsxMTMzLDcgQEAKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFs
RnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVu
Y3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZEMDRENDFEN0FCMjkx
MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNUI0MDMyODAyNzk4RDIwNjAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDAz
MjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMy
M0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlv
bi5oICovOyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblBy
b3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUI3MENGREExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLzsg
fTsKIAkJNUI3MENGRTIxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENG
REMxREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovOyB9OwpA
QCAtNDA4NCw2ICs0MDg1LDggQEAKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50
UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDRE
MTFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBX
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2FzbUNhbGxpbmdDb252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVC
NDAzMjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTUmVtb3RlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0
MDMyN0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNSZW1vdGVGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVu
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBc3luY0Z1
bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREExREI2OUU1
QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFERjI0MDAz
NDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUzQ0UxNjEz
NkFBNTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZBQTUwMDlG
MTdEMCAvKiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpT
UmVtb3RlRnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBK
U1JlbW90ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpT
UnVuTG9vcFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29w
ZS5jcHAgKi8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAw
MzMxQjg0IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJB
MDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENG
M0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQKaW5kZXggNzAwYzdiYTk2MmQ1MDAyN2ZiYzY2NDhiOTVmNTAyNzZlMGU2
Yjc3Yi4uM2E5NWM1OGIzZDk5YjliY2U4MzJjMDE3NTgyZGY5NTg0ZDhlY2E4YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtOTAyLDYgKzkwMiw3IEBAIHJ1bnRpbWUvSlNQcm9taXNl
Q29uc3RydWN0b3IuY3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGlt
ZS9KU1JlbW90ZUZ1bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRp
bWUvSlNTY29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIy
MGI0Nzk0Y2QzMTIwNTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3
YjBhOWFmYTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaApAQCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYo
RlRMVGh1bmspIFwKICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVu
Y3Rpb25UaHVuaykgXAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRo
dW5rKSBcCiAgICAgdihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEz
ODQ2YmM4ODhkLi5hMDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODks
NiArMTg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25D
b3VudHMpIFwKICAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBt
YWNybyhzZW50aW5lbFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBc
CisgICAgbWFjcm8oaXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVBy
b3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVBy
b3RvdHlwZS5qcwppbmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRi
Li5hMmI0MTBiMzY3ZjRmYzkyODU3NmQxOGY3ZTdmMzc4YjQzZWZiYzAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpz
CkBAIC0zMiwzOSArMzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93
UmVhbG0sIHRhcmdldCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUo
dGFyZ2V0KSkgewotICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8p
IHsKLSAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAg
ICAgdmFyIHdyYXBwZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dS
ZWFsbWAgc2luY2UgdG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSBy
ZWFsbSBBIHRvIHdvcmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8v
IHdyYXAgdGhlIGFyZ3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVm
b3JlCi0gICAgICAgICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAg
ICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFm
cm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHko
QHVuZGVmaW5lZCwgd3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50
b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAg
ICAgICAgICAgICAgIEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShz
aGFkb3dSZWFsbSwgIihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1
bHQpOwotICAgICAgICB9OwotICAgICAgICBkZWxldGUgd3JhcHBlZFsnbmFtZSddOwotICAgICAg
ICBkZWxldGUgd3JhcHBlZFsnbGVuZ3RoJ107Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZ1
bmN0aW9uICh3cmFwKSB3aWxsIHJ1biB3aXRoIHRoZSBpbmN1YmF0aW5nIHJlYWxtCi0gICAgICAg
IC8vIGFjdGl2ZSwgd2Ugb25seSBuZWVkIHRvIGZpeCB0aGUgcHJvdG90eXBlIG9uIGB3cmFwcGVk
YCBpZiB3ZSBhcmUKLSAgICAgICAgLy8gbW92aW5nIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbmN1
YmF0aW5nIHJlYWxtIHRvIHRoZSBzaGFkb3cgcmVhbG0KLSAgICAgICAgaWYgKCFmcm9tU2hhZG93
UmVhbG0pCi0gICAgICAgICAgICBAbW92ZUZ1bmN0aW9uVG9SZWFsbSh3cmFwcGVkLCBzaGFkb3dS
ZWFsbSk7Ci0gICAgICAgIHJldHVybiB3cmFwcGVkOworICAgICAgICByZXR1cm4gQGNyZWF0ZVJl
bW90ZUZ1bmN0aW9uKHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxt
KTsKICAgICB9IGVsc2UgaWYgKEBpc09iamVjdCh0YXJnZXQpKSB7CiAgICAgICAgIEB0aHJvd1R5
cGVFcnJvcigidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9y
IHByaW1pdGl2ZSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGU2NmU4ZmRiMTZhZjBmNjg5ZjBhYmVhNDgwYWVj
YjQ1MmFjOGI5ZjEuLmRmOTk0MmYyMTI1M2IwODI2ZDNhN2Q5MDA0ODhmNmRjYmRkMjc5ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQu
aApAQCAtMTE3LDYgKzExNyw4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY3JlYXRl
UHJpdmF0ZVN5bWJvbCwgbnVsbHB0cikgXAogICAgIHYoZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBudWxscHRyKSBcCiAgICAgdihzZW50aW5lbFN0cmluZywgbnVsbHB0cikgXAorICAgIHYo
Y3JlYXRlUmVtb3RlRnVuY3Rpb24sIG51bGxwdHIpIFwKKyAgICB2KGlzUmVtb3RlRnVuY3Rpb24s
IG51bGxwdHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUs
IGNvZGUpIG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDM1M2ZmMGRl
OGU3NDdiODY5YjhhNTEyMzAxNTU5YzZiMDllYTZjZTMuLjYyNmEwZjJjYWM5NGI4ZDlmNDYyNjVl
NmNlNTZiZTI5NTJkNjU3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJK
SVRXb3JrbGlzdElubGluZXMuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09i
amVjdFJlZi5oIgpAQCAtMzIxNyw2ICszMjE4LDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVG
SU5FX01FTUJFUl9TTE9XKG1vZHVsZU5hbWVzcGFjZU9iamVjdFNwYWNlLCBtb2R1bGVOYW1lc3AK
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlv
blNwYWNlLCBuYXRpdmVTdGRGdW5jdGlvbkhlYXBDZWxsVHlwZSwgSlNOYXRpdmVTdGRGdW5jdGlv
bikgLy8gSGFzaDoweDcwZWQ2MWU0CiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cocHJveHlPYmplY3RTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlPYmplY3QpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgUHJveHlSZXZva2UpIC8vIEhhc2g6MHhiNTA2YTkzOQorRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3BhY2UsIGNl
bGxIZWFwQ2VsbFR5cGUsIEpTUmVtb3RlRnVuY3Rpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSX1NMT1coc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxl
Q2VsbEhlYXBDZWxsVHlwZSwgU2NvcGVkQXJndW1lbnRzVGFibGUpCiBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UsIGRlc3Ry
dWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUsIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzKQogRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSwgZGVz
dHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgSlNTY3JpcHRGZXRjaGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCmluZGV4IDM3ZmEzZjExM2NlOGI1YjU0YjI0ZTJhODc0NDE2ODc0MTA1MTJj
NzUuLjNjZDA2OTY1Yjg4NGQ1YWFkNzhmOTY5MTE4MjRjM2ZkMDhjZDJkOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgKQEAgLTkxOSw2ICs5MTksNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAg
IERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAg
ICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisg
ICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNl
KQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRz
VGFibGVTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlw
dEZldGNoUGFyYW1ldGVyc1NwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDkxZWE0NTI3ZmRmNjZiMmIxYmMzMWQ2
OWY1NTVlN2U1ZmYzZTY3Ny4uM2E2Mjc5ODBjNWQxZjhhZWZiMjRiNjhiZDJhOTRmNTc1OTRjNDM0
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQu
aCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNNb2R1bGVS
ZWNvcmQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJp
bmcuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiTExJ
bnRUaHVua3MuaCIKQEAgLTU1NSwxMiArNTU2LDEzIEBAIENhdGNoSW5mbzo6Q2F0Y2hJbmZvKGNv
bnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBXYXNtOjpDYWxsZWUqIGNhbGxl
CiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAgIFVud2luZEZ1bmN0b3IoVk0m
IHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgSlNWYWx1ZSB0
aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRjaEluZm8mIGhhbmRsZXIpCisg
ICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgYm9vbCBpc1Rl
cm1pbmF0aW9uLCBKU1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxvY2sqJiBjb2RlQmxvY2ssIENh
dGNoSW5mbyYgaGFuZGxlciwgYm9vbCYgc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICAgICAgOiBt
X3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFtZSkKICAgICAgICAgLCBtX2lz
VGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICwgbV9zZWVuUmVtb3Rl
RnVuY3Rpb24oc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICB7CiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewpAQCAtNjA5LDYgKzYxMSwxMyBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAgIGlmICghbV9jYWxsRnJhbWUt
PmlzV2FzbUZyYW1lKCkgJiYgIEpTQzo6aXNSZW1vdGVGdW5jdGlvbihtX3ZtLCBtX2NhbGxGcmFt
ZS0+anNDYWxsZWUoKSkgJiYgIW1faXNUZXJtaW5hdGlvbikgeworICAgICAgICAgICAgLy8gQ29u
dGludWUgc2VhcmNoaW5nIGZvciBhIGhhbmRsZXIsIGJ1dCBtYXJrIHRoYXQgYSBtYXJzaGFsbGlu
ZyBmdW5jdGlvbiB3YXMgb24gdGhlIHN0YWNrIHNvIHRoYXQgd2UgY2FuCisgICAgICAgICAgICAv
LyB0cmFuc2xhdGUgdGhlIGV4Y2VwdGlvbiBiZWZvcmUganVtcGluZyB0byB0aGUgaGFuZGxlci4K
KyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VW53aW5kRnVuY3Rvcio+KHRoaXMpLT5tX3NlZW5SZW1v
dGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcobV92
bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwpAQCAtNjU3LDggKzY2NiwzOSBAQCBwcml2YXRlOgog
ICAgIGNvbnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9j
YXRjaGFibGVGcm9tV2FzbSB7IGZhbHNlIH07CiAjZW5kaWYKKworICAgIGJvb2wmIG1fc2VlblJl
bW90ZUZ1bmN0aW9uOwogfTsKIAorLy8gUmVwbGFjZSBhbiBleGNlcHRpb24gd2hpY2ggcGFzc2Vz
IGFjcm9zcyBhIG1hcnNoYWxsaW5nIGJvdW5kYXJ5IHdpdGggYSBUeXBlRXJyb3IgZm9yIGl0cyBo
YW5kbGVyJ3MgZ2xvYmFsIG9iamVjdC4KK3N0YXRpYyB2b2lkIHNhbml0aXplUmVtb3RlRnVuY3Rp
b25FeGNlcHRpb24oVk0mIHZtLCBDYWxsRnJhbWUqIGhhbmRsZXJDYWxsRnJhbWUsIEV4Y2VwdGlv
biogZXhjZXB0aW9uKQoreworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNUZXJtaW5hdGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBoYW5kbGVyQ2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CisKKyAgICAvLyBBdm9pZCB1c2VyLW9ic2VydmFibGUgVG9TdHJpbmco
KQorICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmc7CisgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlz
UHJpbWl0aXZlKCkpCisgICAgICAgIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgZWxzZSBpZiAoZXhjZXB0aW9uVmFsdWUuYXND
ZWxsKCktPmluaGVyaXRzPEVycm9ySW5zdGFuY2U+KHZtKSkKKyAgICAgICAgZXhjZXB0aW9uU3Ry
aW5nID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgp
KS0+c2FuaXRpemVkTWVzc2FnZVN0cmluZyhnbG9iYWxPYmplY3QpOworCisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7IC8vIFdlIG11c3Qgbm90IGhhdmUgZW50ZXJlZCBKUyBhdCB0aGlz
IHBvaW50CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSk7Cit9CisKIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2lu
ZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwpAQCAtNjc4LDggKzcx
OCwxMyBAQCBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZt
LCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdAogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4
Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4K
ICAgICBDYXRjaEluZm8gY2F0Y2hJbmZvOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwg
Y2FsbEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlv
blZhbHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CisgICAgYm9vbCBzZWVuUmVtb3RlRnVuY3Rp
b24gPSBmYWxzZTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0u
aXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJs
b2NrLCBjYXRjaEluZm8sIHNlZW5SZW1vdGVGdW5jdGlvbik7CiAgICAgU3RhY2tWaXNpdG9yOjp2
aXNpdDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxG
cmFtZSwgdm0sIGZ1bmN0b3IpOworCisgICAgaWYgKHNlZW5SZW1vdGVGdW5jdGlvbikKKyAgICAg
ICAgc2FuaXRpemVSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbih2bSwgY2FsbEZyYW1lLCBleGNlcHRp
b24pOworCiAgICAgaWYgKHZtLmhhc0NoZWNrcG9pbnRPU1JTaWRlU3RhdGUoKSkKICAgICAgICAg
dm0ucG9wQWxsQ2hlY2twb2ludE9TUlNpZGVTdGF0ZVVudGlsKGNhbGxGcmFtZSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGY3MDhjYjdlMWZi
YjgyNjBjZTc1NzVkNWQ2ODFlZDc1YTIzZTBkM2QuLmY2ODNiMGMxZjhhZjhjMDZkMWNkYzdjNzlh
MjhkMTU1MWQwM2MxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaApAQCAtMTM0NSw2ICsxMzQ1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaml0QXNzZXJ0
SXNOdWxsKEdQUlJlZyk7CiAgICAgdm9pZCBqaXRBc3NlcnRUYWdzSW5QbGFjZSgpOwogICAgIHZv
aWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNhbmUoKTsKKyAgICBpbmxpbmUgdm9pZCBqaXRBc3Nl
cnROb0V4Y2VwdGlvbihWTSYgdm0pIHsgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKHZtKTsg
fQogI2Vsc2UKICAgICB2b2lkIGppdEFzc2VydElzSW50MzIoR1BSUmVnKSB7IH0KICAgICB2b2lk
IGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHsgfQpAQCAtMTM1NSw2ICsxMzU2LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgaml0QXNzZXJ0SXNOdWxsKEdQUlJlZykgeyB9CiAgICAgdm9pZCBqaXRB
c3NlcnRUYWdzSW5QbGFjZSgpIHsgfQogICAgIHZvaWQgaml0QXNzZXJ0QXJndW1lbnRDb3VudFNh
bmUoKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydE5vRXhjZXB0aW9uKFZNJikgeyB9CiAjZW5kaWYK
IAogICAgIHZvaWQgaml0UmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKFZNJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA5MDhmZjA0N2ExYjFlYTMy
ZmE2MjdlYzkyYmU1OGUwZGMyNTUxNWQ0Li4yNTBiNzc5ZDYxNDBmMzk1ZDdjNjAyYjRhNjRkMGZi
MGVhNDUzYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNX
aXRoU2NvcGUuaCIKICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIgpAQCAtMTE1LDYgKzExNiw4NyBAQCBKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3JGcm9tVGh1bmssIHZvaWQsIChK
U0dsbwogICAgIEFTU0VSVCh2bS50YXJnZXRNYWNoaW5lUENGb3JUaHJvdyk7CiB9CiAKK3N0YXRp
YyBKU1ZhbHVlIGdldFdyYXBwZWRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogdGFyZ2V0R2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdmFsdWUpOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFi
bGUodm0pKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTUmVtb3RlRnVuY3Rp
b246OmNyZWF0ZSh2bSwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHZhbHVlLmFzQ2VsbCgpKSkpOworCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgInZhbHVlIHBhc3NpbmcgYmV0d2VlbiByZWFsbXMgbXVzdCBiZSBjYWxsYWJsZSBvciBw
cmltaXRpdmUiKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpT
VmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xv
YmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBB
U1NFUlQoaXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0dsb2JhbE9iamVjdCogdGFyZ2V0R2xv
YmFsT2JqZWN0ID0gY2FsbGVlLT50YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShnZXRXcmFwcGVkVmFs
dWUoZ2xvYmFsT2JqZWN0LCB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
V3JhcHBlZFZhbHVlRm9yQ2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24q
IGNhbGxlZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSkKK3sKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIEFTU0VSVChpc1JlbW90ZUZ1bmN0aW9uKHZt
LCBjYWxsZWUpKTsKKworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGdldFdyYXBw
ZWRWYWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJv
d1JlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rp
b24qIGNhbGxlZSkpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxl
ZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
KyAgICBBU1NFUlQoaXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24g
PSBzY29wZS5leGNlcHRpb24oKTsKKworICAgIC8vIFdlIHNob3VsZCBvbmx5IGJlIGhlcmUgd2hl
biAicmV0aHJvd2luZyIgYW4gZXhjZXB0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9u
KTsKKworICAgIGlmIChVTkxJS0VMWSh2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlv
bikpKSB7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBTdHJpbmcgZXhjZXB0aW9uU3RyaW5n
ID0gZXhjZXB0aW9uVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBFeGNlcHRp
b24qIHRvU3RyaW5nRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElL
RUxZKHRvU3RyaW5nRXhjZXB0aW9uICYmIHZtLmlzVGVybWluYXRpb25FeGNlcHRpb24odG9TdHJp
bmdFeGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICBpZiAoZXhj
ZXB0aW9uU3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCBleGNlcHRpb25TdHJpbmcpOworCisgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Cit9CisKIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4
IDRiNWQwMTFmOTA2YTMwMzJlMmE1Yjg1MGEzYTBiOWE0YzY4MzRiZjMuLmQ1ZTlmNWM3MDVhNTg5
MzkwNzExYmFmNzM3MGIwMDRiMjYxZmRiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCkBAIC01Miw2ICs1Miw3IEBAIGNsYXNzIEpTRnVuY3Rpb247CiBjbGFz
cyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTTGV4aWNhbEVudmlyb25tZW50OwogY2xhc3MgSlNP
YmplY3Q7CitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uOwogY2xhc3MgSlNTY29wZTsKIGNsYXNzIEpT
U3RyaW5nOwogY2xhc3MgSlNWYWx1ZTsKQEAgLTE1NSw2ICsxNTYsOSBAQCBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUsIHZvaWQsCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblZNSGFuZGxlRXhj
ZXB0aW9uLCB2b2lkLCAoVk0qKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rLCB2b2lkLCAoSlNHbG9iYWxPYmplY3Qq
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1
bHRJc05vdE9iamVjdCwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KikpOworSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JDYWxsZXIsIEVuY29kZWRKU1Zh
bHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1ZhbHVlKSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdldCwgRW5jb2RlZEpT
VmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKiwgRW5jb2RlZEpTVmFsdWUpKTsKK0pTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5j
b2RlZEpTVmFsdWUsIChKU1JlbW90ZUZ1bmN0aW9uKikpOwogCiBKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yLCB2b2lkLCAoQ29kZUJsb2Nr
KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25DYWxsQXJpdHlDaGVjaywg
aW50MzJfdCwgKEpTR2xvYmFsT2JqZWN0KikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDQxOWI2OThlZjgzYzk2ZmNiZDYwYWI5NWZkODFj
OGM2MzFkYzMxYjkuLmYzYjIyNWQwMDFiMzg5ZTNlNDAyMGYxNjliN2Q4N2Q4MDdjOGY5ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSklUVGh1
bmtzLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNSZW1vdGVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5rSklULmgi
CkBAIC0xNDIxLDYgKzE0MjIsMTkyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mIHZtKQogICAgICAgICBsaW5rQnVm
ZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlv
biBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQogCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IHJlbW90ZUZ1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSYgdm0pCit7Cisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKwor
ICAgIC8vIFNldCB1cCBvdXIgY2FsbCBmcmFtZS4KKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisgICAgaml0LnN0b3JlMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCksIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CisKKyAgICB1bnNpZ25lZCBleHRyYVN0YWNrTmVlZGVk
ID0gMDsKKyAgICBpZiAodW5zaWduZWQgc3RhY2tNaXNhbGlnbm1lbnQgPSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykgJSBzdGFja0FsaWdubWVudEJ5dGVzKCkpCisgICAgICAgIGV4dHJhU3RhY2tO
ZWVkZWQgPSBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSBzdGFja01pc2FsaWdubWVudDsKKworICAg
IC8vIFdlIG5lZWQgdG8gZm9yd2FyZCBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IHdlIHdlcmUg
cGFzc2VkLiBXZSBhcmVuJ3QgYWxsb3dlZCB0byBkbyBhIHRhaWwKKyAgICAvLyBjYWxsIGhlcmUg
YXMgZmFyIGFzIEkgY2FuIHRlbGwuIEF0IGxlYXN0IG5vdCBzbyBsb25nIGFzIHRoZSBnZW5lcmlj
IHBhdGggZG9lc24ndCBkbyBhIHRhaWwKKyAgICAvLyBjYWxsLCBzaW5jZSB0aGF0IHdvdWxkIGJl
IHdheSB0b28gd2VpcmQuCisKKyAgICAvLyBUaGUgZm9ybXVsYSBmb3IgdGhlIG51bWJlciBvZiBz
dGFjayBieXRlcyBuZWVkZWQgZ2l2ZW4gc29tZSBudW1iZXIgb2YgcGFyYW1ldGVycyAoaW5jbHVk
aW5nCisgICAgLy8gdGhpcykgaXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tBbGlnbigobnVt
UGFyYW1zICsgbnVtRnJhbWVMb2NhbHMgKyBDYWxsRnJhbWVIZWFkZXJTaXplKSAqIHNpemVvZihS
ZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpCisgICAgLy8KKyAgICAvLyBQcm9i
YWJseSB3ZSB3YW50IHRvIHdyaXRlIHRoaXMgYXM6CisgICAgLy8KKyAgICAvLyAgICAgc3RhY2tB
bGlnbigobnVtUGFyYW1zICsgbnVtRnJhbWVMb2NhbHMgKyAoQ2FsbEZyYW1lSGVhZGVyU2l6ZSAt
IENhbGxlckZyYW1lQW5kUENTaXplKSkgKiBzaXplb2YoUmVnaXN0ZXIpKQorICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IG51bUZyYW1lTG9jYWxzID0gMTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9v
cEluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoMCk7CisKKyAgICBqaXQubG9hZENlbGwo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIEdQUkluZm86OnJlZ1QxKTsKKwor
ICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRl
clNpemVJblJlZ2lzdGVycyAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycyArIG51
bUZyYW1lTG9jYWxzKSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQu
bHNoaWZ0MzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMyksIEdQUkluZm86OnJlZ1QyKTsK
KyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRC
eXRlcygpIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIEdQUkluZm86OnJlZ1QyKTsK
KworICAgIGlmIChleHRyYVN0YWNrTmVlZGVkKQorICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoZXh0cmFTdGFja05lZWRlZCksIEdQUkluZm86OnJlZ1QyKTsKKwor
ICAgIC8vIEF0IHRoaXMgcG9pbnQgcmVnVDEgaGFzIHRoZSBhY3R1YWwgYXJndW1lbnQgY291bnQs
IGFuZCByZWdUMiBoYXMgdGhlIGFtb3VudCBvZiBzdGFjayB3ZSB3aWxsIG5lZWQuCisgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgZW5vdWdoIHN0YWNrIHNwYWNlLgorCisgICAgaml0Lm5l
Z1B0cihHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGhhdmVTdGFja1NwYWNlID0gaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93T3JFcXVh
bCwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Modm0uYWRkcmVzc09mU29mdFN0YWNrTGlt
aXQoKSksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIC8vIFRocm93IFN0YWNrIE92ZXJmbG93IGV4
Y2VwdGlvbgorICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bS50b3BFbnRyeUZyYW1lKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQm91bmRGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWlu
KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9w
ZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKT4oR1BSSW5mbzo6cmVnVDMp
OworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yRnJvbVRodW5rKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAs
IE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3Bl
cmF0aW9uUHRyVGFnKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisKKyAg
ICBoYXZlU3RhY2tTcGFjZS5saW5rKCZqaXQpOworICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1Qy
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFNldCBgdGhp
c2AgdG8gdW5kZWZpbmVkCisgICAgLy8gTk9URTogbmVlZHMgY29uY2Vuc3VzIGluIFRDMzkgKGh0
dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL2lzc3Vlcy8zMjgpCisg
ICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVQ
YXlsb2FkU2xvdChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOwor
ICAgIGppdC5zdG9yZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBDQ2FsbEhlbHBlcnM6OmNh
bGxlZUFyZ3VtZW50U2xvdCgwKSk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSBKU1Zh
bHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MoR1BSSW5mbzo6cmVnVDQsIEdQUkluZm86OnJl
Z1QyKTsKKworICAgIC8vIEJlZm9yZSBwcm9jZXNzaW5nIHRoZSBhcmd1bWVudHMgbG9vcCwgY2hl
Y2sgdGhhdCB3ZSBoYXZlIGdlbmVyYXRlZCBKSVQgY29kZSBmb3IgY2FsbGluZworICAgIC8vIHRv
IGF2b2lkIHByb2Nlc3NpbmcgdGhlIGxvb3AgdHdpY2UgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgbm9Db2RlOworICAgIHsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZz
ZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBh
dXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8s
IEdQUkluZm86OnJlZ1QyLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpy
YXJlRGF0YVRhZykpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mRXhlY3V0YWJsZSgpIC0g
SlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIGhhc0V4
ZWN1dGFibGUubGluaygmaml0KTsKKworICAgICAgICBqaXQubG9hZFB0cigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMiwg
RXhlY3V0YWJsZUJhc2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVGb3JD
YWxsKSksCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIG5vQ29kZSA9IGpp
dC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5mbzo6cmVnVDIpOworICAg
IH0KKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCisgICAg
Ly8gQXJndW1lbnQgcHJvY2Vzc2luZyBsb29wOgorICAgIC8vIEZvciBlYWNoIGFyZ3VtZW50IChv
cmRlciBzaG91bGQgbm90IGJlIG9ic2VydmFibGUpOgorICAgIC8vICAgICBpZiB0aGUgdmFsdWUg
aXMgYSBQcmltaXRpdmUsIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUgYXJndW1lbnRz
LCBvdGhlcndpc2UKKyAgICAvLyAgICAgcGVyZm9ybSB3cmFwcGluZyBsb2dpYy4gSWYgdGhlIHdy
YXBwaW5nIGxvZ2ljIHJlc3VsdHMgaW4gYSBuZXcgSlNSZW1vdGVGdW5jdGlvbiwKKyAgICAvLyAg
ICAgY29weSBpdCBpbnRvIHRoZSBuZXcgY2FsbCBmcmFtZSdzIGFyZ3VtZW50cywgb3RoZXJ3aXNl
IGl0IG11c3QgaGF2ZSB0aHJvd24gYSBUeXBlRXJyb3IuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmUgPSBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpMYWJlbCBsb29wID0gaml0LmxhYmVsKCk7CisgICAgICAgIGppdC5sb2FkVmFsdWUo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50SW5jbHVk
aW5nVGhpcygwKSkuaW5kZXhlZEJ5KEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
RWlnaHQpLCB2YWx1ZVJlZ3MpOworCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgdmFs
dWVJc1ByaW1pdGl2ZTsKKyAgICAgICAgdmFsdWVJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5j
aElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICAgICAgdmFsdWVJc1ByaW1pdGl2ZS5hcHBlbmQo
aml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAgICAg
ICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDEsIGppdC5hZGRyZXNzRm9yKGxvb3BJbmRleCkp
OworCisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVGb3JUYXJnZXQp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisKKyAgICAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvclRhcmdl
dCk+KEdQUkluZm86OnJlZ1QwLCB2YWx1ZVJlZ3MpOworICAgICAgICBqaXQucHJlcGFyZUNhbGxP
cGVyYXRpb24odm0pOworICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVt
cElmRXhjZXB0aW9uKHZtKSk7CisKKyAgICAgICAgaml0LnNldHVwUmVzdWx0cyh2YWx1ZVJlZ3Mp
OworICAgICAgICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSksIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICBqaXQubG9hZFB0cihq
aXQuYWRkcmVzc0Zvcihsb29wSW5kZXgpLCBHUFJJbmZvOjpyZWdUMSk7CisKKyAgICAgICAgdmFs
dWVJc1ByaW1pdGl2ZS5saW5rKCZqaXQpOworICAgICAgICBqaXQuc3RvcmVWYWx1ZSh2YWx1ZVJl
Z3MsIENDYWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApLmluZGV4ZWRCeShHUFJJbmZv
OjpyZWdUMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSk7CisgICAgICAgIGppdC5icmFuY2hT
dWIzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEp
LCBHUFJJbmZvOjpyZWdUMSkubGlua1RvKGxvb3AsICZqaXQpOworCisgICAgICAgIGRvbmUubGlu
aygmaml0KTsKKyAgICB9CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIEpTUmVtb3RlRnVuY3Rpb246Om9mZnNldE9mVGFyZ2V0RnVuY3Rpb24o
KSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc3RvcmVDZWxsKEdQUkluZm86OnJlZ1QyLCBD
Q2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKwor
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMiwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgIGF1dG8gaGFzRXhlY3V0YWJsZSA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVy
czo6WmVybywgR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUo
KSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVnVDApOworICAgIGhhc0V4
ZWN1dGFibGUubGluaygmaml0KTsKKworICAgIGppdC5sb2FkUHRyKAorICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCwgRXhlY3V0YWJsZUJh
c2U6Om9mZnNldE9mSklUQ29kZVdpdGhBcml0eUNoZWNrRm9yKENvZGVGb3JDYWxsKSksCisgICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKKworICAgIC8vIEJhc2VkIG9uIHRoZSBjaGVjayBhYm92ZSwg
d2Ugc2hvdWxkIGJlIGdvb2Qgd2l0aCB0aGlzLiBPbiBBUk02NCwgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uIHdpbGwgZG8gdGhpcy4KKyNpZiBBU1NFUlRfRU5BQkxFRCAmJiAhQ1BVKEFSTTY0RSkKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBjaGVja05vdE51bGwgPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihUR0ludmFsaWRQb2ludGVyKTsKKyAgICAgICAgY2hlY2tOb3RO
dWxsLmxpbmsoJmppdCk7CisgICAgfQorI2VuZGlmCisKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRp
b24oaml0LCBHUFJJbmZvOjpyZWdUMCwgSlNFbnRyeVB0clRhZyk7CisgICAgaml0LmNhbGwoR1BS
SW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcpOworCisgICAgLy8gV3JhcCByZXR1cm4gdmFsdWUK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworI2VuZGlmCisK
KyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHJlc3VsdElzUHJpbWl0aXZlOworICAgIHJlc3Vs
dElzUHJpbWl0aXZlLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RDZWxsKHJlc3VsdFJlZ3MpKTsKKyAg
ICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90T2JqZWN0KHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKSk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3JhcHBlZFZh
bHVlRm9yQ2FsbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisKKyAg
ICBqaXQubG9hZENlbGwoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9yQ2FsbGVyKT4oR1BSSW5mbzo6cmVnVDIsIHJlc3Vs
dFJlZ3MpOworICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgaml0LmNhbGwo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICBleGNlcHRpb25DaGVj
a3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKHZtKSk7CisKKyAgICByZXN1bHRJc1By
aW1pdGl2ZS5saW5rKCZqaXQpOworICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IGppdC5yZXQoKTsKKworICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bS50b3BFbnRyeUZy
YW1lKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uTG9va3VwRXhj
ZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmdm0pKTsKKyAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25Mb29r
dXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKwor
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKKworICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6UmVtb3Rl
RnVuY3Rpb25UaHVuayk7CisgICAgbGlua0J1ZmZlci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUVGh1bmtQdHJUYWc+KHZtLmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbFdpdGhv
dXRTYXZlZFRhZ3Modm0pKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIGxp
bmtCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIHJlbW90ZSBm
dW5jdGlvbiBjYWxscyIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApp
bmRleCBhOWZlZWVhOTI0YWUwMDc4ZDg0NTFlMTcyYzRjNDk0NWRmMWQ1ZWUxLi41ODllNzAwNDY0
M2EyMjUzNzI1YWYyYmI4ZjBmZjA1ZDMzMWU3YTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKQEAgLTgyLDYgKzgyLDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiB0cnVuY1RodW5rR2VuZXJhdG9yKFZNJik7CiAKIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gYm91bmRGdW5jdGlvbkNhbGxHZW5lcmF0
b3IoVk0mKTsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVG
dW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0mKTsKKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktT
KQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBjaGVja0V4Y2VwdGlvbkdl
bmVyYXRvcihWTSYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGRmMTgwZmJhZDFj
NzkxZWM3M2NmNmI5Y2EzZjRiNDQyOGM0NmJhODQuLmY0Yjk4OTdjN2QzMWQwODJmYzU0NjdkZmE4
ZGNlYjVjMTU1MTM1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAj
aW5jbHVkZSAiSlNCaWdJbnQuaCIKICNpbmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2UuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCkBAIC0zNjYsNiArMzY3LDcgQEAgc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJFdmFsU2NyaXB0KTsKIHN0
YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR0MpOwogc3RhdGlj
IEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3Rz
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyR2xvYmFs
T2JqZWN0Rm9yKTsKK3N0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFySXNSZW1vdGVGdW5jdGlvbik7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbkRvbGxhckFnZW50U3RhcnQpOwogc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJ
T04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlY2VpdmVCcm9hZGNhc3QpOwogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFJlcG9ydCk7CkBAIC02NDksNiAr
NjUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImdjIiwg
ZnVuY3Rpb25Eb2xsYXJHQywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmli
dXRlOjpOb25lKSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJjbGVhcktlcHRP
YmplY3RzIiwgZnVuY3Rpb25Eb2xsYXJDbGVhcktlcHRPYmplY3RzLCAwLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sIGRvbGxhciwgImdsb2JhbE9iamVjdEZvciIsIGZ1bmN0aW9uRG9sbGFyR2xvYmFsT2JqZWN0
Rm9yLCAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsK
KyAgICAgICAgYWRkRnVuY3Rpb24odm0sIGRvbGxhciwgImlzUmVtb3RlRnVuY3Rpb24iLCBmdW5j
dGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICAKICAgICAgICAgZG9sbGFyLT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJnbG9iYWwiKSwgZ2xvYmFsVGhpcygp
KTsKICAgICAgICAgZG9sbGFyLT5wdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgIklzSFRNTEREQSIpLApAQCAtMjA4NCw2ICsyMDg3LDE4IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihmdW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvciwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFySXNS
ZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3Qs
ICJOb3QgZW5vdWdoIGFyZ3VtZW50cyJfcykpKTsKKworICAgIEpTVmFsdWUgYXJnID0gY2FsbEZy
YW1lLT5hcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihp
c1JlbW90ZUZ1bmN0aW9uKHZtLCBhcmcpKSk7Cit9CisKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhckFnZW50U3RhcnQsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAppbmRleCA2NzQyMDY1MjNkMWM0YmNkZWU4YzUwMGEwNzEzMTYxNWMyNDFlNThhLi4wMTc2YTI1
NWQyY2I1MzdiZmY3YzY2NGU4ODFmMTRkZTVhYTI5YjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcApAQCAtMTYzLDggKzE2Myw5IEBAIFN0
cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRNZXNzYWdlU3RyaW5nKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAgICAgICAgIG1lc3NhZ2VWYWx1ZSA9IG1lc3NhZ2VTbG90LmdldFZh
bHVlKGdsb2JhbE9iamVjdCwgbWVzc2FnZVByb3BlcnROYW1lKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgaWYgKCFtZXNzYWdlVmFsdWUpCisgICAgaWYgKCFt
ZXNzYWdlVmFsdWUgfHwgIW1lc3NhZ2VWYWx1ZS5pc1ByaW1pdGl2ZSgpKQogICAgICAgICByZXR1
cm4geyB9OworCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtZXNzYWdlVmFsdWUudG9X
VEZTdHJpbmcoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuY3BwCmluZGV4IGZmNWYxOTI0NjkwZjYyZjQ4YzUxMzY1YjUyZTZjNTYz
YjRlNjI4OWQuLmI4MTc1OWJjYTdlYThkNTQyYmM5MmQxMWZmMjg3YjUwZDgyZjM3NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmNwcApAQCAtMjA1LDYgKzIw
NSw4IEBAIGNvbnN0IGNoYXIqIGludHJpbnNpY05hbWUoSW50cmluc2ljIGludHJpbnNpYykKICAg
ICAgICAgcmV0dXJuICJJc1R5cGVkQXJyYXlWaWV3SW50cmluc2ljIjsKICAgICBjYXNlIEJvdW5k
RnVuY3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gIkJvdW5kRnVuY3Rpb25DYWxs
SW50cmluc2ljIjsKKyAgICBjYXNlIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKKyAgICAg
ICAgcmV0dXJuICJSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMiOwogICAgIGNhc2UgSlNNYXBH
ZXRJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiAiSlNNYXBHZXRJbnRyaW5zaWMiOwogICAgIGNh
c2UgSlNNYXBIYXNJbnRyaW5zaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJp
bnNpYy5oCmluZGV4IDhlNjhlN2U3NGZiNzhjZGJkMzMyNGNmYmYwYTI1ZWQ2ZDIwZDZkNTguLjRh
ZTM2NTFiNTc1ZTIzMTU4YmY2ODk2MGI2ZGNjYzA5YTU3YmFmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCkBAIC0xMTgsNiArMTE4LDcgQEAgZW51bSBJbnRy
aW5zaWMgOiB1aW50OF90IHsKICAgICBUeXBlZEFycmF5RW50cmllc0ludHJpbnNpYywKICAgICBJ
c1R5cGVkQXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kRnVuY3Rpb25DYWxsSW50cmluc2lj
LAorICAgIFJlbW90ZUZ1bmN0aW9uQ2FsbEludHJpbnNpYywKICAgICBKU01hcEdldEludHJpbnNp
YywKICAgICBKU01hcEhhc0ludHJpbnNpYywKICAgICBKU01hcFNldEludHJpbnNpYywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKaW5kZXggNjhjMGU1YmMyZWEwNGIzMDJkYzQz
ZDI0OGFiNTE4OGY0YjNlMzBmZi4uYTY5OTMxNTkwOTljY2MxYjczOTZhOTdjNThmZDRlZTMxYTVj
MTgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmgKQEAgLTk5LDYgKzk5
LDcgQEAgc3RydWN0IEpTVHlwZVJhbmdlIHsKICAgICBtYWNybyhKU1N5bWJvbFRhYmxlT2JqZWN0
LCBKU1R5cGU6Okdsb2JhbE9iamVjdFR5cGUsIEpTVHlwZTo6TW9kdWxlRW52aXJvbm1lbnRUeXBl
KSBcCiAgICAgbWFjcm8oSlNTY29wZSwgSlNUeXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5cGU6
OldpdGhTY29wZVR5cGUpIFwKICAgICBtYWNybyhTdHJpbmdPYmplY3QsIEpTVHlwZTo6U3RyaW5n
T2JqZWN0VHlwZSwgSlNUeXBlOjpEZXJpdmVkU3RyaW5nT2JqZWN0VHlwZSkgXAorICAgIG1hY3Jv
KFNoYWRvd1JlYWxtT2JqZWN0LCBKU1R5cGU6OlNoYWRvd1JlYWxtVHlwZSwgSlNUeXBlOjpTaGFk
b3dSZWFsbVR5cGUpIFwKIAogCiAvLyBGb3J3YXJkIGRlY2xhcmUgdGhlIGNsYXNzZXMgYmVjYXVz
ZSB0aGV5IG1heSBub3QgYWxyZWFkeSBleGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKaW5kZXggOGE2MGE5ZjllOGY2Njk0MmI1Yjg1YzVkYTVhYjUx
NjZhNTg4MzRkMC4uMjk3OGE3YTk1YzAyZDlmYTJhMGIxMDNkMDdlYmRmNjM1NmNkMzFiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNUb1dhc21JQ0NhbGxlZS5oIgogI2luY2x1ZGUgIk9iamVj
dENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCkBAIC0xMjMsOCAr
MTI0LDggQEAgdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4
ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnMKICAgICBBU1NFUlQobWV0aG9kVGFibGUo
dm0pLT5nZXRDb25zdHJ1Y3REYXRhID09ICZKU0Z1bmN0aW9uOjpnZXRDb25zdHJ1Y3REYXRhKTsK
ICAgICBBU1NFUlQobWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSA9PSAmSlNGdW5jdGlvbjo6
Z2V0Q2FsbERhdGEpOwogCi0gICAgLy8gSlNCb3VuZEZ1bmN0aW9uIGluc3RhbmNlcyB1c2UgZmlu
aXNoQ3JlYXRpb24oVk0mKSBvdmVybG9hZCBhbmQgbGF6aWx5IGFsbG9jYXRlIHRoZWlyIG5hbWUg
c3RyaW5nIC8gbGVuZ3RoLgotICAgIEFTU0VSVCghdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0
aW9uPih2bSkpOworICAgIC8vIEpTQm91bmRGdW5jdGlvbi9KU1JlbW90ZUZ1bmN0aW9uIGluc3Rh
bmNlcyB1c2UgZmluaXNoQ3JlYXRpb24oVk0mKSBvdmVybG9hZCBhbmQgbGF6aWx5IGFsbG9jYXRl
IHRoZWlyIG5hbWUgc3RyaW5nIC8gbGVuZ3RoLgorICAgIEFTU0VSVCghdGhpcy0+aW5oZXJpdHM8
SlNCb3VuZEZ1bmN0aW9uPih2bSkgJiYgIXRoaXMtPmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+
KHZtKSk7CiAKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNO
dW1iZXIobGVuZ3RoKSwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKICAgICBpZiAoIW5hbWUuaXNOdWxsKCkpCkBAIC01NzEsNiArNTcy
LDggQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeUxlbmd0aChWTSYgdm0pCiAgICAgZG91YmxlIGxl
bmd0aCA9IDA7CiAgICAgaWYgKHRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQog
ICAgICAgICBsZW5ndGggPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odGhpcyktPmxlbmd0aCh2
bSk7CisgICAgZWxzZSBpZiAodGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKQor
ICAgICAgICBsZW5ndGggPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHRoaXMpLT5sZW5ndGgo
dm0pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkpOwogICAg
ICAgICBsZW5ndGggPSBqc0V4ZWN1dGFibGUoKS0+cGFyYW1ldGVyQ291bnQoKTsKQEAgLTYyNCw3
ICs2MjcsNyBAQCB2b2lkIEpTRnVuY3Rpb246OnJlaWZ5TmFtZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZyBuYW1lKQogCiBKU0Z1bmN0aW9uOjpQcm9wZXJ0eVN0
YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBpZiAoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSAmJiAhdGhpcy0+aW5oZXJpdHM8SlNCb3Vu
ZEZ1bmN0aW9uPih2bSkpCisgICAgaWYgKChpc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmICF0
aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSkpCiAgICAgICAgIHJldHVybiBQcm9w
ZXJ0eVN0YXR1czo6RWFnZXI7CiAgICAgUHJvcGVydHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5
TGF6eUxlbmd0aElmTmVlZGVkKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAg
aWYgKGlzTGF6eShsYXp5TGVuZ3RoKSkKQEAgLTYzOCw3ICs2NDEsNyBAQCBKU0Z1bmN0aW9uOjpQ
cm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlQcm9wZXJ0eUlmTmVlZGVkKFZNJiB2
bSwgSlNHbG9iYQogSlNGdW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlM
YXp5UHJvcGVydHlGb3JIb3N0T3JCdWlsdGluSWZOZWVkZWQoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIEFTU0VS
VChpc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpKTsKLSAgICBpZiAoaXNCdWlsdGluRnVuY3Rpb24o
KSB8fCB0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSkgeworICAgIGlmIChpc0J1
aWx0aW5GdW5jdGlvbigpIHx8IHRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pIHx8
IHRoaXMtPmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgewogICAgICAgICBQcm9wZXJ0
eVN0YXR1cyBsYXp5TGVuZ3RoID0gcmVpZnlMYXp5TGVuZ3RoSWZOZWVkZWQodm0sIGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGlzTGF6eShsYXp5TGVuZ3RoKSkKICAg
ICAgICAgICAgIHJldHVybiBsYXp5TGVuZ3RoOwpAQCAtNjk1LDYgKzY5OCwxNCBAQCBKU0Z1bmN0
aW9uOjpQcm9wZXJ0eVN0YXR1cyBKU0Z1bmN0aW9uOjpyZWlmeUxhenlCb3VuZE5hbWVJZk5lZWRl
ZChWTSYgdm0sIEpTR2xvYgogICAgICAgICB1bnNpZ25lZCBpbml0aWFsQXR0cmlidXRlcyA9IFBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seTsK
ICAgICAgICAgcmFyZURhdGEtPnNldEhhc1JlaWZpZWROYW1lKCk7CiAgICAgICAgIHB1dERpcmVj
dCh2bSwgbmFtZUlkZW50LCBzdHJpbmcsIGluaXRpYWxBdHRyaWJ1dGVzKTsKKyAgICB9IGVsc2Ug
aWYgKHRoaXMtPmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBGdW5j
dGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPmVuc3VyZVJhcmVEYXRhKHZtKTsKKyAgICAg
ICAgSlNTdHJpbmcqIG5hbWUgPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHRoaXMpLT5uYW1l
TWF5QmVOdWxsKCk7CisgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgIG5hbWUgPSBqc0Vt
cHR5U3RyaW5nKHZtKTsKKyAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMgPSBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHk7Cisg
ICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOworICAgICAgICBwdXREaXJlY3Qo
dm0sIG5hbWVJZGVudCwgbmFtZSwgaW5pdGlhbEF0dHJpYnV0ZXMpOwogICAgIH0KICAgICByZXR1
cm4gUHJvcGVydHlTdGF0dXM6OlJlaWZpZWQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKaW5kZXggODQ2MGQ0MmMwN2EyMWYwYTI2M2ZmOGU4MWIyYzUwMmE5
ZmNmZDhmYy4uYzMxOGQ1ZTExODM3M2UwYThjNThlZTAzNTllZTljMjdlMGUyNDdiMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaApAQCAtMTUwLDYgKzE1MCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Q7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0OwogICAg
IGJvb2wgaXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdDsKKyAgICBib29sIGlzUmVt
b3RlRnVuY3Rpb24oVk0mKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RnVuY3Rpb25OYW1lKEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBuYW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmgKaW5kZXggMjVkNjA5NDMwYmI3ZGViNWVjYjBh
ZDk3MjEyZTg4Zjk4N2E1ZGIwOC4uMmViZjA1MjYxMDZjMzU0ODc3Y2EwY2QzMzgwMTI3NzQ5Y2Ey
OWY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
SW5saW5lcy5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJOYXRpdmVFeGVjdXRh
YmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNzgsNiArNzksMTEgQEAgaW5saW5lIGJvb2wg
SlNGdW5jdGlvbjo6aXNDbGFzc0NvbnN0cnVjdG9yRnVuY3Rpb24oKSBjb25zdAogICAgIHJldHVy
biAhaXNIb3N0RnVuY3Rpb24oKSAmJiBqc0V4ZWN1dGFibGUoKS0+aXNDbGFzc0NvbnN0cnVjdG9y
RnVuY3Rpb24oKTsKIH0KIAoraW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aXNSZW1vdGVGdW5jdGlv
bihWTSYgdm0pIGNvbnN0Cit7CisgICAgcmV0dXJuIGluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+
KHZtKTsKK30KKwogaW5saW5lIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIEpTRnVuY3Rpb246Om5hdGl2
ZUZ1bmN0aW9uKCkKIHsKICAgICBBU1NFUlQoaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CkBA
IC05OCw2ICsxMDQsMTMgQEAgaW5saW5lIGJvb2wgaXNIb3N0RnVuY3Rpb24oSlNWYWx1ZSB2YWx1
ZSwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24pCiAgICAgcmV0dXJuIGZ1bmN0
aW9uLT5uYXRpdmVGdW5jdGlvbigpID09IG5hdGl2ZUZ1bmN0aW9uOwogfQogCitpbmxpbmUgYm9v
bCBpc1JlbW90ZUZ1bmN0aW9uKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0
byogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2bSwgdmFsdWUpKQorICAg
ICAgICByZXR1cm4gZnVuY3Rpb24tPmlzUmVtb3RlRnVuY3Rpb24odm0pOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogaW5saW5lIGJvb2wgSlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNv
bnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURh
dGEoKSkKQEAgLTExNCw2ICsxMjcsOCBAQCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlm
aWVkTmFtZSgpIGNvbnN0CiAKIGlubGluZSBib29sIEpTRnVuY3Rpb246OmNhbkFzc3VtZU5hbWVB
bmRMZW5ndGhBcmVPcmlnaW5hbChWTSYpCiB7CisgICAgLy8gSlNSZW1vdGVGdW5jdGlvbiBuZXZl
ciBoYXMgYSAnbmFtZScgZmllbGQsIHJldHVybiB0cnVlCisgICAgLy8gdG8gYXZvaWQgYWxsb2Nh
dGluZyBhIEZ1bmN0aW9uUmFyZURhdGEuCiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBGdW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMt
PnJhcmVEYXRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKaW5kZXggMjhhMjFkYTY2ZTBkZjI4NjZlOThhNjkzNmJlN2Q3MTExOGQxZDFj
ZS4uYTkwNzY3OTg4ZWJjNmM3NzljZmYzOGNmNzYzMzRkZTNjOGNiZTcwZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQwLDYg
KzE0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgpAQCAtNzcwLDYgKzc3MSwx
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgW10gKGNvbnN0
IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpT
TmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBp
bml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgICAgIH0pOworICAg
IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQu
b3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CiAgICAgSlNG
dW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uID0gbnVsbHB0cjsKQEAgLTE1MzEsNiArMTUzNiwxNCBAQCBjYXBpdGFsTmFtZSAjIyBDb25z
dHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFs
TmFtZQogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgY3JlYXRlUHJp
dmF0ZVN5bWJvbCkpOwogICAgICAgICB9KTsKIAorICAgIC8vIFNoYWRvd1JlYWxtcworICAgIG1f
bGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6
OmNyZWF0ZVJlbW90ZUZ1bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygp
LCBjcmVhdGVSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKyAgICBtX2xpbmtUaW1lQ29u
c3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojppc1JlbW90ZUZ1
bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7
CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0
PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBpc1JlbW90ZUZ1bmN0
aW9uKSk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIC8vIFdl
YkFzc2VtYmx5IFN0cmVhbWluZyBBUEkKICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojp3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1p
bmdJbnRlcm5hbCldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5p
dCkgewpAQCAtMjI1OSw2ICsyMjcyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3Qt
Pm1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7Cisg
ICAgdGhpc09iamVjdC0+bV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZW5lcmF0b3JGdW5jdGlvblN0cnVj
dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCAxYjFkOWI1NTNjNzQ3MmJlYmI2NzQ4OWQ5MmM3N2EzZDkzNjk2ZDJhLi4zYWRmYTM4
ZThhMzI0OWE0NThiY2IxNzQ1YjE4MjY1M2RmNWM4Yjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyMSw2ICs0MjEsNyBAQCBwdWJs
aWM6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKQEAgLTQzNyw2
ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbmF0aXZl
U3RkRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPEFz
eW5jRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5bmNGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0
ZUJhcnJpZXI8QXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwpAQCAtODcyLDYgKzg3NCw3
IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3Jk
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmMxYWNkODk2ZTIxZTVlNjhlMDg1NzIwNWY5ODQ4NDA3ZjBhYzAzOTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcApAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24u
aCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Jl
bW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKwor
SlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24o
dm0sIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQorICAgICwgbV9sZW5ndGgoMC4wKQoreworfQorCitz
dGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0p
KSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFy
Z3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJn
ZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0
aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgd3JhcFJldHVyblZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShn
bG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1z
IG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVu
Y3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVG
dW5jdGlvbih2bSkpOworICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihyZW1vdGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFw
cGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkp
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5o
YXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRv
IGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQorCisgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0g
Y2FsbCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5W
YWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpT
UmVtb3RlRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1v
dGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSkpOworICAgIEpTT2JqZWN0KiB0YXJnZXRG
dW5jdGlvbiA9IHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpOworICAgIEpTR2xvYmFs
T2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0
KCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgYXJn
cy5hcHBlbmQod3JhcHBlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFz
T3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNhbGxE
YXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2Fs
bCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5WYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBBU1NFUlQoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPT0gMSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oSlNDOjppc1JlbW90ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID09IDIpOworICAgIEpTVmFsdWUgdGFyZ2V0RnVuY3Rpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIEFTU0VSVCh0YXJnZXRGdW5jdGlvbi5pc0NhbGxhYmxlKHZtKSk7
CisKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJn
ZXRGdW5jdGlvbi5hc0NlbGwoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGRlc3RpbmF0aW9uR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmIChhdXRvIHNoYWRv
d1JlYWxtID0ganNEeW5hbWljQ2FzdDxTaGFkb3dSZWFsbU9iamVjdCo+KHZtLCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2Jq
ZWN0ID0gc2hhZG93UmVhbG0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRhcmdldENhbGxhYmxlKSkpOworfQorCitpbmxp
bmUgU3RydWN0dXJlKiBnZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZ2xvYmFsT2JqZWN0LWF3
YXJlIHN0cnVjdHVyZSBjYWNoaW5nCisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+cmVtb3RlRnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKK30KKworSlNSZW1vdGVGdW5jdGlvbiogSlNSZW1vdGVGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IHRhcmdldENhbGxhYmxlKQoreworICAgIEFTU0VSVCh0YXJnZXRDYWxsYWJsZSAmJiB0YXJnZXRD
YWxsYWJsZS0+aXNDYWxsYWJsZSh2bSkpOworICAgIGlmIChhdXRvIHJlbW90ZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHZtLCB0YXJnZXRDYWxsYWJsZSkpIHsKKyAgICAgICAg
dGFyZ2V0Q2FsbGFibGUgPSByZW1vdGUtPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VS
VCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHZtLCB0YXJnZXRDYWxsYWJsZSkpOworICAgIH0KKwor
ICAgIGJvb2wgaXNKU0Z1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSk7Cisg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJlbW90ZUZ1bmN0aW9uKGlz
SlNGdW5jdGlvbik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZW1vdGVGdW5jdGlv
blN0cnVjdHVyZShnbG9iYWxPYmplY3QpOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSBKU1Jl
bW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFy
Z2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNSZW1vdGVGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgLy8gMy4xLjI6IENvcHlOYW1lQW5kTGVuZ3Ro
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKworICAgIFByb3Bl
cnR5U2xvdCBzbG90KG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOworICAgIGJvb2wgdGFyZ2V0SGFzTGVuZ3RoID0gbV90YXJnZXRG
dW5jdGlvbi0+Z2V0T3duUHJvcGVydHlTbG90SW5saW5lKGdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworCisgICAgaWYgKHRhcmdldEhhc0xlbmd0aCkgeworICAgICAgICBKU1ZhbHVlIHRh
cmdldExlbmd0aCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICBkb3VibGUgdGFyZ2V0TGVuZ3RoQXNJbnQgPSB0YXJnZXRMZW5ndGgudG9JbnRlZ2Vy
T3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBtX2xlbmd0aCA9IHN0ZDo6bWF4KHRh
cmdldExlbmd0aEFzSW50LCAwLjApOworICAgIH0KKworICAgIEpTVmFsdWUgdGFyZ2V0TmFtZSA9
IEpTVmFsdWUobV90YXJnZXRGdW5jdGlvbi5nZXQoKSkuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJv
cGVydHlOYW1lcy0+bmFtZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKKyAgICBpZiAodGFyZ2V0TmFtZS5pc1N0cmluZygpKQorICAgICAgICBtX25hbWVNYXlCZU51
bGwuc2V0KHZtLCB0aGlzLCBhc1N0cmluZyh0YXJnZXROYW1lKSk7CisKKyAgICBzY29wZS5yZWxl
YXNlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVu
Y3Rpb246OnZpc2l0Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBKU1JlbW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVu
Y3Rpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0RnVuY3Rpb24pOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7Cit9CisKK0RFRklO
RV9WSVNJVF9DSElMRFJFTihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMmFlYThkMjg5OTJkYTFjMTgyYzM4NmFmMzFjM2ZlMDQ5MzJmNzQ5ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVu
Y3Rpb24uaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxp
YSBTLkwuCisgKiBBdXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3Rl
RnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJl
bW90ZUZ1bmN0aW9uQ2FsbEdlbmVyaWMpOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihpc1Jl
bW90ZUZ1bmN0aW9uKTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVu
Y3Rpb24pOworCisvLyBKU1JlbW90ZUZ1bmN0aW9uIGNyZWF0ZXMgYSBicmlkZ2UgYmV0d2VlbiBp
dHMgbmF0aXZlIFJlYWxtIGFuZCBhIHJlbW90ZSBvbmUuCisvLyBXaGVuIGludm9rZWQsIGFyZ3Vt
ZW50cyBhcmUgd3JhcHBlZCB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRpb24gYWNyb3NzIHRo
ZSByZWFsbSBib3VuZGFyeS4KKy8vIFRoZSByZXR1cm4gdmFsdWUgYW5kIGFueSBhYnJ1cHQgY29t
cGxldGlvbnMgYXJlIGFsc28gZmlsdGVyZWQuCitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uIGZpbmFs
IDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBC
YXNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJz
cGFjZUFjY2VzcyBtb2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9uU3BhY2U8bW9kZT4o
KTsKKyAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNSZW1vdGVGdW5jdGlv
biogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUp
OworCisgICAgSlNPYmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5j
dGlvbi5nZXQoKTsgfQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7
IHJldHVybiB0YXJnZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQorICAgIEpTU3RyaW5n
KiBuYW1lTWF5QmVOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lTWF5QmVOdWxsLmdldCgpOyB9
CisKKyAgICBkb3VibGUgbGVuZ3RoKFZNJikgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGdsb2JhbE9iamVjdCk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTRnVuY3Rpb25UeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7IAorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mVGFyZ2V0RnVuY3Rpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNSZW1vdGVG
dW5jdGlvbiwgbV90YXJnZXRGdW5jdGlvbik7IH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CisKK3ByaXZhdGU6CisgICAgSlNSZW1vdGVGdW5jdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiB0YXJnZXRDYWxsYWJsZSk7
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgREVDTEFSRV9WSVNJVF9DSElM
RFJFTjsKKworICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXRGdW5jdGlvbjsKKyAg
ICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZU1heUJlTnVsbDsKKyAgICBkb3VibGUgbV9s
ZW5ndGg7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggODQ3
MzA5MTI0YTVmODE4MzhkOTk1NzVlZTAzOTFhOTVjZTM1ZGU4OS4uNjIwMTE4NmJiMTcxZTY4MDhi
ZDJhY2Q3OGVjZTRjNTlkM2IzN2JkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cApAQCAtNjMyLDYgKzYzMiw4IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRv
ckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gcmFuZG9t
VGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYzoKICAg
ICAgICAgcmV0dXJuIGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yOworICAgIGNhc2UgUmVtb3Rl
RnVuY3Rpb25DYWxsSW50cmluc2ljOgorICAgICAgICByZXR1cm4gcmVtb3RlRnVuY3Rpb25DYWxs
R2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTcwOSw2ICs3MTEsMjUgQEAgTmF0aXZlRXhlY3V0YWJsZSogVk06OmdldEJvdW5kRnVuY3Rp
b24oYm9vbCBpc0pTRnVuY3Rpb24sIGJvb2wgY2FuQ29uc3RydWN0KQogICAgIHJldHVybiBnZXRP
ckNyZWF0ZShtX2Zhc3RCb3VuZEV4ZWN1dGFibGUpOwogfQogCitOYXRpdmVFeGVjdXRhYmxlKiBW
TTo6Z2V0UmVtb3RlRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rpb24pCit7CisgICAgYm9vbCBzbG93
Q2FzZSA9ICFpc0pTRnVuY3Rpb247CisgICAgYXV0byBnZXRPckNyZWF0ZSA9IFsmXSAoV2VhazxO
YXRpdmVFeGVjdXRhYmxlPiYgc2xvdCkgLT4gTmF0aXZlRXhlY3V0YWJsZSogeworICAgICAgICBp
ZiAoYXV0byogY2FjaGVkID0gc2xvdC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7
CisgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIHJlc3VsdCA9IGdldEhvc3RGdW5jdGlvbigKKyAg
ICAgICAgICAgIHNsb3dDYXNlID8gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYyA6IHJlbW90ZUZ1
bmN0aW9uQ2FsbEZvckpTRnVuY3Rpb24sCisgICAgICAgICAgICBzbG93Q2FzZSA/IE5vSW50cmlu
c2ljIDogUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgICAgICAgICAgY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIFN0cmluZygpKTsKKyAgICAgICAgc2xvdCA9
IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9OworCisgICAgaWYgKHNsb3dDYXNlKQorICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
bV9zbG93UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKKyAgICByZXR1cm4gZ2V0T3JDcmVhdGUo
bV9mYXN0UmVtb3RlRnVuY3Rpb25FeGVjdXRhYmxlKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPEpTRW50cnlQdHJUYWc+IFZNOjpnZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDMyYmE1MWZlYzIxOGJmZTRiYTNkNDM1ZDY0OThh
N2JiMWZiMjhiZDYuLmY3Y2NiNDM3NWRhMjYyYTE5MzA3YWQ1Zjk1OWZlZWY0ODBhZDZkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtNDMyLDYgKzQzMiw3IEBAIHB1YmxpYzoK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKG5hdGl2ZVN0ZEZ1bmN0aW9u
U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihwcm94eU9iamVj
dFNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIocHJveHlSZXZv
a2VTcGFjZSkKKyAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHJlbW90ZUZ1
bmN0aW9uU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY29w
ZWRBcmd1bWVudHNUYWJsZVNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIoc2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BB
Q0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaGVyU3BhY2UpCkBAIC01NzIsNiArNTczLDkgQEAg
cHVibGljOgogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Qm91bmRFeGVjdXRhYmxl
OwogICAgIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gbV9zbG93Q2FuQ29uc3RydWN0Qm91bmRFeGVj
dXRhYmxlOwogCisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX2Zhc3RSZW1vdGVGdW5jdGlv
bkV4ZWN1dGFibGU7CisgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Nsb3dSZW1vdGVGdW5j
dGlvbkV4ZWN1dGFibGU7CisKICAgICBSZWY8RGVmZXJyZWRXb3JrVGltZXI+IGRlZmVycmVkV29y
a1RpbWVyOwogCiAgICAgSlNDZWxsKiBjdXJyZW50bHlEZXN0cnVjdGluZ0NhbGxiYWNrT2JqZWN0
OwpAQCAtNjg0LDYgKzY4OCw3IEBAIHB1YmxpYzoKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRI
b3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gY29u
c3RydWN0b3IsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
IAogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGdldEJvdW5kRnVuY3Rpb24oYm9vbCBpc0pTRnVuY3Rp
b24sIGJvb2wgY2FuQ29uc3RydWN0KTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRSZW1vdGVG
dW5jdGlvbihib29sIGlzSlNGdW5jdGlvbik7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4gZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJU
YWc+IGdldENUSUxpbmtDYWxsKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFkOTBmMDk4OTFjYzQzZTM2MDRkNDk1MDgxYmFmNWUyMGRi
YWVhMzYuLjY5OGY4YmUwOTkwOTdkNWYxOTkyMWI0ZDI2NzE0NDI1ZTFlZWVlZTcgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMjItMDEtMzEgIENhaXRsaW4gUG90dGVyICA8Y2FpdHBAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbSlNDXSBtb3ZlIGZ1bmN0aW9uIHdyYXBwaW5nIGxvZ2ljIHRvIGEgbmV3IEZ1bmN0
aW9uIHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNTM4MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZHMgYSBuZXcgZmlsZSB0ZXN0aW5nIENvcHlOYW1lQW5kTGVuZ3RoIHN0dWZmIGluIHRoZSBT
aGFkb3dSZWFsbSBwcm9wb3NhbCwKKyAgICAgICAgYW5kIGZpeCB1cCBhc3NlcnRpb25zIGFib3V0
IHRoaXMgaW4gc2hhZG93LXJlYWxtLWV2YWx1YXRlLmpzCisKKyAgICAgICAgKiBzdHJlc3Mvc2hh
ZG93LXJlYWxtLWV2YWx1YXRlLmpzOgorICAgICAgICAqIHN0cmVzcy9zaGFkb3ctcmVhbG0tcmVt
b3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzOiBBZGRlZC4KKwogMjAyMi0wMi0w
MiAgQWxleGV5IFNodmF5a2EgIDxhc2h2YXlrYUBhcHBsZS5jb20+CiAKICAgICAgICAgU3BlZWQt
dXAgSlNPTi5zdHJpbmdpZnkoKSBieSBhdm9pZGluZyAidG9KU09OIiBwcm9wZXJ0eSBsb29rdXBz
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMgYi9K
U1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKaW5kZXggYjAxZGExZjU3YThm
OTViODNkYjFiZTljY2JmZTg5YWZlYThmZjhjZS4uODM2MTkyMGU2YWQzZDAxODI3OGY1ZmYxOThj
NmE3Nzk4Y2I0ODk1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxtLWV2
YWx1YXRlLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwpA
QCAtODAsOCArODAsMTcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JUeXBlLCBh
c3NlcnRpb25GbikgewogICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90b3R5cGVPZih3cmFwcGVk
SW52b2tlQW5kQWRkKSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKIAogICAgIC8vIG5hbWUgYW5kIGxl
bmd0aCBwcm9wZXJ0aWVzIGZyb20gd3JhcHBlZCBmdW5jdGlvbiBhcmUgYWJzZW50Ci0gICAgc2hv
dWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRk
LCAibGVuZ3RoIiksIHVuZGVmaW5lZCk7Ci0gICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRkLCAibmFtZSIpLCB1bmRlZmluZWQpOwor
ICAgIGxldCBsZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFw
cGVkSW52b2tlQW5kQWRkLCAibGVuZ3RoIik7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy52YWx1
ZSwgMik7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy53cml0YWJsZSwgZmFsc2UpOworICAgIHNo
b3VsZEJlKGxlbmd0aERlc2MuZW51bWVyYWJsZSwgZmFsc2UpOworICAgIHNob3VsZEJlKGxlbmd0
aERlc2MuY29uZmlndXJhYmxlLCB0cnVlKTsKKworICAgIGxldCBuYW1lRGVzYyA9IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod3JhcHBlZEludm9rZUFuZEFkZCwgIm5hbWUiKTsKKyAg
ICBzaG91bGRCZShuYW1lRGVzYy52YWx1ZSwgImludm9rZUFuZEFkZCIpOworICAgIHNob3VsZEJl
KG5hbWVEZXNjLndyaXRhYmxlLCBmYWxzZSk7CisgICAgc2hvdWxkQmUobmFtZURlc2MuZW51bWVy
YWJsZSwgZmFsc2UpOworICAgIHNob3VsZEJlKG5hbWVEZXNjLmNvbmZpZ3VyYWJsZSwgdHJ1ZSk7
CiAKICAgICAvLyBjYW4ndCBwYXNzIG9iamVjdHMgaW50byBhIHNoYWRvdyByZWFsbS13cmFwcGVk
IGZ1bmN0aW9uCiAgICAgbGV0IG51bWJlck9iaiA9IHsgdmFsdWVPZigpIHsgcmV0dXJuIC0xIH0g
fTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rp
b24tY29weS1sZW5ndGgtYW5kLW5hbWUuanMgYi9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0t
cmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlY2Ux
MmQ4MDM3MTVlMjZkNWQwMmY0ODc3MzUzNjE3MjY5MDcwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tcmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFu
ZC1uYW1lLmpzCkBAIC0wLDAgKzEsNDE0IEBACisvL0AgcmVxdWlyZU9wdGlvbnMoIi0tdXNlU2hh
ZG93UmVhbG09MSIpCisKK2Z1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnQoZWxlbWVudCkgeworICBp
ZiAodHlwZW9mIGVsZW1lbnQgPT09ICJvYmplY3QiKSB7CisgICAgaWYgKGVsZW1lbnQgPT09IG51
bGwpCisgICAgICByZXR1cm4gIm51bGwiOworICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQp
KQorICAgICAgcmV0dXJuIHN1bW1hcml6ZUFycmF5KGVsZW1lbnQsIDApOworICB9CisgIGxldCBy
ZXN1bHQgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTsKKyAgaWYgKHJlc3VsdC5sZW5ndGggPiAy
MCkgeworICAgIGxldCBjID0gcmVzdWx0WzBdOworICAgIGlmIChjID09PSAieyIpCisgICAgICBj
ID0gIn0iOworICAgIHJlc3VsdCA9IGAke3Jlc3VsdC5zdWJzdHIoMCwgMTUpfS4uLiR7Y31gOwor
ICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHN1bW1hcml6ZUFycmF5KGFycmF5
LCBpbmRleCwgc2hvd0luZGV4KSB7CisKKyAgbGV0IHByZWZpeCA9IGluZGV4ID09PSAwID8gIiIg
OiBgLi4uJHtzdW1tYXJpemVFbGVtZW50KGFycmF5W2luZGV4IC0gMV0pfSwgYDsKKyAgbGV0IHN1
ZmZpeCA9IGluZGV4ICsgMSA8IGFycmF5Lmxlbmd0aCA/IGAsICR7c3VtbWFyaXplRWxlbWVudChh
cnJheVtpbmRleCArIDFdKX0uLi5gIDogIiI7CisKKyAgaWYgKHByZWZpeC5sZW5ndGggPiAyMCkK
KyAgICBwcmVmaXggPSBwcmVmaXguc3Vic3RyKHByZWZpeC5sZW5ndGggLSAyMCk7CisgIGlmIChz
dWZmaXgubGVuZ3RoID4gMjApCisgICAgc3VmZml4ID0gc3VmZml4LnN1YnN0cigwLCAyMCk7Cisg
IGVuZGVyID0gc2hvd0luZGV4ID8gYCAoYXQgaW5kZXggJHtpbmRleH0pYCA6ICIiOworICByZXR1
cm4gYFske3ByZWZpeH0ke0pTT04uc3RyaW5naWZ5KGFycmF5W2luZGV4XSl9JHtzdWZmaXh9XSR7
ZW5kZXJ9YDsKK30KK2Z1bmN0aW9uIHNob3VsZEJlQXJyYXlFcXVhbChhY3R1YWwsIGV4cGVjdGVk
KSB7CisgIGlmICgoQXJyYXkuaXNBcnJheShleHBlY3RlZCkgJiYgIUFycmF5LmlzQXJyYXkoYWN0
dWFsKSkpCisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke0pTT04uc3RyaW5naWZ5fSBi
dXQgZm91bmQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWwpfWApOworCisgIHZhciBpOworICBmb3Ig
KHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7CisgICAgbGV0IGUgPSBleHBl
Y3RlZFtpXTsKKyAgICBsZXQgYSA9IGFjdHVhbFtpXTsKKyAgICBpZiAoZSA9PT0gYSkKKyAgICAg
IGNvbnRpbnVlOworICAgIGlmIChBcnJheS5pc0FycmF5KGUpKQorICAgICAgc2hvdWxkQmVBcnJh
eUVxdWFsKGEsIGUpOworICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVB
cnJheShleHBlY3RlZCwgaSwgdHJ1ZSl9IGJ1dCBmb3VuZCAke3N1bW1hcml6ZUFycmF5KGFjdHVh
bCwgaSl9YCkKKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7
CisgICAgaWYgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSB8fCBBcnJheS5pc0FycmF5KGV4cGVjdGVk
KSkKKyAgICAgIHJldHVybiBzaG91bGRCZUFycmF5RXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7Cisg
ICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhw
ZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30KKworZnVuY3Rpb24gc2hv
dWxkSGF2ZURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpIHsKKyAg
bGV0IGFjdHVhbCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpOworICBsZXQgb3JkZXIgPSBPYmplY3Qua2V5cyhkZXNjcmlwdG9yKS5zb3J0KCk7
CisgIGZvciAobGV0IGtleSBvZiBvcmRlcikgeworICAgIGxldCB2YWx1ZSA9IGRlc2NyaXB0b3Jb
a2V5XTsKKyAgICBpZiAoWyJ1bmRlZmluZWQiLCAiYm9vbGVhbiIsICJudW1iZXIiLCAic3RyaW5n
IiwgInN5bWJvbCIsICJiaWdpbnQiXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpIHx8IHZhbHVlID09
PSBudWxsKSB7CisgICAgICBpZiAoYWN0dWFsW2tleV0gIT09IHZhbHVlKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWwpfSdzICcke2tl
eX0nIHRvIGJlICR7c3VtbWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQgZm91bmQgJHtzdW1tYXJp
emVFbGVtZW50KGFjdHVhbFtrZXldKX1gKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9
PT0gImZ1bmN0aW9uIikgeworICAgICAgaWYgKGFjdHVhbFtrZXldICE9PSB2YWx1ZSAmJiBTdHJp
bmcodmFsdWUpICE9PSBTdHJpbmcoYWN0dWFsW2tleV0pKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoYEV4cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWwpfSdzICcke2tleX0nIHRvIGJl
ICR7c3VtbWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQgZm91bmQgJHtzdW1tYXJpemVFbGVtZW50
KGFjdHVhbFtrZXldKX1gKTsKKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3co
b3AsIGVycm9yQ29uc3RydWN0b3IsIGRlc2MpIHsKKyAgICB0cnkgeworICAgICAgICBvcCgpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIGVycm9yQ29uc3Ry
dWN0b3IpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRocmV3ICR7ZX0sIGJ1dCBz
aG91bGQgaGF2ZSB0aHJvd24gJHtlcnJvckNvbnN0cnVjdG9yLm5hbWV9YCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7
ZGVzYyB8fCAnb3BlcmF0aW9uJ30gdG8gdGhyb3cgJHtlcnJvckNvbnN0cnVjdG9yLm5hbWV9LCBi
dXQgbm8gZXhjZXB0aW9uIHRocm93bmApOworfQorCitsZXQgcmVhbG0gPSBuZXcgU2hhZG93UmVh
bG07CisKK2xldCBmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGxldCB0ZXN0MSA9IGZ1
bmN0aW9uKGEsIGIsIGMpIHsKKyAgfTsKKyAgcmV0dXJuIHRlc3QxOworfSkoKWApOworCitzaG91
bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMywKKyAgd3JpdGFibGU6
IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7
CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICJ0ZXN0MSIsCisg
IHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKK30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGZ1bmN0aW9uIHRl
c3QyKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwsIG0sIG4sIG8sIHApIHsKKyAg
fQorICByZXR1cm4gdGVzdDI7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJs
ZW5ndGgiLCB7CisgIHZhbHVlOiAxNiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxl
OiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRv
cihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICJ0ZXN0MiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAg
ZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitmID0gcmVh
bG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGxldCBmID0gZnVuY3Rpb24oKSB7CisgIH0KKyAgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGYsICJsZW5ndGgiLCB7CisgICAgdmFsdWU6IC1JbmZpbml0eSwK
KyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVy
YWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICJuYW1lIiwgewor
ICAgIHZhbHVlOiAiMjciLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1cm4gZjsKK30pKClgKTsK
Kworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDAsCisgIHdy
aXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwKK30pOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUiLCB7CisgIHZhbHVlOiAiMjci
LAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFi
bGU6IHRydWUsCit9KTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQgZiA9
IGZ1bmN0aW9uKCkgeworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAibGVuZ3RoIiwg
eworICAgIHZhbHVlOiAtOS43NCwKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFi
bGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGYsICJuYW1lIiwgeworICAgIHZhbHVlOiA1NywKKyAgICB3cml0YWJsZTogdHJ1ZSwK
KyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAg
cmV0dXJuIGY7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7
CisgIHZhbHVlOiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAor
ICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1l
IiwgeworICB2YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFs
c2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitsZXQgaW5uZXJMb2cgPSByZWFsbS5l
dmFsdWF0ZShgKCgpID0+IHsKKyAgZ2xvYmFsVGhpcy5fbG9nID0gW107CisgIGdsb2JhbFRoaXMu
bG9nID0gZnVuY3Rpb24gbG9nKGl0ZW0pIHsKKyAgICBnbG9iYWxUaGlzLl9sb2cucHVzaChpdGVt
KTsKKyAgfTsKKworICByZXR1cm4gZnVuY3Rpb24gbG9nKCkgeworICAgIGxldCBsb2cgPSBnbG9i
YWxUaGlzLl9sb2c7CisgICAgZ2xvYmFsVGhpcy5fbG9nID0gW107CisgICAgcmV0dXJuIEpTT04u
c3RyaW5naWZ5KGxvZyk7CisgIH07Cit9KSgpYCk7CisKK2Z1bmN0aW9uIGxvZygpIHsKKyAgbGV0
IHJlc3VsdCA9IEpTT04ucGFyc2UoaW5uZXJMb2coKSk7CisgIHNob3VsZEJlKEFycmF5LmlzQXJy
YXkocmVzdWx0KSwgdHJ1ZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2YgPSByZWFsbS5ldmFs
dWF0ZShgKCgpID0+IHsKKyAgbGV0IHRhcmdldCA9IChmdW5jdGlvbigpIHsKKyAgICBsb2coXGBj
YWxsZWRcYCk7CisgIH0pOworICBsZXQgcCA9IG5ldyBQcm94eSh0YXJnZXQsIHsKKyAgICBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcCkgeworICAgICAgbG9nKFxgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yIFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHko
Li4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGdldCh0LCBwKSB7CisgICAgICBsb2coXGBnZXQg
XCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9
LAorICAgIGRlZmluZVByb3BlcnR5KHQsIHAsIG8pIHsKKyAgICAgIGxvZyhcYGRlZmluZVByb3Bl
cnR5IFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoLi4uYXJn
dW1lbnRzKTsKKyAgICB9LAorICAgIGdldFByb3RvdHlwZU9mKHQpIHsKKyAgICAgIGxvZyhcYGdl
dFByb3RvdHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoLi4u
YXJndW1lbnRzKTsKKyAgICB9LAorICAgIHNldFByb3RvdHlwZU9mKHQsIHYpIHsKKyAgICAgIGxv
ZyhcYHNldFByb3RvdHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0UHJvdG90eXBl
T2YoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGlzRXh0ZW5zaWJsZSh0KSB7CisgICAgICBs
b2coXGBpc0V4dGVuc2libGVcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5pc0V4dGVuc2libGUo
Li4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIHByZXZlbnRFeHRlbnNpb25zKHQpIHsKKyAgICAg
IGxvZyhcYHByZXZlbnRFeHRlbnNpb25zXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QucHJldmVu
dEV4dGVuc2lvbnMoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGhhcyh0LCBwKSB7CisgICAg
ICBsb2coXGBoYXMgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5oYXMoLi4uYXJndW1l
bnRzKTsKKyAgICB9LAorICAgIHNldCh0LCBwLCB2KSB7CisgICAgICBsb2coXGBzZXQgXCR7cH1c
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5zZXQoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAg
IGRlbGV0ZSh0LCBwKSB7CisgICAgICBsb2coXGBkZWxldGUgXCR7cH1cYCk7CisgICAgICByZXR1
cm4gUmVmbGVjdC5kZWxldGUoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIG93bktleXModCkg
eworICAgICAgbG9nKFxgb3duS2V5c1xgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMo
Li4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGFwcGx5KCkgeworICAgICAgbG9nKFxgYXBwbHlc
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSguLi5hcmd1bWVudHMpOworICAgIH0sCisg
ICAgY29uc3RydWN0KCkgeworICAgICAgbG9nKFxgY29uc3RydWN0XGApOworICAgICAgcmV0dXJu
IFJlZmxlY3QuYXJndW1lbnRMaXN0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgfSk7CisgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICJsZW5ndGgiLCB7CisgICAgZ2V0KCkgeworICAg
ICAgbG9nKCJsZW5ndGggZ2V0dGVyIik7CisgICAgICByZXR1cm4gSW5maW5pdHk7CisgICAgfSwK
KyAgICBzZXQoKSB7CisgICAgICBsb2coImxlbmd0aCBzZXR0ZXIiKTsKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0
cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAibmFtZSIsIHsKKyAg
ICBnZXQoKSB7CisgICAgICBsb2coIm5hbWUgZ2V0dGVyIik7CisgICAgICByZXR1cm4gSW5maW5p
dHk7CisgICAgfSwKKyAgICBzZXQoKSB7CisgICAgICBsb2coIm5hbWUgc2V0dGVyIik7CisgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51
bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJuIHA7Cit9KSgpYCk7CisKK2YoKTsKK3Nob3Vs
ZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiBJbmZpbml0eSwKKyAgd3Jp
dGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVl
LAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICIiLAor
ICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6
IHRydWUsCit9KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVuZ3RoIiwKKyAgImxlbmd0
aCBnZXR0ZXIiLAorICAiZ2V0IG5hbWUiLAorICAibmFtZSBnZXR0ZXIiLAorICAiYXBwbHkiLAor
ICAiY2FsbGVkIgorXSk7CitmKCk7CitzaG91bGRCZShsb2coKSwgWyJhcHBseSIsICJjYWxsZWQi
XSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0IHRhcmdldCA9IChmdW5j
dGlvbigpIHsKKyAgICBsb2coXGBjYWxsZWQgMlxgKTsKKyAgfSk7CisgIGxldCBwID0gbmV3IFBy
b3h5KHRhcmdldCwgeworICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBwKSB7CisgICAg
ICBsb2coXGBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgXCR7cH1cYCk7CisgICAgICByZXR1cm4g
UmVmbGVjdC5nZXRPd25Qcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0KHQs
IHApIHsKKyAgICAgIGxvZyhcYGdldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0Lmdl
dCguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZGVmaW5lUHJvcGVydHkodCwgcCwgbykgewor
ICAgICAgbG9nKFxgZGVmaW5lUHJvcGVydHkgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5kZWZpbmVQcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0UHJvdG90eXBl
T2YodCkgeworICAgICAgbG9nKFxgZ2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVm
bGVjdC5nZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0UHJvdG90
eXBlT2YodCwgdikgeworICAgICAgbG9nKFxgc2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1
cm4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaXNF
eHRlbnNpYmxlKHQpIHsKKyAgICAgIGxvZyhcYGlzRXh0ZW5zaWJsZVxgKTsKKyAgICAgIHJldHVy
biBSZWZsZWN0LmlzRXh0ZW5zaWJsZSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgcHJldmVu
dEV4dGVuc2lvbnModCkgeworICAgICAgbG9nKFxgcHJldmVudEV4dGVuc2lvbnNcYCk7CisgICAg
ICByZXR1cm4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyguLi5hcmd1bWVudHMpOworICAgIH0s
CisgICAgaGFzKHQsIHApIHsKKyAgICAgIGxvZyhcYGhhcyBcJHtwfVxgKTsKKyAgICAgIHJldHVy
biBSZWZsZWN0LmhhcyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0KHQsIHAsIHYpIHsK
KyAgICAgIGxvZyhcYHNldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldCguLi5h
cmd1bWVudHMpOworICAgIH0sCisgICAgZGVsZXRlKHQsIHApIHsKKyAgICAgIGxvZyhcYGRlbGV0
ZSBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZSguLi5hcmd1bWVudHMpOwor
ICAgIH0sCisgICAgb3duS2V5cyh0KSB7CisgICAgICBsb2coXGBvd25LZXlzXGApOworICAgICAg
cmV0dXJuIFJlZmxlY3Qub3duS2V5cyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgYXBwbHko
KSB7CisgICAgICBsb2coXGBhcHBseVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KC4u
LmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBjb25zdHJ1Y3QoKSB7CisgICAgICBsb2coXGBjb25z
dHJ1Y3RcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5hcmd1bWVudExpc3QoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgImxlbmd0
aCIsIHsKKyAgICBnZXQoKSB7IHJldHVybiB9LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAg
ICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0
LCAibmFtZSIsIHsKKyAgICB2YWx1ZTogNTcsCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAg
IGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVybiBwOworfSkoKWApOworCitmKCk7Citz
aG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTogMCwKKyAgd3JpdGFi
bGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAor
fSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICIiLAorICB3
cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRy
dWUsCit9KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVuZ3RoIiwKKyAgImdldCBuYW1l
IiwKKyAgImFwcGx5IiwKKyAgImNhbGxlZCAyIgorXSk7CitmKCk7CitzaG91bGRCZShsb2coKSwg
WyJhcHBseSIsICJjYWxsZWQgMiJdKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0
aCIsIHsKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmln
dXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAg
d3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0
cnVlLAorfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451283</attachid>
            <date>2022-02-08 11:28:54 -0800</date>
            <delta_ts>2022-02-08 11:38:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235382-20220208192853.patch</filename>
            <type>text/plain</type>
            <size>88318</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDRhNjJhYjIzNmE2NWU5MzY1NjAyZDkyYTA4NDJlNWY4YjlkNzNlLi40ZGY1YTgyYTc2NGM3Njhl
MzhiMDdhNjU0NjljZGE1OWZkNTYzY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNp
Yy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDItMDcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDb252ZXJ0IEpTU3RyaW5nJ3Mgbm9uLWF0
b21pYyBXVEY6OlN0cmluZyB0byBhdG9taWMgc3RyaW5nIHdoaWxlIGNvbmN1cnJlbnQgY29tcGls
ZXJzIC8gaGVhcCB0aHJlYWRzIHJ1bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDc4ODM3N2Y2NzEzOTlhMTNiMGI1MTUzMWUwYzI5YzI0NzQzZGI4MjEuLjI3NzdiZTk5YWQx
YjdjMDlkMmI2Yzk1MDIyN2RhYzNlMTczYmNiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAg
ICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94
eS5oCisgICAgcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKICAgICBydW50aW1lL0pTUnVuTG9v
cFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNTY3JpcHRGZXRj
aFBhcmFtZXRlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YzFkY2JkMmE2
NzRhNTEzYjA3MTE2MzAwYmM4MzEzNTAwZTZkYzJmLi5kMDQ4MDkxOGNiMDQ3ZDQ0OTgzZWRkNWU2
ZDdhMDFiZTUzZWVlZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzMyw2
ICsxMTMzLDcgQEAKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3
RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNUI0MDMyODAyNzk4RDIwNjAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDAzMjdFMjc5
OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8q
IEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICov
OyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENG
REExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLzsgfTsKIAkJ
NUI3MENGRTIxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGREMxREI2
OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDA4
NCw2ICs0MDg1LDggQEAKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FC
MTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNh
bGxpbmdDb252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdF
Mjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
UmVtb3RlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0Yy
Nzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNSZW1vdGVGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVC
NzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREExREI2OUU1QzAwRUMy
M0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUzQ0UxNjEzNkFBNTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZBQTUwMDlGMTdEMCAv
KiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3Rl
RnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9v
cFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29w
VGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAg
Ki8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0
IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3Rl
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKaW5kZXggNzAwYzdiYTk2MmQ1MDAyN2ZiYzY2NDhiOTVmNTAyNzZlMGU2Yjc3Yi4u
M2E5NWM1OGIzZDk5YjliY2U4MzJjMDE3NTgyZGY5NTg0ZDhlY2E4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTAyLDYgKzkwMiw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1Jl
bW90ZUZ1bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNT
Y29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0
Y2QzMTIwNTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFm
YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1
bmspIFwKICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25U
aHVuaykgXAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBc
CiAgICAgdihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4
ODhkLi5hMDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMp
IFwKICAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhz
ZW50aW5lbFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAg
bWFjcm8oaXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcwppbmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi5hMmI0
MTBiMzY3ZjRmYzkyODU3NmQxOGY3ZTdmMzc4YjQzZWZiYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0z
MiwzOSArMzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0s
IHRhcmdldCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0
KSkgewotICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFy
IHdyYXBwZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAg
c2luY2UgdG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBB
IHRvIHdvcmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAg
dGhlIGFyZ3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0g
ICAgICAgICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgIEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hh
ZG93UmVhbG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVm
aW5lZCwgd3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dS
ZWFsbSwgIihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwot
ICAgICAgICB9OwotICAgICAgICBkZWxldGUgd3JhcHBlZFsnbmFtZSddOwotICAgICAgICBkZWxl
dGUgd3JhcHBlZFsnbGVuZ3RoJ107Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZ1bmN0aW9u
ICh3cmFwKSB3aWxsIHJ1biB3aXRoIHRoZSBpbmN1YmF0aW5nIHJlYWxtCi0gICAgICAgIC8vIGFj
dGl2ZSwgd2Ugb25seSBuZWVkIHRvIGZpeCB0aGUgcHJvdG90eXBlIG9uIGB3cmFwcGVkYCBpZiB3
ZSBhcmUKLSAgICAgICAgLy8gbW92aW5nIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbmN1YmF0aW5n
IHJlYWxtIHRvIHRoZSBzaGFkb3cgcmVhbG0KLSAgICAgICAgaWYgKCFmcm9tU2hhZG93UmVhbG0p
Ci0gICAgICAgICAgICBAbW92ZUZ1bmN0aW9uVG9SZWFsbSh3cmFwcGVkLCBzaGFkb3dSZWFsbSk7
Ci0gICAgICAgIHJldHVybiB3cmFwcGVkOworICAgICAgICByZXR1cm4gQGNyZWF0ZVJlbW90ZUZ1
bmN0aW9uKHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxtKTsKICAg
ICB9IGVsc2UgaWYgKEBpc09iamVjdCh0YXJnZXQpKSB7CiAgICAgICAgIEB0aHJvd1R5cGVFcnJv
cigidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1p
dGl2ZSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlu
a1RpbWVDb25zdGFudC5oCmluZGV4IGU2NmU4ZmRiMTZhZjBmNjg5ZjBhYmVhNDgwYWVjYjQ1MmFj
OGI5ZjEuLmRmOTk0MmYyMTI1M2IwODI2ZDNhN2Q5MDA0ODhmNmRjYmRkMjc5ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAt
MTE3LDYgKzExNyw4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY3JlYXRlUHJpdmF0
ZVN5bWJvbCwgbnVsbHB0cikgXAogICAgIHYoZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBu
dWxscHRyKSBcCiAgICAgdihzZW50aW5lbFN0cmluZywgbnVsbHB0cikgXAorICAgIHYoY3JlYXRl
UmVtb3RlRnVuY3Rpb24sIG51bGxwdHIpIFwKKyAgICB2KGlzUmVtb3RlRnVuY3Rpb24sIG51bGxw
dHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUp
IG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IGI5ZjgxODQ2MGU1NGVjOTIyZjM5NGI2Y2ZlZDIyN2M1YjRhNmMwMWQuLmZjM2E2
YzRmZGFlM2RkODk2NzhjNmJiOWE2NTY5MGI0OGY3ZmFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMTI1Nyw2ICsxMTI1Nyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGdW5jdGlvblRvU3RyaW5nKE5vZGUqIG5v
ZGUpCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwg
IldlIGRvbid0IGhhbmRsZSBzdWJjbGFzc2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxv
dyIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
RXF1YWwsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cihKU0JvdW5kRnVuY3Rpb246OmluZm8o
KSkpKTsKIAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rp
b24+LCAiV2UgZG9uJ3QgaGFuZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZv
IGJlbG93Iik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKEpTUmVtb3RlRnVuY3Rpb246
OmluZm8oKSkpKTsKKwogICAgIGdldEV4ZWN1dGFibGUobV9qaXQsIGZ1bmN0aW9uLmdwcigpLCBl
eGVjdXRhYmxlLmdwcigpKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05hdGl2ZUV4ZWN1dGFi
bGUgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoZXhlY3V0YWJsZS5ncHIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihOYXRpdmVFeGVjdXRhYmxlVHlwZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggN2FjZmNiY2RhN2I1ZDE4MjMzYTU3MjAz
OTUzNTU5ZTU1NjEzN2ZkMi4uOWU1OTliZmZlYzhiOTAwZmQ3MjM4ZWRjNjM5Y2ViNTY0OTQzYTlj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtODYxMyw2ICs4NjEzLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJvdW5kRnVuY3Rpb25D
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Qm91bmRPclJl
bW90ZUZ1bmN0aW9uQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGZ1bmN0aW9uRXhlY3V0YWJsZUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFz
aWNCbG9jayBuYXRpdmVFeGVjdXRhYmxlQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
IExCYXNpY0Jsb2NrIHRlc3RQdHIgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODYyOCw3ICs4NjI5
LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwgIldlIGRvbid0IGhhbmRsZSBzdWJjbGFz
c2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxvdyIpOwogICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihKU0JvdW5kRnVuY3Rp
b246OmluZm8oKSkpLCB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUobm90Qm91bmRGdW5jdGlvbkNh
c2UpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5v
dEJvdW5kRnVuY3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rpb24+LCAiV2UgZG9uJ3QgaGFu
ZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZvIGJlbG93Iik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdEJvdW5kRnVuY3Rpb25DYXNlLCBub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGNsYXNzSW5mbywg
bV9vdXQuY29uc3RJbnRQdHIoSlNSZW1vdGVGdW5jdGlvbjo6aW5mbygpKSksIHVuc3VyZShzbG93
Q2FzZSksIHVuc3VyZShub3RCb3VuZE9yUmVtb3RlRnVuY3Rpb25DYXNlKSk7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBleGVjdXRh
YmxlID0gZ2V0RXhlY3V0YWJsZShmdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc1R5
cGUoZXhlY3V0YWJsZSwgTmF0aXZlRXhlY3V0YWJsZVR5cGUpLCB1bnN1cmUobmF0aXZlRXhlY3V0
YWJsZUNhc2UpLCB1bnN1cmUoZnVuY3Rpb25FeGVjdXRhYmxlQ2FzZSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDgwNmIxN2RlZmI1ZjI2ZWRiMzEzYTg2NDAxOTIyYTY5
MTdkMDA3MDcuLjAxZTFjOTMyYmYzMzcxMjAzNTViOGEwZjAwNmRmY2E3NDdiMTEyNWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJKSVRXb3JrbGlzdElubGluZXMuaCIKICNp
bmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5oIgpAQCAtMzIxOSw2ICsz
MjIwLDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZU5h
bWVzcGFjZU9iamVjdFNwYWNlLCBtb2R1bGVOYW1lc3AKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlLCBuYXRpdmVTdGRGdW5jdGlv
bkhlYXBDZWxsVHlwZSwgSlNOYXRpdmVTdGRGdW5jdGlvbikgLy8gSGFzaDoweDcwZWQ2MWU0CiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgUHJveHlPYmplY3QpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlS
ZXZva2UpIC8vIEhhc2g6MHhiNTA2YTkzOQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTUmVtb3Rl
RnVuY3Rpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NvcGVk
QXJndW1lbnRzVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU2NvcGVk
QXJndW1lbnRzVGFibGUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
c2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgSlNTY3JpcHRGZXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFhM2Jj
MWMzYjE5NTM5NmY1YjhkYWQzNDY2ZWMxZGI0OTRiZWE1N2MuLmFkY2ZhYmIzYmQyZjI2NzUwMjM5
NjQ1Nzk3N2JiN2QxN2FmZWEzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTky
Niw2ICs5MjYsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVk
U2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAppbmRleCAzODhjZjA0NWNkOWM4NzkzMjNjOTM2ODE2MmIwM2VmMTVj
YjdmN2U2Li43OGU3NzM0ZTI2MzliN2U5ODhiZDk0NTliMDc2YmY3YmNlNGMwNzFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcApAQCAtMzQ3LDYgKzM0NywxNSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CisgICAgaWYgKEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9u
Kj4odm0sIHZhbHVlKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIs
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBjb25zdHJ1
Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgInRhcmdldEZ1bmN0aW9uIl9zLCByZW1v
dGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworCisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CiAK
ICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNEeW5hbWljQ2FzdDxQcm94eU9iamVjdCo+
KHZtLCB2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDkxZWE0
NTI3ZmRmNjZiMmIxYmMzMWQ2OWY1NTVlN2U1ZmYzZTY3Ny4uYzBmN2U2YmUwYTY4MzA3ZDVhMDQw
NTc0NzU5Njg3ODA5YmFlMGQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKQEAgLTU1NSwxMiArNTU2LDEzIEBAIENhdGNo
SW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBX
YXNtOjpDYWxsZWUqIGNhbGxlCiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAg
IFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJt
aW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRj
aEluZm8mIGhhbmRsZXIpCisgICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBKU1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxv
Y2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFuZGxlciwgYm9vbCYgc2VlblJlbW90ZUZ1Y25j
dGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFt
ZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCisgICAg
ICAgICwgbV9zZWVuUmVtb3RlRnVuY3Rpb24oc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICB7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewpA
QCAtNjA5LDYgKzYxMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IGlmICghbV9jYWxsRnJhbWUtPmlzV2FzbUZyYW1lKCkgJiYgIEpTQzo6aXNSZW1vdGVGdW5jdGlv
bihtX3ZtLCBtX2NhbGxGcmFtZS0+anNDYWxsZWUoKSkgJiYgIW1faXNUZXJtaW5hdGlvbikgewor
ICAgICAgICAgICAgLy8gQ29udGludWUgc2VhcmNoaW5nIGZvciBhIGhhbmRsZXIsIGJ1dCBtYXJr
IHRoYXQgYSBtYXJzaGFsbGluZyBmdW5jdGlvbiB3YXMgb24gdGhlIHN0YWNrIHNvIHRoYXQgd2Ug
Y2FuCisgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIGV4Y2VwdGlvbiBiZWZvcmUganVtcGlu
ZyB0byB0aGUgaGFuZGxlci4KKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VW53aW5kRnVuY3Rvcio+
KHRoaXMpLT5tX3NlZW5SZW1vdGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwpAQCAtNjU3LDggKzY2
NiwzOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0
ciB9OwogICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7IGZhbHNlIH07CiAjZW5kaWYKKwor
ICAgIGJvb2wmIG1fc2VlblJlbW90ZUZ1bmN0aW9uOwogfTsKIAorLy8gUmVwbGFjZSBhbiBleGNl
cHRpb24gd2hpY2ggcGFzc2VzIGFjcm9zcyBhIG1hcnNoYWxsaW5nIGJvdW5kYXJ5IHdpdGggYSBU
eXBlRXJyb3IgZm9yIGl0cyBoYW5kbGVyJ3MgZ2xvYmFsIG9iamVjdC4KK3N0YXRpYyB2b2lkIHNh
bml0aXplUmVtb3RlRnVuY3Rpb25FeGNlcHRpb24oVk0mIHZtLCBDYWxsRnJhbWUqIGhhbmRsZXJD
YWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIERlZmVyVGVybWluYXRpb24g
ZGVmZXJTY29wZSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNUZXJtaW5hdGlvbkV4
Y2VwdGlvbihleGNlcHRpb24pKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBoYW5kbGVyQ2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKKyAgICAvLyBBdm9pZCB1c2VyLW9ic2VydmFibGUgVG9TdHJpbmcoKQor
ICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmc7CisgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RG
U3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgZWxzZSBpZiAoZXhjZXB0aW9uVmFsdWUuYXNDZWxs
KCktPmluaGVyaXRzPEVycm9ySW5zdGFuY2U+KHZtKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5n
ID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKS0+
c2FuaXRpemVkTWVzc2FnZVN0cmluZyhnbG9iYWxPYmplY3QpOworCisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7IC8vIFdlIG11c3Qgbm90IGhhdmUgZW50ZXJlZCBKUyBhdCB0aGlzIHBv
aW50CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7Cit9CisKIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChW
TSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwpAQCAtNjc4LDggKzcxOCwx
NSBAQCBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdAogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAg
ICBDYXRjaEluZm8gY2F0Y2hJbmZvOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2Fs
bEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZh
bHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CisgICAgYm9vbCBzZWVuUmVtb3RlRnVuY3Rpb24g
PSBmYWxzZTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0uaXNU
ZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2Nr
LCBjYXRjaEluZm8sIHNlZW5SZW1vdGVGdW5jdGlvbik7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNp
dDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFt
ZSwgdm0sIGZ1bmN0b3IpOworCisgICAgaWYgKHNlZW5SZW1vdGVGdW5jdGlvbikgeworICAgICAg
ICBzYW5pdGl6ZVJlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlv
bik7CisgICAgICAgIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOyAvLyBjbGVhciBtX25l
ZWRFeGNlcHRpb25DaGVjaworICAgIH0KKwogICAgIGlmICh2bS5oYXNDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3RhdGVVbnRpbChj
YWxsRnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBmNzA4Y2I3ZTFmYmI4MjYwY2U3NTc1ZDVkNjgxZWQ3NWEyM2UwZDNkLi5mNjgzYjBj
MWY4YWY4YzA2ZDFjZGM3Yzc5YTI4ZDE1NTFkMDNjMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAg
aW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQ
UlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEz
NTUsNiArMTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcp
IHsgfQogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlv
bihWTSYpIHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlv
bihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5k
ZXggOTA4ZmYwNDdhMWIxZWEzMmZhNjI3ZWM5MmJlNThlMGRjMjU1MTVkNC4uMjUwYjc3OWQ2MTQw
ZjM5NWQ3YzYwMmI0YTY0ZDBmYjBlYTQ1M2IzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2lu
Y2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50
LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
RnJvbVRodW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAg
IGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSkpKTsKKworICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11
c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxlZSkpOwor
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IGNhbGxlZS0+dGFyZ2V0RnVuY3Rpb24oKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5jb2RlZEpTVmFsdWUs
IChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkp
Cit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQo
aXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFs
dWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxl
ZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisKKyAgICAvLyBXZSBzaG91
bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICBpZiAoVU5MSUtFTFkodm0uaXNUZXJtaW5hdGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4
Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAgU3Ry
aW5nIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdCk7CisgICAgRXhjZXB0aW9uKiB0b1N0cmluZ0V4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgIGlmIChVTkxJS0VMWSh0b1N0cmluZ0V4Y2VwdGlvbiAmJiB2bS5pc1Rlcm1pbmF0
aW9uRXhjZXB0aW9uKHRvU3RyaW5nRXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsK
KworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworfQor
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2ODM0
YmYzLi5kNWU5ZjVjNzA1YTU4OTM5MDcxMWJhZjczNzBiMDA0YjI2MWZkYjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFz
cyBKU0Z1bmN0aW9uOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU0xleGljYWxFbnZp
cm9ubWVudDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNSZW1vdGVGdW5jdGlvbjsKIGNsYXNz
IEpTU2NvcGU7CiBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIEpTVmFsdWU7CkBAIC0xNTUsNiArMTU2
LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVjdCop
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9y
Q2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1
ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1Zh
bHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVu
Y3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA0MTliNjk4ZWY4
M2M5NmZjYmQ2MGFiOTVmZDgxYzhjNjMxZGMzMWI5Li5mM2IyMjVkMDAxYjM4OWUzZTQwMjBmMTY5
YjdkODdkODA3YzhmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMSw2ICsxNDIyLDE5MiBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVu
ayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9y
ZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5zaWdu
ZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxpZ25t
ZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKQor
ICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3RhY2tN
aXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBhcmd1
bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0YWls
CisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qgc28g
bG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2FsbCwg
c2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11bGEg
Zm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVyIG9m
IHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAgLy8g
ICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1lSGVh
ZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKQor
ICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAgIC8v
CisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgKENh
bGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJlZ2lz
dGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApOwor
CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBH
UFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0
LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQpLCBH
UFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUgYWN0
dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sgd2Ug
d2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFjayBz
cGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFk
ZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBUaHJv
dyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVu
ayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBqaXQu
bW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRzIGNv
bmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dy
ZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUkluZm86
OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0aGUg
YXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUgZm9y
IGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGluIHRo
ZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNS
ZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2Vw
dGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAvLyBG
b3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAgICAv
LyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5ldyBj
YWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3JhcHBp
bmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVtb3Rl
RnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUncyBh
cmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgorICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFN1YjMyKENDYWxsSGVscGVyczo6
WmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
ICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdUMSwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmltaXRp
dmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZhbHVl
SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQuYWRk
cmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAgICAg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6cmVn
VDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAgaml0
LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgw
KS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOwor
ICAgICAgICBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpLmxpbmtUbyhsb29wLCAmaml0KTsK
KworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZz
ZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3JlQ2Vs
bChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihD
b2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNlZCBv
biB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJNNjQs
IGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgQVNTRVJUX0VOQUJMRUQg
JiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hlY2tO
b3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7
CisgICAgICAgIGNoZWNrTm90TnVsbC5saW5rKCZqaXQpOworICAgIH0KKyNlbmRpZgorCisgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcp
OworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKworICAgIC8v
IFdyYXAgcmV0dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1By
aW1pdGl2ZTsKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2Vs
bChyZXN1bHRSZWdzKSk7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdE9iamVjdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQ
UkluZm86OnJlZ1QyLCByZXN1bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkp
OworCisgICAgcmVzdWx0SXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBleGNlcHRpb25DaGVja3MubGlu
aygmaml0KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJnZtKSk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlJlbW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGluayhu
b0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3Rp
TmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKAorICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVk
IHRodW5rIGZvciByZW1vdGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5NDVk
ZjFkNWVlMS4uNTg5ZTcwMDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4Miw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBkZjE4MGZiYWQxYzc5MWVjNzNjZjZiOWNhM2Y0YjQ0MjhjNDZiYTg0Li5mNGI5ODk3
YzdkMzFkMDgyZmM1NDY3ZGZhOGRjZWI1YzE1NTEzNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAtMzY2
LDYgKzM2Nyw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyRXZhbFNjcmlwdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhckdDKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyQ2xlYXJLZXB0T2JqZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRS
ZXBvcnQpOwpAQCAtNjQ5LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCBkb2xsYXIsICJnYyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ZG9sbGFyLCAiY2xlYXJLZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2JqZWN0
cywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5jdGlv
bkRvbGxhckdsb2JhbE9iamVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpOb25lKSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJpc1Jl
bW90ZUZ1bmN0aW9uIiwgZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAgICAg
ICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xv
YmFsIiksIGdsb2JhbFRoaXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9tQWNj
ZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAgLTIw
ODQsNiArMjA4NywxOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJH
bG9iYWxPYmplY3RGb3IsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
RXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAgICBK
U1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oaXNSZW1vdGVGdW5jdGlvbih2bSwgYXJnKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0LCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNjc0MjA2NTIzZDFjNGJjZGVlOGM1MDBhMDcxMzE2
MTVjMjQxZTU4YS4uNzM4ZTdmNGUxMjdlMTdkZWYyZjQ1OWM5OGJhMGE3NzI1MDU2NTk4YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAg
LTE2Myw4ICsxNjMsOSBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVzc2FnZVN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICBtZXNzYWdlVmFsdWUg
PSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbWVzc2Fn
ZVZhbHVlKQorICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICFtZXNzYWdlVmFsdWUuaXNQcmltaXRp
dmUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgbWVzc2FnZVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogfQogCkBAIC0xOTQs
NyArMTk1LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVTdHJpbmcoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbmFtZVZhbHVlKQorICAgIGlmICghbmFtZVZhbHVl
IHx8ICFuYW1lVmFsdWUuaXNQcmltaXRpdmUoKSkKICAgICAgICAgcmV0dXJuICJFcnJvciJfczsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCBiMzFjZmMxYzkwNWU5Njg0YTlhNzgxZTQ3ZGYxNmEw
ZmFhYzgzYzM2Li4xZDUyYWJmNTg1YzJiYWJlZDZjODRiNTk5NzRiYmE5NjczZGEwZmE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogCiAgICAgICAgIEpTQ2VsbCogY2FsbGVl
ID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAKLSAgICAgICAgaWYgKGNhbGxlZSAmJiAo
Y2FsbGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVl
LT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSkKKyAgICAgICAgaWYgKGNhbGxlZSAmJiAoY2Fs
bGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVlLT5p
bmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpIHx8IGNhbGxlZS0+dHlwZSgp
ID09IFByb3h5T2JqZWN0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKIAogICAgICAgICBpZiAoIW1faGFzRm91bmRGcmFtZSAmJiBjYWxsZWUgIT0gbV90
YXJnZXRDYWxsZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uY3BwCmluZGV4IDc2NzMxNThjNjRmMjU2ZTFiNDI5YTRjZmNmNThmOTFlYWZi
ZGQwNGIuLmQ1YmM0OTQwOTU3ZTU1MmJmNjRhNTBhNTkwMmMxMTBjMTUyNmRiOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkBA
IC0xODksNiArMTg5LDEwIEBAIEpTR2xvYmFsT2JqZWN0KiBnZXRGdW5jdGlvblJlYWxtKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgICAgICBv
YmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4ob2JqZWN0KS0+dGFyZ2V0RnVuY3Rpb24o
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgeworICAgICAgICAgICAgb2JqZWN0ID0g
anNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihvYmplY3QpLT50YXJnZXRGdW5jdGlvbigpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBpZiAob2JqZWN0LT50eXBl
KCkgPT0gUHJveHlPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2Fz
dDxQcm94eU9iamVjdCo+KG9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmNwcAppbmRleCBmZjVmMTkyNDY5MGY2MmY0OGM1MTM2NWI1MmU2YzU2M2I0ZTYy
ODlkLi5iODE3NTliY2E3ZWE4ZDU0MmJjOTJkMTFmZjI4N2I1MGQ4MmYzNzZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKQEAgLTIwNSw2ICsyMDUsOCBA
QCBjb25zdCBjaGFyKiBpbnRyaW5zaWNOYW1lKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAg
IHJldHVybiAiSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYyI7CiAgICAgY2FzZSBCb3VuZEZ1bmN0
aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJCb3VuZEZ1bmN0aW9uQ2FsbEludHJp
bnNpYyI7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiAiUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljIjsKICAgICBjYXNlIEpTTWFwR2V0SW50
cmluc2ljOgogICAgICAgICByZXR1cm4gIkpTTWFwR2V0SW50cmluc2ljIjsKICAgICBjYXNlIEpT
TWFwSGFzSW50cmluc2ljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMu
aAppbmRleCA4ZTY4ZTdlNzRmYjc4Y2RiZDMzMjRjZmJmMGEyNWVkNmQyMGQ2ZDU4Li40YWUzNjUx
YjU3NWUyMzE1OGJmNjg5NjBiNmRjY2MwOWE1N2JhZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaApAQCAtMTE4LDYgKzExOCw3IEBAIGVudW0gSW50cmluc2lj
IDogdWludDhfdCB7CiAgICAgVHlwZWRBcnJheUVudHJpZXNJbnRyaW5zaWMsCiAgICAgSXNUeXBl
ZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAg
ICBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCiAgICAgSlNNYXBHZXRJbnRyaW5zaWMsCiAg
ICAgSlNNYXBIYXNJbnRyaW5zaWMsCiAgICAgSlNNYXBTZXRJbnRyaW5zaWMsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCmluZGV4IDY4YzBlNWJjMmVhMDRiMzAyZGM0M2QyNDhh
YjUxODhmNGIzZTMwZmYuLmE2OTkzMTU5MDk5Y2NjMWI3Mzk2YTk3YzU4ZmQ0ZWUzMWE1YzE4MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC05OSw2ICs5OSw3IEBA
IHN0cnVjdCBKU1R5cGVSYW5nZSB7CiAgICAgbWFjcm8oSlNTeW1ib2xUYWJsZU9iamVjdCwgSlNU
eXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5cGU6Ok1vZHVsZUVudmlyb25tZW50VHlwZSkgXAog
ICAgIG1hY3JvKEpTU2NvcGUsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpXaXRo
U2NvcGVUeXBlKSBcCiAgICAgbWFjcm8oU3RyaW5nT2JqZWN0LCBKU1R5cGU6OlN0cmluZ09iamVj
dFR5cGUsIEpTVHlwZTo6RGVyaXZlZFN0cmluZ09iamVjdFR5cGUpIFwKKyAgICBtYWNybyhTaGFk
b3dSZWFsbU9iamVjdCwgSlNUeXBlOjpTaGFkb3dSZWFsbVR5cGUsIEpTVHlwZTo6U2hhZG93UmVh
bG1UeXBlKSBcCiAKIAogLy8gRm9yd2FyZCBkZWNsYXJlIHRoZSBjbGFzc2VzIGJlY2F1c2UgdGhl
eSBtYXkgbm90IGFscmVhZHkgZXhpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCmluZGV4IDhhNjBhOWY5ZThmNjY5NDJiNWI4NWM1ZGE1YWI1MTY2YTU4
ODM0ZDAuLmQ5MzdiMzZiMzA0NTc0NDBjZWE4YmVhNTE4ZDE5ODE5YTY0YTlkNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTVG9XYXNtSUNDYWxsZWUuaCIKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMTIzLDggKzEyNCw4
IEBAIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zCiAgICAgQVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+
Z2V0Q29uc3RydWN0RGF0YSA9PSAmSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk7CiAgICAg
QVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENh
bGxEYXRhKTsKIAotICAgIC8vIEpTQm91bmRGdW5jdGlvbiBpbnN0YW5jZXMgdXNlIGZpbmlzaENy
ZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVpciBuYW1lIHN0cmlu
ZyAvIGxlbmd0aC4KLSAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4o
dm0pKTsKKyAgICAvLyBKU0JvdW5kRnVuY3Rpb24vSlNSZW1vdGVGdW5jdGlvbiBpbnN0YW5jZXMg
dXNlIGZpbmlzaENyZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVp
ciBuYW1lIHN0cmluZyAvIGxlbmd0aC4KKyAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91
bmRGdW5jdGlvbj4odm0pICYmICF0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkp
OwogCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KGxlbmd0aCksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQpAQCAtMjUyLDYgKzI1MywxMiBA
QCBKU1N0cmluZyogSlNGdW5jdGlvbjo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICAgICAgSlNWYWx1ZSBzdHJpbmcgPSBqc01ha2VOb250cml2aWFsU3RyaW5nKGds
b2JhbE9iamVjdCwgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lU3RyaW5nKCksICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHN0cmluZyk7CisgICAgfSBlbHNl
IGlmIChpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgSlNSZW1vdGVG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHRoaXMpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEpTVmFs
dWUgc3RyaW5nID0ganNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJmdW5jdGlv
biAiLCBmdW5jdGlvbi0+bmFtZVN0cmluZygpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0i
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
IHJldHVybiBhc1N0cmluZyhzdHJpbmcpOwogICAgIH0KIAogICAgIGlmIChpc0hvc3RGdW5jdGlv
bigpKQpAQCAtNTcxLDYgKzU3OCw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlMZW5ndGgoVk0m
IHZtKQogICAgIGRvdWJsZSBsZW5ndGggPSAwOwogICAgIGlmICh0aGlzLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KHZtKSkKICAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTQm91bmRGdW5jdGlv
bio+KHRoaXMpLT5sZW5ndGgodm0pOworICAgIGVsc2UgaWYgKHRoaXMtPmluaGVyaXRzPEpTUmVt
b3RlRnVuY3Rpb24+KHZtKSkKKyAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rp
b24qPih0aGlzKS0+bGVuZ3RoKHZtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKCFpc0hv
c3RGdW5jdGlvbigpKTsKICAgICAgICAgbGVuZ3RoID0ganNFeGVjdXRhYmxlKCktPnBhcmFtZXRl
ckNvdW50KCk7CkBAIC02MjQsNyArNjMzLDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcgbmFtZSkKIAogSlNG
dW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5l
ZWRlZChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgJiYgIXRo
aXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpc0hvc3RPckJ1aWx0
aW5GdW5jdGlvbigpICYmICF0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAh
dGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKQogICAgICAgICByZXR1cm4gUHJv
cGVydHlTdGF0dXM6OkVhZ2VyOwogICAgIFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlm
eUxhenlMZW5ndGhJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmIChpc0xhenkobGF6eUxlbmd0aCkpCkBAIC02MzgsNyArNjQ3LDcgQEAgSlNGdW5jdGlvbjo6
UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZChWTSYg
dm0sIEpTR2xvYmEKIEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5
TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NF
UlQoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSk7Ci0gICAgaWYgKGlzQnVpbHRpbkZ1bmN0aW9u
KCkgfHwgdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9uPih2bSkpIHsKKyAgICBpZiAoaXNC
dWlsdGluRnVuY3Rpb24oKSB8fCB0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSB8
fCB0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAgUHJvcGVy
dHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5TGF6eUxlbmd0aElmTmVlZGVkKHZtLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChpc0xhenkobGF6eUxlbmd0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gbGF6eUxlbmd0aDsKQEAgLTY5NSw2ICs3MDQsMTQgQEAgSlNGdW5j
dGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5Qm91bmROYW1lSWZOZWVk
ZWQoVk0mIHZtLCBKU0dsb2IKICAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMgPSBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHk7
CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwogICAgICAgICBwdXREaXJl
Y3Qodm0sIG5hbWVJZGVudCwgc3RyaW5nLCBpbml0aWFsQXR0cmlidXRlcyk7CisgICAgfSBlbHNl
IGlmICh0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgRnVu
Y3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5lbnN1cmVSYXJlRGF0YSh2bSk7CisgICAg
ICAgIEpTU3RyaW5nKiBuYW1lID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPih0aGlzKS0+bmFt
ZU1heUJlTnVsbCgpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICBuYW1lID0ganNF
bXB0eVN0cmluZyh2bSk7CisgICAgICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1dGVzID0gUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5Owor
ICAgICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsKKyAgICAgICAgcHV0RGlyZWN0
KHZtLCBuYW1lSWRlbnQsIG5hbWUsIGluaXRpYWxBdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgcmV0
dXJuIFByb3BlcnR5U3RhdHVzOjpSZWlmaWVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDg0NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJh
OWZjZmQ4ZmMuLmMzMThkNWUxMTgzNzNlMGE4YzU4ZWUwMzU5ZWU5YzI3ZTBlMjQ3YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAg
ICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1Jl
bW90ZUZ1bmN0aW9uKFZNJikgY29uc3Q7CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2Iw
YWQ5NzIxMmU4OGY5ODdhNWRiMDguLmE4ODZjZDc1ZWZhODYyNmVhMTc0YzdiODQ4ODhkNzEzMzNl
MDYxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0
YWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc4LDYgKzc5LDExIEBAIGlubGluZSBib29s
IEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1
cm4gIWlzSG9zdEZ1bmN0aW9uKCkgJiYganNFeGVjdXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCk7CiB9CiAKK2lubGluZSBib29sIEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rp
b24oVk0mIHZtKSBjb25zdAoreworICAgIHJldHVybiBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9u
Pih2bSk7Cit9CisKIGlubGluZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9uOjpuYXRp
dmVGdW5jdGlvbigpCiB7CiAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpA
QCAtOTgsNiArMTA0LDExIEBAIGlubGluZSBib29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFs
dWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKQogICAgIHJldHVybiBmdW5j
dGlvbi0+bmF0aXZlRnVuY3Rpb24oKSA9PSBuYXRpdmVGdW5jdGlvbjsKIH0KIAoraW5saW5lIGJv
b2wgaXNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlLmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKTsKK30KKwogaW5saW5lIGJvb2wg
SlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9u
UmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKQEAgLTExNCw2ICsxMjUsOCBA
QCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTmFtZSgpIGNvbnN0CiAKIGlubGlu
ZSBib29sIEpTRnVuY3Rpb246OmNhbkFzc3VtZU5hbWVBbmRMZW5ndGhBcmVPcmlnaW5hbChWTSYp
CiB7CisgICAgLy8gSlNSZW1vdGVGdW5jdGlvbiBuZXZlciBoYXMgYSAnbmFtZScgZmllbGQsIHJl
dHVybiB0cnVlCisgICAgLy8gdG8gYXZvaWQgYWxsb2NhdGluZyBhIEZ1bmN0aW9uUmFyZURhdGEu
CiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBG
dW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CkBAIC0xNTksNyAr
MTcyLDcgQEAgaW5saW5lIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmVuc3VyZVJhcmVE
YXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoSlNHbG9iYWwKIAogaW5saW5lIEpTU3RyaW5nKiBKU0Z1
bmN0aW9uOjphc1N0cmluZ0NvbmN1cnJlbnRseShWTSYgdm0pIGNvbnN0CiB7Ci0gICAgaWYgKGlu
aGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpbmhlcml0czxKU0JvdW5kRnVu
Y3Rpb24+KHZtKSB8fCBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChpc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUoKSktPmFzU3RyaW5nQ29u
Y3VycmVudGx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKaW5kZXggMjhhMjFkYTY2ZTBkZjI4NjZlOThhNjkzNmJlN2Q3MTExOGQxZDFj
ZS4uYTkwNzY3OTg4ZWJjNmM3NzljZmYzOGNmNzYzMzRkZTNjOGNiZTcwZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQwLDYg
KzE0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgpAQCAtNzcwLDYgKzc3MSwx
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgW10gKGNvbnN0
IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpT
TmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBp
bml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgICAgIH0pOworICAg
IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQu
b3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CiAgICAgSlNG
dW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uID0gbnVsbHB0cjsKQEAgLTE1MzEsNiArMTUzNiwxNCBAQCBjYXBpdGFsTmFtZSAjIyBDb25z
dHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFs
TmFtZQogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgY3JlYXRlUHJp
dmF0ZVN5bWJvbCkpOwogICAgICAgICB9KTsKIAorICAgIC8vIFNoYWRvd1JlYWxtcworICAgIG1f
bGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6
OmNyZWF0ZVJlbW90ZUZ1bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygp
LCBjcmVhdGVSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKyAgICBtX2xpbmtUaW1lQ29u
c3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojppc1JlbW90ZUZ1
bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7
CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0
PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBpc1JlbW90ZUZ1bmN0
aW9uKSk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIC8vIFdl
YkFzc2VtYmx5IFN0cmVhbWluZyBBUEkKICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojp3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1p
bmdJbnRlcm5hbCldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5p
dCkgewpAQCAtMjI1OSw2ICsyMjcyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3Qt
Pm1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7Cisg
ICAgdGhpc09iamVjdC0+bV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZW5lcmF0b3JGdW5jdGlvblN0cnVj
dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCAxYjFkOWI1NTNjNzQ3MmJlYmI2NzQ4OWQ5MmM3N2EzZDkzNjk2ZDJhLi4zYWRmYTM4
ZThhMzI0OWE0NThiY2IxNzQ1YjE4MjY1M2RmNWM4Yjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyMSw2ICs0MjEsNyBAQCBwdWJs
aWM6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKQEAgLTQzNyw2
ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbmF0aXZl
U3RkRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPEFz
eW5jRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5bmNGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0
ZUJhcnJpZXI8QXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwpAQCAtODcyLDYgKzg3NCw3
IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3Jk
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJmYzhhYWIzMTRmYTQ4Y2U3NzRhMDdmNjAwNjllZDgyZDA3YzJhZmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24u
aCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Jl
bW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKwor
SlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24o
dm0sIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQorICAgICwgbV9sZW5ndGgoMC4wKQoreworfQorCitz
dGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0p
KSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFy
Z3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJn
ZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0
aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgd3JhcFJldHVyblZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShn
bG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1z
IG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVu
Y3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVG
dW5jdGlvbih2bSkpOworICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihyZW1vdGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFw
cGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkp
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5o
YXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRv
IGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQorCisgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0g
Y2FsbCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5W
YWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpT
UmVtb3RlRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1v
dGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSkpOworICAgIEpTT2JqZWN0KiB0YXJnZXRG
dW5jdGlvbiA9IHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpOworICAgIEpTR2xvYmFs
T2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0
KCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgYXJn
cy5hcHBlbmQod3JhcHBlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFz
T3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNhbGxE
YXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2Fs
bCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5WYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBBU1NFUlQoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPT0gMSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oSlNDOjppc1JlbW90ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID09IDIpOworICAgIEpTVmFsdWUgdGFyZ2V0RnVuY3Rpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIEFTU0VSVCh0YXJnZXRGdW5jdGlvbi5pc0NhbGxhYmxlKHZtKSk7
CisKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJn
ZXRGdW5jdGlvbi5hc0NlbGwoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGRlc3RpbmF0aW9uR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmIChhdXRvIHNoYWRv
d1JlYWxtID0ganNEeW5hbWljQ2FzdDxTaGFkb3dSZWFsbU9iamVjdCo+KHZtLCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2Jq
ZWN0ID0gc2hhZG93UmVhbG0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRhcmdldENhbGxhYmxlKSkpOworfQorCitpbmxp
bmUgU3RydWN0dXJlKiBnZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZ2xvYmFsT2JqZWN0LWF3
YXJlIHN0cnVjdHVyZSBjYWNoaW5nCisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+cmVtb3RlRnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKK30KKworSlNSZW1vdGVGdW5jdGlvbiogSlNSZW1vdGVGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IHRhcmdldENhbGxhYmxlKQoreworICAgIEFTU0VSVCh0YXJnZXRDYWxsYWJsZSAmJiB0YXJnZXRD
YWxsYWJsZS0+aXNDYWxsYWJsZSh2bSkpOworICAgIGlmIChhdXRvIHJlbW90ZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHZtLCB0YXJnZXRDYWxsYWJsZSkpIHsKKyAgICAgICAg
dGFyZ2V0Q2FsbGFibGUgPSByZW1vdGUtPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VS
VCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHZtLCB0YXJnZXRDYWxsYWJsZSkpOworICAgIH0KKwor
ICAgIGJvb2wgaXNKU0Z1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSk7Cisg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJlbW90ZUZ1bmN0aW9uKGlz
SlNGdW5jdGlvbik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZW1vdGVGdW5jdGlv
blN0cnVjdHVyZShnbG9iYWxPYmplY3QpOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSBKU1Jl
bW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFy
Z2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNSZW1vdGVGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgLy8gMy4xLjI6IENvcHlOYW1lQW5kTGVuZ3Ro
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKworICAgIFByb3Bl
cnR5U2xvdCBzbG90KG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOworICAgIGJvb2wgdGFyZ2V0SGFzTGVuZ3RoID0gbV90YXJnZXRG
dW5jdGlvbi0+Z2V0T3duUHJvcGVydHlTbG90SW5saW5lKGdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworCisgICAgaWYgKHRhcmdldEhhc0xlbmd0aCkgeworICAgICAgICBKU1ZhbHVlIHRh
cmdldExlbmd0aCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICBkb3VibGUgdGFyZ2V0TGVuZ3RoQXNJbnQgPSB0YXJnZXRMZW5ndGgudG9JbnRlZ2Vy
T3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICBtX2xlbmd0aCA9IHN0ZDo6bWF4KHRhcmdldExlbmd0aEFz
SW50LCAwLjApOworICAgIH0KKworICAgIEpTVmFsdWUgdGFyZ2V0TmFtZSA9IEpTVmFsdWUobV90
YXJnZXRGdW5jdGlvbi5nZXQoKSkuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICBpZiAo
dGFyZ2V0TmFtZS5pc1N0cmluZygpKQorICAgICAgICBtX25hbWVNYXlCZU51bGwuc2V0KHZtLCB0
aGlzLCBhc1N0cmluZyh0YXJnZXROYW1lKSk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Jl
bW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0RnVuY3Rpb24pOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OThmOGFmZTJiNjFjNTJjMzdkNWYwZjczMTFkMzZiMDMyNDNiNzVmOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBB
dXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxs
Rm9ySlNGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9u
Q2FsbEdlbmVyaWMpOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9u
KTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24pOworCisv
LyBKU1JlbW90ZUZ1bmN0aW9uIGNyZWF0ZXMgYSBicmlkZ2UgYmV0d2VlbiBpdHMgbmF0aXZlIFJl
YWxtIGFuZCBhIHJlbW90ZSBvbmUuCisvLyBXaGVuIGludm9rZWQsIGFyZ3VtZW50cyBhcmUgd3Jh
cHBlZCB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSByZWFsbSBib3Vu
ZGFyeS4KKy8vIFRoZSByZXR1cm4gdmFsdWUgYW5kIGFueSBhYnJ1cHQgY29tcGxldGlvbnMgYXJl
IGFsc28gZmlsdGVyZWQuCitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uIGZpbmFsIDogcHVibGljIEpT
RnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Z1bmN0aW9uOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNSZW1vdGVGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgSlNP
YmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5jdGlvbi5nZXQoKTsg
fQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7IHJldHVybiB0YXJn
ZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQorICAgIEpTU3RyaW5nKiBuYW1lTWF5QmVO
dWxsKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lTWF5QmVOdWxsLmdldCgpOyB9CisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghbV9uYW1lTWF5QmVOdWxs
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIEFTU0VSVCghbV9u
YW1lTWF5QmVOdWxsLT5pc1JvcGUoKSk7CisgICAgICAgIGJvb2wgYWxsb2NhdGlvbkFsbG93ZWQg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZU1heUJlTnVsbC0+dHJ5R2V0VmFsdWUoYWxs
b2NhdGlvbkFsbG93ZWQpOworICAgIH0KKworICAgIGRvdWJsZSBsZW5ndGgoVk0mKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1JlbW90ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNP
YmplY3QqIHRhcmdldENhbGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX3RhcmdldEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lTWF5
QmVOdWxsOworICAgIGRvdWJsZSBtX2xlbmd0aDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAppbmRleCA4NDczMDkxMjRhNWY4MTgzOGQ5OTU3NWVlMDM5MWE5NWNlMzVk
ZTg5Li42MjAxMTg2YmIxNzFlNjgwOGJkMmFjZDc4ZWNlNGM1OWQzYjM3YmQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC02MzIsNiArNjMyLDggQEAgc3RhdGljIFRodW5r
R2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMp
CiAgICAgICAgIHJldHVybiByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVu
Y3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5l
cmF0b3I7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNzA5LDYgKzcxMSwyNSBAQCBOYXRpdmVFeGVjdXRh
YmxlKiBWTTo6Z2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25z
dHJ1Y3QpCiAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9
CiAKK05hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5j
dGlvbikKK3sKKyAgICBib29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdl
dE9yQ3JlYXRlID0gWyZdIChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVF
eGVjdXRhYmxlKiB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0
ID0gZ2V0SG9zdEZ1bmN0aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlv
bkNhbGxHZW5lcmljIDogcmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAg
ICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMgOiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMs
CisgICAgICAgICAgICBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3Ry
aW5nKCkpOworICAgICAgICBzbG90ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAg
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
fQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTZlMzBm
ZmI5NDgxMGRkZDEyZGE4Y2NjNzE0NjE5MDYyZDAyZDQwNC4uZDUyODY0ZTlhMDYzOGY3MWFhMDZl
ZTQzZDBiMzIzMDU0OWU2YjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00
MzIsNiArNDMyLDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFj
ZSkKQEAgLTU3Miw2ICs1NzMsOSBAQCBwdWJsaWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiBtX3Nsb3dCb3VuZEV4ZWN1dGFibGU7CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Ns
b3dDYW5Db25zdHJ1Y3RCb3VuZEV4ZWN1dGFibGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+IG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+IG1fc2xvd1JlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJl
ZFdvcmtUaW1lcj4gZGVmZXJyZWRXb3JrVGltZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURl
c3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CkBAIC02ODYsNiArNjkwLDcgQEAgcHVibGljOgogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmlu
c2ljLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRG
dW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDE0MWRmMWUxMDUz
MWEzMTg0NDQxYTcwNDI5ZmMwYzZlNWUyNjkzNC4uY2NkNWM2ZWM5YWU1MTA4MTg4ZDlhNDYxNzM2
NGYzZDM0YmUxMDQ2NSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIg
IDxjYWl0cEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBp
bmcgbG9naWMgdG8gYSBuZXcgRnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBmaWxlIHRlc3RpbmcgQ29weU5hbWVB
bmRMZW5ndGggc3R1ZmYgaW4gdGhlIFNoYWRvd1JlYWxtIHByb3Bvc2FsLAorICAgICAgICBhbmQg
Zml4IHVwIGFzc2VydGlvbnMgYWJvdXQgdGhpcyBpbiBzaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMK
KworICAgICAgICAqIHN0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanM6CisgICAgICAgICog
c3RyZXNzL3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24tY29weS1sZW5ndGgtYW5kLW5hbWUu
anM6IEFkZGVkLgorCiAyMDIyLTAyLTA2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dhc21dIHJlZi5udWxsIGNoZWNrIHNob3VsZCBiZSBkb25lIGZpcnN0
IGluIEIzIGNhbGxfcmVmCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0t
ZXZhbHVhdGUuanMgYi9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKaW5k
ZXggYjAxZGExZjU3YThmOTViODNkYjFiZTljY2JmZTg5YWZlYThmZjhjZS4uODM2MTkyMGU2YWQz
ZDAxODI3OGY1ZmYxOThjNmE3Nzk4Y2I0ODk1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mv
c2hhZG93LXJlYWxtLWV2YWx1YXRlLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFs
bS1ldmFsdWF0ZS5qcwpAQCAtODAsOCArODAsMTcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVu
YywgZXJyb3JUeXBlLCBhc3NlcnRpb25GbikgewogICAgIHNob3VsZEJlKE9iamVjdC5nZXRQcm90
b3R5cGVPZih3cmFwcGVkSW52b2tlQW5kQWRkKSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKIAogICAg
IC8vIG5hbWUgYW5kIGxlbmd0aCBwcm9wZXJ0aWVzIGZyb20gd3JhcHBlZCBmdW5jdGlvbiBhcmUg
YWJzZW50Ci0gICAgc2hvdWxkQmUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFw
cGVkSW52b2tlQW5kQWRkLCAibGVuZ3RoIiksIHVuZGVmaW5lZCk7Ci0gICAgc2hvdWxkQmUoT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRkLCAibmFtZSIp
LCB1bmRlZmluZWQpOworICAgIGxldCBsZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRkLCAibGVuZ3RoIik7CisgICAgc2hvdWxkQmUo
bGVuZ3RoRGVzYy52YWx1ZSwgMik7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy53cml0YWJsZSwg
ZmFsc2UpOworICAgIHNob3VsZEJlKGxlbmd0aERlc2MuZW51bWVyYWJsZSwgZmFsc2UpOworICAg
IHNob3VsZEJlKGxlbmd0aERlc2MuY29uZmlndXJhYmxlLCB0cnVlKTsKKworICAgIGxldCBuYW1l
RGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod3JhcHBlZEludm9rZUFuZEFk
ZCwgIm5hbWUiKTsKKyAgICBzaG91bGRCZShuYW1lRGVzYy52YWx1ZSwgImludm9rZUFuZEFkZCIp
OworICAgIHNob3VsZEJlKG5hbWVEZXNjLndyaXRhYmxlLCBmYWxzZSk7CisgICAgc2hvdWxkQmUo
bmFtZURlc2MuZW51bWVyYWJsZSwgZmFsc2UpOworICAgIHNob3VsZEJlKG5hbWVEZXNjLmNvbmZp
Z3VyYWJsZSwgdHJ1ZSk7CiAKICAgICAvLyBjYW4ndCBwYXNzIG9iamVjdHMgaW50byBhIHNoYWRv
dyByZWFsbS13cmFwcGVkIGZ1bmN0aW9uCiAgICAgbGV0IG51bWJlck9iaiA9IHsgdmFsdWVPZigp
IHsgcmV0dXJuIC0xIH0gfTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFs
bS1yZW1vdGUtZnVuY3Rpb24tY29weS1sZW5ndGgtYW5kLW5hbWUuanMgYi9KU1Rlc3RzL3N0cmVz
cy9zaGFkb3ctcmVhbG0tcmVtb3RlLWZ1bmN0aW9uLWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZlY2UxMmQ4MDM3MTVlMjZkNWQwMmY0ODc3MzUzNjE3MjY5MDcwMTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9zaGFkb3ctcmVhbG0tcmVtb3RlLWZ1bmN0aW9u
LWNvcHktbGVuZ3RoLWFuZC1uYW1lLmpzCkBAIC0wLDAgKzEsNDE0IEBACisvL0AgcmVxdWlyZU9w
dGlvbnMoIi0tdXNlU2hhZG93UmVhbG09MSIpCisKK2Z1bmN0aW9uIHN1bW1hcml6ZUVsZW1lbnQo
ZWxlbWVudCkgeworICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICJvYmplY3QiKSB7CisgICAgaWYg
KGVsZW1lbnQgPT09IG51bGwpCisgICAgICByZXR1cm4gIm51bGwiOworICAgIGlmIChBcnJheS5p
c0FycmF5KGVsZW1lbnQpKQorICAgICAgcmV0dXJuIHN1bW1hcml6ZUFycmF5KGVsZW1lbnQsIDAp
OworICB9CisgIGxldCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeShlbGVtZW50KTsKKyAgaWYgKHJl
c3VsdC5sZW5ndGggPiAyMCkgeworICAgIGxldCBjID0gcmVzdWx0WzBdOworICAgIGlmIChjID09
PSAieyIpCisgICAgICBjID0gIn0iOworICAgIHJlc3VsdCA9IGAke3Jlc3VsdC5zdWJzdHIoMCwg
MTUpfS4uLiR7Y31gOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIHN1bW1h
cml6ZUFycmF5KGFycmF5LCBpbmRleCwgc2hvd0luZGV4KSB7CisKKyAgbGV0IHByZWZpeCA9IGlu
ZGV4ID09PSAwID8gIiIgOiBgLi4uJHtzdW1tYXJpemVFbGVtZW50KGFycmF5W2luZGV4IC0gMV0p
fSwgYDsKKyAgbGV0IHN1ZmZpeCA9IGluZGV4ICsgMSA8IGFycmF5Lmxlbmd0aCA/IGAsICR7c3Vt
bWFyaXplRWxlbWVudChhcnJheVtpbmRleCArIDFdKX0uLi5gIDogIiI7CisKKyAgaWYgKHByZWZp
eC5sZW5ndGggPiAyMCkKKyAgICBwcmVmaXggPSBwcmVmaXguc3Vic3RyKHByZWZpeC5sZW5ndGgg
LSAyMCk7CisgIGlmIChzdWZmaXgubGVuZ3RoID4gMjApCisgICAgc3VmZml4ID0gc3VmZml4LnN1
YnN0cigwLCAyMCk7CisgIGVuZGVyID0gc2hvd0luZGV4ID8gYCAoYXQgaW5kZXggJHtpbmRleH0p
YCA6ICIiOworICByZXR1cm4gYFske3ByZWZpeH0ke0pTT04uc3RyaW5naWZ5KGFycmF5W2luZGV4
XSl9JHtzdWZmaXh9XSR7ZW5kZXJ9YDsKK30KK2Z1bmN0aW9uIHNob3VsZEJlQXJyYXlFcXVhbChh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgIGlmICgoQXJyYXkuaXNBcnJheShleHBlY3RlZCkgJiYgIUFy
cmF5LmlzQXJyYXkoYWN0dWFsKSkpCisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke0pT
T04uc3RyaW5naWZ5fSBidXQgZm91bmQgJHtKU09OLnN0cmluZ2lmeShhY3R1YWwpfWApOworCisg
IHZhciBpOworICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgKytpKSB7Cisg
ICAgbGV0IGUgPSBleHBlY3RlZFtpXTsKKyAgICBsZXQgYSA9IGFjdHVhbFtpXTsKKyAgICBpZiAo
ZSA9PT0gYSkKKyAgICAgIGNvbnRpbnVlOworICAgIGlmIChBcnJheS5pc0FycmF5KGUpKQorICAg
ICAgc2hvdWxkQmVBcnJheUVxdWFsKGEsIGUpOworICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0
ZWQgJHtzdW1tYXJpemVBcnJheShleHBlY3RlZCwgaSwgdHJ1ZSl9IGJ1dCBmb3VuZCAke3N1bW1h
cml6ZUFycmF5KGFjdHVhbCwgaSl9YCkKKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSB8fCBBcnJheS5p
c0FycmF5KGV4cGVjdGVkKSkKKyAgICAgIHJldHVybiBzaG91bGRCZUFycmF5RXF1YWwoYWN0dWFs
LCBleHBlY3RlZCk7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH1gKTsKK30K
KworZnVuY3Rpb24gc2hvdWxkSGF2ZURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpIHsKKyAgbGV0IGFjdHVhbCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBwcm9wZXJ0eU5hbWUpOworICBsZXQgb3JkZXIgPSBPYmplY3Qua2V5cyhkZXNj
cmlwdG9yKS5zb3J0KCk7CisgIGZvciAobGV0IGtleSBvZiBvcmRlcikgeworICAgIGxldCB2YWx1
ZSA9IGRlc2NyaXB0b3Jba2V5XTsKKyAgICBpZiAoWyJ1bmRlZmluZWQiLCAiYm9vbGVhbiIsICJu
dW1iZXIiLCAic3RyaW5nIiwgInN5bWJvbCIsICJiaWdpbnQiXS5pbmNsdWRlcyh0eXBlb2YgdmFs
dWUpIHx8IHZhbHVlID09PSBudWxsKSB7CisgICAgICBpZiAoYWN0dWFsW2tleV0gIT09IHZhbHVl
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChh
Y3R1YWwpfSdzICcke2tleX0nIHRvIGJlICR7c3VtbWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQg
Zm91bmQgJHtzdW1tYXJpemVFbGVtZW50KGFjdHVhbFtrZXldKX1gKTsKKyAgICB9IGVsc2UgaWYg
KHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgaWYgKGFjdHVhbFtrZXldICE9
PSB2YWx1ZSAmJiBTdHJpbmcodmFsdWUpICE9PSBTdHJpbmcoYWN0dWFsW2tleV0pKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7c3VtbWFyaXplRWxlbWVudChhY3R1YWwpfSdz
ICcke2tleX0nIHRvIGJlICR7c3VtbWFyaXplRWxlbWVudCh2YWx1ZSl9LCBidXQgZm91bmQgJHtz
dW1tYXJpemVFbGVtZW50KGFjdHVhbFtrZXldKX1gKTsKKyAgICB9CisgIH0KK30KKworZnVuY3Rp
b24gc2hvdWxkVGhyb3cob3AsIGVycm9yQ29uc3RydWN0b3IsIGRlc2MpIHsKKyAgICB0cnkgewor
ICAgICAgICBvcCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKCEoZSBpbnN0YW5j
ZW9mIGVycm9yQ29uc3RydWN0b3IpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRo
cmV3ICR7ZX0sIGJ1dCBzaG91bGQgaGF2ZSB0aHJvd24gJHtlcnJvckNvbnN0cnVjdG9yLm5hbWV9
YCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aHJvdyBuZXcgRXJy
b3IoYEV4cGVjdGVkICR7ZGVzYyB8fCAnb3BlcmF0aW9uJ30gdG8gdGhyb3cgJHtlcnJvckNvbnN0
cnVjdG9yLm5hbWV9LCBidXQgbm8gZXhjZXB0aW9uIHRocm93bmApOworfQorCitsZXQgcmVhbG0g
PSBuZXcgU2hhZG93UmVhbG07CisKK2xldCBmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7Cisg
IGxldCB0ZXN0MSA9IGZ1bmN0aW9uKGEsIGIsIGMpIHsKKyAgfTsKKyAgcmV0dXJuIHRlc3QxOwor
fSkoKWApOworCitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1ZTog
MywKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJh
YmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFs
dWU6ICJ0ZXN0MSIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7
CisgIGZ1bmN0aW9uIHRlc3QyKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwsIG0s
IG4sIG8sIHApIHsKKyAgfQorICByZXR1cm4gdGVzdDI7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVE
ZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiAxNiwKKyAgd3JpdGFibGU6IGZhbHNl
LAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91
bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAgdmFsdWU6ICJ0ZXN0MiIsCisgIHdyaXRh
YmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
K30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9PiB7CisgIGxldCBmID0gZnVuY3Rpb24o
KSB7CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICJsZW5ndGgiLCB7CisgICAgdmFs
dWU6IC1JbmZpbml0eSwKKyAgICB3cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRy
dWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGYsICJuYW1lIiwgeworICAgIHZhbHVlOiAiMjciLAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1
cm4gZjsKK30pKClgKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAg
dmFsdWU6IDAsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgIm5hbWUiLCB7
CisgIHZhbHVlOiAiMjciLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNl
LAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkg
PT4geworICBsZXQgZiA9IGZ1bmN0aW9uKCkgeworICB9CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShmLCAibGVuZ3RoIiwgeworICAgIHZhbHVlOiAtOS43NCwKKyAgICB3cml0YWJsZTogdHJ1ZSwK
KyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICJuYW1lIiwgeworICAgIHZhbHVlOiA1NywKKyAgICB3
cml0YWJsZTogdHJ1ZSwKKyAgICBjb25maWd1cmFibGU6IHRydWUsCisgICAgZW51bWVyYWJsZTog
dHJ1ZQorICB9KTsKKyAgcmV0dXJuIGY7Cit9KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9y
KGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1l
cmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNj
cmlwdG9yKGYsICJuYW1lIiwgeworICB2YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAg
ZW51bWVyYWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitsZXQgaW5u
ZXJMb2cgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgZ2xvYmFsVGhpcy5fbG9nID0gW107
CisgIGdsb2JhbFRoaXMubG9nID0gZnVuY3Rpb24gbG9nKGl0ZW0pIHsKKyAgICBnbG9iYWxUaGlz
Ll9sb2cucHVzaChpdGVtKTsKKyAgfTsKKworICByZXR1cm4gZnVuY3Rpb24gbG9nKCkgeworICAg
IGxldCBsb2cgPSBnbG9iYWxUaGlzLl9sb2c7CisgICAgZ2xvYmFsVGhpcy5fbG9nID0gW107Cisg
ICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvZyk7CisgIH07Cit9KSgpYCk7CisKK2Z1bmN0aW9u
IGxvZygpIHsKKyAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoaW5uZXJMb2coKSk7CisgIHNob3Vs
ZEJlKEFycmF5LmlzQXJyYXkocmVzdWx0KSwgdHJ1ZSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisK
K2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0IHRhcmdldCA9IChmdW5jdGlvbigp
IHsKKyAgICBsb2coXGBjYWxsZWRcYCk7CisgIH0pOworICBsZXQgcCA9IG5ldyBQcm94eSh0YXJn
ZXQsIHsKKyAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcCkgeworICAgICAgbG9nKFxg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3Qu
Z2V0T3duUHJvcGVydHkoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGdldCh0LCBwKSB7Cisg
ICAgICBsb2coXGBnZXQgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXQoLi4uYXJn
dW1lbnRzKTsKKyAgICB9LAorICAgIGRlZmluZVByb3BlcnR5KHQsIHAsIG8pIHsKKyAgICAgIGxv
ZyhcYGRlZmluZVByb3BlcnR5IFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5l
UHJvcGVydHkoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGdldFByb3RvdHlwZU9mKHQpIHsK
KyAgICAgIGxvZyhcYGdldFByb3RvdHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
UHJvdG90eXBlT2YoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIHNldFByb3RvdHlwZU9mKHQs
IHYpIHsKKyAgICAgIGxvZyhcYHNldFByb3RvdHlwZU9mXGApOworICAgICAgcmV0dXJuIFJlZmxl
Y3Quc2V0UHJvdG90eXBlT2YoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGlzRXh0ZW5zaWJs
ZSh0KSB7CisgICAgICBsb2coXGBpc0V4dGVuc2libGVcYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5pc0V4dGVuc2libGUoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIHByZXZlbnRFeHRlbnNp
b25zKHQpIHsKKyAgICAgIGxvZyhcYHByZXZlbnRFeHRlbnNpb25zXGApOworICAgICAgcmV0dXJu
IFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGhh
cyh0LCBwKSB7CisgICAgICBsb2coXGBoYXMgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5oYXMoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIHNldCh0LCBwLCB2KSB7CisgICAgICBs
b2coXGBzZXQgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5zZXQoLi4uYXJndW1lbnRz
KTsKKyAgICB9LAorICAgIGRlbGV0ZSh0LCBwKSB7CisgICAgICBsb2coXGBkZWxldGUgXCR7cH1c
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGUoLi4uYXJndW1lbnRzKTsKKyAgICB9LAor
ICAgIG93bktleXModCkgeworICAgICAgbG9nKFxgb3duS2V5c1xgKTsKKyAgICAgIHJldHVybiBS
ZWZsZWN0Lm93bktleXMoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGFwcGx5KCkgeworICAg
ICAgbG9nKFxgYXBwbHlcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSguLi5hcmd1bWVu
dHMpOworICAgIH0sCisgICAgY29uc3RydWN0KCkgeworICAgICAgbG9nKFxgY29uc3RydWN0XGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuYXJndW1lbnRMaXN0KC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICJsZW5ndGgiLCB7Cisg
ICAgZ2V0KCkgeworICAgICAgbG9nKCJsZW5ndGggZ2V0dGVyIik7CisgICAgICByZXR1cm4gSW5m
aW5pdHk7CisgICAgfSwKKyAgICBzZXQoKSB7CisgICAgICBsb2coImxlbmd0aCBzZXR0ZXIiKTsK
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAg
ICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0
LCAibmFtZSIsIHsKKyAgICBnZXQoKSB7CisgICAgICBsb2coIm5hbWUgZ2V0dGVyIik7CisgICAg
ICByZXR1cm4gSW5maW5pdHk7CisgICAgfSwKKyAgICBzZXQoKSB7CisgICAgICBsb2coIm5hbWUg
c2V0dGVyIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKyAgICBjb25maWd1cmFibGU6
IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJuIHA7Cit9KSgpYCk7
CisKK2YoKTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiBJ
bmZpbml0eSwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29u
ZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsK
KyAgdmFsdWU6ICIiLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAor
ICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVu
Z3RoIiwKKyAgImxlbmd0aCBnZXR0ZXIiLAorICAiZ2V0IG5hbWUiLAorICAibmFtZSBnZXR0ZXIi
LAorICAiYXBwbHkiLAorICAiY2FsbGVkIgorXSk7CitmKCk7CitzaG91bGRCZShsb2coKSwgWyJh
cHBseSIsICJjYWxsZWQiXSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0
IHRhcmdldCA9IChmdW5jdGlvbigpIHsKKyAgICBsb2coXGBjYWxsZWQgMlxgKTsKKyAgfSk7Cisg
IGxldCBwID0gbmV3IFByb3h5KHRhcmdldCwgeworICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cih0LCBwKSB7CisgICAgICBsb2coXGBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgXCR7cH1cYCk7
CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAg
IH0sCisgICAgZ2V0KHQsIHApIHsKKyAgICAgIGxvZyhcYGdldCBcJHtwfVxgKTsKKyAgICAgIHJl
dHVybiBSZWZsZWN0LmdldCguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZGVmaW5lUHJvcGVy
dHkodCwgcCwgbykgeworICAgICAgbG9nKFxgZGVmaW5lUHJvcGVydHkgXCR7cH1cYCk7CisgICAg
ICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisg
ICAgZ2V0UHJvdG90eXBlT2YodCkgeworICAgICAgbG9nKFxgZ2V0UHJvdG90eXBlT2ZcYCk7Cisg
ICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0s
CisgICAgc2V0UHJvdG90eXBlT2YodCwgdikgeworICAgICAgbG9nKFxgc2V0UHJvdG90eXBlT2Zc
YCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5zZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOwor
ICAgIH0sCisgICAgaXNFeHRlbnNpYmxlKHQpIHsKKyAgICAgIGxvZyhcYGlzRXh0ZW5zaWJsZVxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmlzRXh0ZW5zaWJsZSguLi5hcmd1bWVudHMpOworICAg
IH0sCisgICAgcHJldmVudEV4dGVuc2lvbnModCkgeworICAgICAgbG9nKFxgcHJldmVudEV4dGVu
c2lvbnNcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyguLi5hcmd1
bWVudHMpOworICAgIH0sCisgICAgaGFzKHQsIHApIHsKKyAgICAgIGxvZyhcYGhhcyBcJHtwfVxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmhhcyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAg
c2V0KHQsIHAsIHYpIHsKKyAgICAgIGxvZyhcYHNldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBS
ZWZsZWN0LnNldCguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZGVsZXRlKHQsIHApIHsKKyAg
ICAgIGxvZyhcYGRlbGV0ZSBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZSgu
Li5hcmd1bWVudHMpOworICAgIH0sCisgICAgb3duS2V5cyh0KSB7CisgICAgICBsb2coXGBvd25L
ZXlzXGApOworICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyguLi5hcmd1bWVudHMpOworICAg
IH0sCisgICAgYXBwbHkoKSB7CisgICAgICBsb2coXGBhcHBseVxgKTsKKyAgICAgIHJldHVybiBS
ZWZsZWN0LmFwcGx5KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBjb25zdHJ1Y3QoKSB7Cisg
ICAgICBsb2coXGBjb25zdHJ1Y3RcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5hcmd1bWVudExp
c3QoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHRhcmdldCwgImxlbmd0aCIsIHsKKyAgICBnZXQoKSB7IHJldHVybiB9LAorICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5l
UHJvcGVydHkodGFyZ2V0LCAibmFtZSIsIHsKKyAgICB2YWx1ZTogNTcsCisgICAgY29uZmlndXJh
YmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVybiBwOworfSko
KWApOworCitmKCk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2YWx1
ZTogMCwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmln
dXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsKKyAg
dmFsdWU6ICIiLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBj
b25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEJlKGxvZygpLCBbCisgICJnZXQgbGVuZ3Ro
IiwKKyAgImdldCBuYW1lIiwKKyAgImFwcGx5IiwKKyAgImNhbGxlZCAyIgorXSk7CitmKCk7Citz
aG91bGRCZShsb2coKSwgWyJhcHBseSIsICJjYWxsZWQgMiJdKTsKKworc2hvdWxkSGF2ZURlc2Ny
aXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBm
YWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihm
LCAibmFtZSIsIHsKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAg
Y29uZmlndXJhYmxlOiB0cnVlLAorfSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451285</attachid>
            <date>2022-02-08 11:38:21 -0800</date>
            <delta_ts>2022-02-08 11:38:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235382-20220208193819.patch</filename>
            <type>text/plain</type>
            <size>88317</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDRhNjJhYjIzNmE2NWU5MzY1NjAyZDkyYTA4NDJlNWY4YjlkNzNlLi40ZGY1YTgyYTc2NGM3Njhl
MzhiMDdhNjU0NjljZGE1OWZkNTYzY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNp
Yy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDItMDcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDb252ZXJ0IEpTU3RyaW5nJ3Mgbm9uLWF0
b21pYyBXVEY6OlN0cmluZyB0byBhdG9taWMgc3RyaW5nIHdoaWxlIGNvbmN1cnJlbnQgY29tcGls
ZXJzIC8gaGVhcCB0aHJlYWRzIHJ1bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDc4ODM3N2Y2NzEzOTlhMTNiMGI1MTUzMWUwYzI5YzI0NzQzZGI4MjEuLjI3NzdiZTk5YWQx
YjdjMDlkMmI2Yzk1MDIyN2RhYzNlMTczYmNiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAg
ICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94
eS5oCisgICAgcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKICAgICBydW50aW1lL0pTUnVuTG9v
cFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNTY3JpcHRGZXRj
aFBhcmFtZXRlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YzFkY2JkMmE2
NzRhNTEzYjA3MTE2MzAwYmM4MzEzNTAwZTZkYzJmLi5kMDQ4MDkxOGNiMDQ3ZDQ0OTgzZWRkNWU2
ZDdhMDFiZTUzZWVlZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzMyw2
ICsxMTMzLDcgQEAKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3
RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNUI0MDMyODAyNzk4RDIwNjAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDAzMjdFMjc5
OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8q
IEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICov
OyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENG
REExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLzsgfTsKIAkJ
NUI3MENGRTIxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGREMxREI2
OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDA4
NCw2ICs0MDg1LDggQEAKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FC
MTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNh
bGxpbmdDb252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdF
Mjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
UmVtb3RlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0Yy
Nzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNSZW1vdGVGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVC
NzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREExREI2OUU1QzAwRUMy
M0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUzQ0UxNjEzNkFBNTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZBQTUwMDlGMTdEMCAv
KiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3Rl
RnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9v
cFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29w
VGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAg
Ki8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0
IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3Rl
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKaW5kZXggNzAwYzdiYTk2MmQ1MDAyN2ZiYzY2NDhiOTVmNTAyNzZlMGU2Yjc3Yi4u
M2E5NWM1OGIzZDk5YjliY2U4MzJjMDE3NTgyZGY5NTg0ZDhlY2E4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTAyLDYgKzkwMiw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1Jl
bW90ZUZ1bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNT
Y29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0
Y2QzMTIwNTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFm
YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1
bmspIFwKICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25U
aHVuaykgXAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBc
CiAgICAgdihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4
ODhkLi5hMDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMp
IFwKICAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhz
ZW50aW5lbFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAg
bWFjcm8oaXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcwppbmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi5hMmI0
MTBiMzY3ZjRmYzkyODU3NmQxOGY3ZTdmMzc4YjQzZWZiYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0z
MiwzOSArMzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0s
IHRhcmdldCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0
KSkgewotICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFy
IHdyYXBwZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAg
c2luY2UgdG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBB
IHRvIHdvcmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAg
dGhlIGFyZ3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0g
ICAgICAgICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgIEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hh
ZG93UmVhbG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVm
aW5lZCwgd3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dS
ZWFsbSwgIihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwot
ICAgICAgICB9OwotICAgICAgICBkZWxldGUgd3JhcHBlZFsnbmFtZSddOwotICAgICAgICBkZWxl
dGUgd3JhcHBlZFsnbGVuZ3RoJ107Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZ1bmN0aW9u
ICh3cmFwKSB3aWxsIHJ1biB3aXRoIHRoZSBpbmN1YmF0aW5nIHJlYWxtCi0gICAgICAgIC8vIGFj
dGl2ZSwgd2Ugb25seSBuZWVkIHRvIGZpeCB0aGUgcHJvdG90eXBlIG9uIGB3cmFwcGVkYCBpZiB3
ZSBhcmUKLSAgICAgICAgLy8gbW92aW5nIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbmN1YmF0aW5n
IHJlYWxtIHRvIHRoZSBzaGFkb3cgcmVhbG0KLSAgICAgICAgaWYgKCFmcm9tU2hhZG93UmVhbG0p
Ci0gICAgICAgICAgICBAbW92ZUZ1bmN0aW9uVG9SZWFsbSh3cmFwcGVkLCBzaGFkb3dSZWFsbSk7
Ci0gICAgICAgIHJldHVybiB3cmFwcGVkOworICAgICAgICByZXR1cm4gQGNyZWF0ZVJlbW90ZUZ1
bmN0aW9uKHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxtKTsKICAg
ICB9IGVsc2UgaWYgKEBpc09iamVjdCh0YXJnZXQpKSB7CiAgICAgICAgIEB0aHJvd1R5cGVFcnJv
cigidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1p
dGl2ZSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlu
a1RpbWVDb25zdGFudC5oCmluZGV4IGU2NmU4ZmRiMTZhZjBmNjg5ZjBhYmVhNDgwYWVjYjQ1MmFj
OGI5ZjEuLmRmOTk0MmYyMTI1M2IwODI2ZDNhN2Q5MDA0ODhmNmRjYmRkMjc5ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAt
MTE3LDYgKzExNyw4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY3JlYXRlUHJpdmF0
ZVN5bWJvbCwgbnVsbHB0cikgXAogICAgIHYoZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBu
dWxscHRyKSBcCiAgICAgdihzZW50aW5lbFN0cmluZywgbnVsbHB0cikgXAorICAgIHYoY3JlYXRl
UmVtb3RlRnVuY3Rpb24sIG51bGxwdHIpIFwKKyAgICB2KGlzUmVtb3RlRnVuY3Rpb24sIG51bGxw
dHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUp
IG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IGI5ZjgxODQ2MGU1NGVjOTIyZjM5NGI2Y2ZlZDIyN2M1YjRhNmMwMWQuLmZjM2E2
YzRmZGFlM2RkODk2NzhjNmJiOWE2NTY5MGI0OGY3ZmFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMTI1Nyw2ICsxMTI1Nyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGdW5jdGlvblRvU3RyaW5nKE5vZGUqIG5v
ZGUpCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwg
IldlIGRvbid0IGhhbmRsZSBzdWJjbGFzc2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxv
dyIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
RXF1YWwsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cihKU0JvdW5kRnVuY3Rpb246OmluZm8o
KSkpKTsKIAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rp
b24+LCAiV2UgZG9uJ3QgaGFuZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZv
IGJlbG93Iik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKEpTUmVtb3RlRnVuY3Rpb246
OmluZm8oKSkpKTsKKwogICAgIGdldEV4ZWN1dGFibGUobV9qaXQsIGZ1bmN0aW9uLmdwcigpLCBl
eGVjdXRhYmxlLmdwcigpKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05hdGl2ZUV4ZWN1dGFi
bGUgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoZXhlY3V0YWJsZS5ncHIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihOYXRpdmVFeGVjdXRhYmxlVHlwZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggN2FjZmNiY2RhN2I1ZDE4MjMzYTU3MjAz
OTUzNTU5ZTU1NjEzN2ZkMi4uOWU1OTliZmZlYzhiOTAwZmQ3MjM4ZWRjNjM5Y2ViNTY0OTQzYTlj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtODYxMyw2ICs4NjEzLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJvdW5kRnVuY3Rpb25D
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Qm91bmRPclJl
bW90ZUZ1bmN0aW9uQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGZ1bmN0aW9uRXhlY3V0YWJsZUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFz
aWNCbG9jayBuYXRpdmVFeGVjdXRhYmxlQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
IExCYXNpY0Jsb2NrIHRlc3RQdHIgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODYyOCw3ICs4NjI5
LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwgIldlIGRvbid0IGhhbmRsZSBzdWJjbGFz
c2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxvdyIpOwogICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihKU0JvdW5kRnVuY3Rp
b246OmluZm8oKSkpLCB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUobm90Qm91bmRGdW5jdGlvbkNh
c2UpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5v
dEJvdW5kRnVuY3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rpb24+LCAiV2UgZG9uJ3QgaGFu
ZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZvIGJlbG93Iik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdEJvdW5kRnVuY3Rpb25DYXNlLCBub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGNsYXNzSW5mbywg
bV9vdXQuY29uc3RJbnRQdHIoSlNSZW1vdGVGdW5jdGlvbjo6aW5mbygpKSksIHVuc3VyZShzbG93
Q2FzZSksIHVuc3VyZShub3RCb3VuZE9yUmVtb3RlRnVuY3Rpb25DYXNlKSk7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBleGVjdXRh
YmxlID0gZ2V0RXhlY3V0YWJsZShmdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc1R5
cGUoZXhlY3V0YWJsZSwgTmF0aXZlRXhlY3V0YWJsZVR5cGUpLCB1bnN1cmUobmF0aXZlRXhlY3V0
YWJsZUNhc2UpLCB1bnN1cmUoZnVuY3Rpb25FeGVjdXRhYmxlQ2FzZSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDgwNmIxN2RlZmI1ZjI2ZWRiMzEzYTg2NDAxOTIyYTY5
MTdkMDA3MDcuLjAxZTFjOTMyYmYzMzcxMjAzNTViOGEwZjAwNmRmY2E3NDdiMTEyNWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJKSVRXb3JrbGlzdElubGluZXMuaCIKICNp
bmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5oIgpAQCAtMzIxOSw2ICsz
MjIwLDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZU5h
bWVzcGFjZU9iamVjdFNwYWNlLCBtb2R1bGVOYW1lc3AKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlLCBuYXRpdmVTdGRGdW5jdGlv
bkhlYXBDZWxsVHlwZSwgSlNOYXRpdmVTdGRGdW5jdGlvbikgLy8gSGFzaDoweDcwZWQ2MWU0CiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgUHJveHlPYmplY3QpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlS
ZXZva2UpIC8vIEhhc2g6MHhiNTA2YTkzOQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTUmVtb3Rl
RnVuY3Rpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NvcGVk
QXJndW1lbnRzVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU2NvcGVk
QXJndW1lbnRzVGFibGUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
c2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgSlNTY3JpcHRGZXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFhM2Jj
MWMzYjE5NTM5NmY1YjhkYWQzNDY2ZWMxZGI0OTRiZWE1N2MuLmFkY2ZhYmIzYmQyZjI2NzUwMjM5
NjQ1Nzk3N2JiN2QxN2FmZWEzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTky
Niw2ICs5MjYsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVk
U2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAppbmRleCAzODhjZjA0NWNkOWM4NzkzMjNjOTM2ODE2MmIwM2VmMTVj
YjdmN2U2Li43OGU3NzM0ZTI2MzliN2U5ODhiZDk0NTliMDc2YmY3YmNlNGMwNzFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcApAQCAtMzQ3LDYgKzM0NywxNSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CisgICAgaWYgKEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9u
Kj4odm0sIHZhbHVlKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIs
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBjb25zdHJ1
Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgInRhcmdldEZ1bmN0aW9uIl9zLCByZW1v
dGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworCisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CiAK
ICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNEeW5hbWljQ2FzdDxQcm94eU9iamVjdCo+
KHZtLCB2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDkxZWE0
NTI3ZmRmNjZiMmIxYmMzMWQ2OWY1NTVlN2U1ZmYzZTY3Ny4uYzBmN2U2YmUwYTY4MzA3ZDVhMDQw
NTc0NzU5Njg3ODA5YmFlMGQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKQEAgLTU1NSwxMiArNTU2LDEzIEBAIENhdGNo
SW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBX
YXNtOjpDYWxsZWUqIGNhbGxlCiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAg
IFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJt
aW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRj
aEluZm8mIGhhbmRsZXIpCisgICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBKU1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxv
Y2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFuZGxlciwgYm9vbCYgc2VlblJlbW90ZUZ1Y25j
dGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFt
ZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCisgICAg
ICAgICwgbV9zZWVuUmVtb3RlRnVuY3Rpb24oc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICB7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewpA
QCAtNjA5LDYgKzYxMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IGlmICghbV9jYWxsRnJhbWUtPmlzV2FzbUZyYW1lKCkgJiYgIEpTQzo6aXNSZW1vdGVGdW5jdGlv
bihtX3ZtLCBtX2NhbGxGcmFtZS0+anNDYWxsZWUoKSkgJiYgIW1faXNUZXJtaW5hdGlvbikgewor
ICAgICAgICAgICAgLy8gQ29udGludWUgc2VhcmNoaW5nIGZvciBhIGhhbmRsZXIsIGJ1dCBtYXJr
IHRoYXQgYSBtYXJzaGFsbGluZyBmdW5jdGlvbiB3YXMgb24gdGhlIHN0YWNrIHNvIHRoYXQgd2Ug
Y2FuCisgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIGV4Y2VwdGlvbiBiZWZvcmUganVtcGlu
ZyB0byB0aGUgaGFuZGxlci4KKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VW53aW5kRnVuY3Rvcio+
KHRoaXMpLT5tX3NlZW5SZW1vdGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwpAQCAtNjU3LDggKzY2
NiwzOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0
ciB9OwogICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7IGZhbHNlIH07CiAjZW5kaWYKKwor
ICAgIGJvb2wmIG1fc2VlblJlbW90ZUZ1bmN0aW9uOwogfTsKIAorLy8gUmVwbGFjZSBhbiBleGNl
cHRpb24gd2hpY2ggcGFzc2VzIGFjcm9zcyBhIG1hcnNoYWxsaW5nIGJvdW5kYXJ5IHdpdGggYSBU
eXBlRXJyb3IgZm9yIGl0cyBoYW5kbGVyJ3MgZ2xvYmFsIG9iamVjdC4KK3N0YXRpYyB2b2lkIHNh
bml0aXplUmVtb3RlRnVuY3Rpb25FeGNlcHRpb24oVk0mIHZtLCBDYWxsRnJhbWUqIGhhbmRsZXJD
YWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIERlZmVyVGVybWluYXRpb24g
ZGVmZXJTY29wZSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNUZXJtaW5hdGlvbkV4
Y2VwdGlvbihleGNlcHRpb24pKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBoYW5kbGVyQ2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKKyAgICAvLyBBdm9pZCB1c2VyLW9ic2VydmFibGUgVG9TdHJpbmcoKQor
ICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmc7CisgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RG
U3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgZWxzZSBpZiAoZXhjZXB0aW9uVmFsdWUuYXNDZWxs
KCktPmluaGVyaXRzPEVycm9ySW5zdGFuY2U+KHZtKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5n
ID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKS0+
c2FuaXRpemVkTWVzc2FnZVN0cmluZyhnbG9iYWxPYmplY3QpOworCisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7IC8vIFdlIG11c3Qgbm90IGhhdmUgZW50ZXJlZCBKUyBhdCB0aGlzIHBv
aW50CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7Cit9CisKIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChW
TSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwpAQCAtNjc4LDggKzcxOCwx
NSBAQCBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdAogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAg
ICBDYXRjaEluZm8gY2F0Y2hJbmZvOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2Fs
bEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZh
bHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CisgICAgYm9vbCBzZWVuUmVtb3RlRnVuY3Rpb24g
PSBmYWxzZTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0uaXNU
ZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2Nr
LCBjYXRjaEluZm8sIHNlZW5SZW1vdGVGdW5jdGlvbik7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNp
dDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFt
ZSwgdm0sIGZ1bmN0b3IpOworCisgICAgaWYgKHNlZW5SZW1vdGVGdW5jdGlvbikgeworICAgICAg
ICBzYW5pdGl6ZVJlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlv
bik7CisgICAgICAgIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOyAvLyBjbGVhciBtX25l
ZWRFeGNlcHRpb25DaGVjaworICAgIH0KKwogICAgIGlmICh2bS5oYXNDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3RhdGVVbnRpbChj
YWxsRnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBmNzA4Y2I3ZTFmYmI4MjYwY2U3NTc1ZDVkNjgxZWQ3NWEyM2UwZDNkLi5mNjgzYjBj
MWY4YWY4YzA2ZDFjZGM3Yzc5YTI4ZDE1NTFkMDNjMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAg
aW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQ
UlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEz
NTUsNiArMTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcp
IHsgfQogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlv
bihWTSYpIHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlv
bihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5k
ZXggOTA4ZmYwNDdhMWIxZWEzMmZhNjI3ZWM5MmJlNThlMGRjMjU1MTVkNC4uMjUwYjc3OWQ2MTQw
ZjM5NWQ3YzYwMmI0YTY0ZDBmYjBlYTQ1M2IzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2lu
Y2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50
LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
RnJvbVRodW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAg
IGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSkpKTsKKworICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11
c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxlZSkpOwor
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IGNhbGxlZS0+dGFyZ2V0RnVuY3Rpb24oKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5jb2RlZEpTVmFsdWUs
IChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkp
Cit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQo
aXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFs
dWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxl
ZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisKKyAgICAvLyBXZSBzaG91
bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICBpZiAoVU5MSUtFTFkodm0uaXNUZXJtaW5hdGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4
Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAgU3Ry
aW5nIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdCk7CisgICAgRXhjZXB0aW9uKiB0b1N0cmluZ0V4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgIGlmIChVTkxJS0VMWSh0b1N0cmluZ0V4Y2VwdGlvbiAmJiB2bS5pc1Rlcm1pbmF0
aW9uRXhjZXB0aW9uKHRvU3RyaW5nRXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsK
KworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworfQor
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2ODM0
YmYzLi5kNWU5ZjVjNzA1YTU4OTM5MDcxMWJhZjczNzBiMDA0YjI2MWZkYjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFz
cyBKU0Z1bmN0aW9uOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU0xleGljYWxFbnZp
cm9ubWVudDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNSZW1vdGVGdW5jdGlvbjsKIGNsYXNz
IEpTU2NvcGU7CiBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIEpTVmFsdWU7CkBAIC0xNTUsNiArMTU2
LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVjdCop
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9y
Q2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1
ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1Zh
bHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVu
Y3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA0MTliNjk4ZWY4
M2M5NmZjYmQ2MGFiOTVmZDgxYzhjNjMxZGMzMWI5Li5mM2IyMjVkMDAxYjM4OWUzZTQwMjBmMTY5
YjdkODdkODA3YzhmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMSw2ICsxNDIyLDE5MiBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVu
ayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9y
ZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5zaWdu
ZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxpZ25t
ZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKQor
ICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3RhY2tN
aXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBhcmd1
bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0YWls
CisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qgc28g
bG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2FsbCwg
c2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11bGEg
Zm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVyIG9m
IHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAgLy8g
ICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1lSGVh
ZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKQor
ICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAgIC8v
CisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgKENh
bGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJlZ2lz
dGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApOwor
CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBH
UFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0
LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQpLCBH
UFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUgYWN0
dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sgd2Ug
d2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFjayBz
cGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFk
ZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBUaHJv
dyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVu
ayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBqaXQu
bW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRzIGNv
bmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dy
ZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUkluZm86
OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0aGUg
YXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUgZm9y
IGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGluIHRo
ZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNS
ZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2Vw
dGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAvLyBG
b3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAgICAv
LyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5ldyBj
YWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3JhcHBp
bmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVtb3Rl
RnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUncyBh
cmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgorICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFN1YjMyKENDYWxsSGVscGVyczo6
WmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
ICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdUMSwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmltaXRp
dmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZhbHVl
SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQuYWRk
cmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAgICAg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6cmVn
VDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAgaml0
LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgw
KS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOwor
ICAgICAgICBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpLmxpbmtUbyhsb29wLCAmaml0KTsK
KworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZz
ZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3JlQ2Vs
bChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihD
b2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNlZCBv
biB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJNNjQs
IGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgQVNTRVJUX0VOQUJMRUQg
JiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hlY2tO
b3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7
CisgICAgICAgIGNoZWNrTm90TnVsbC5saW5rKCZqaXQpOworICAgIH0KKyNlbmRpZgorCisgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcp
OworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKworICAgIC8v
IFdyYXAgcmV0dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1By
aW1pdGl2ZTsKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2Vs
bChyZXN1bHRSZWdzKSk7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdE9iamVjdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQ
UkluZm86OnJlZ1QyLCByZXN1bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkp
OworCisgICAgcmVzdWx0SXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBleGNlcHRpb25DaGVja3MubGlu
aygmaml0KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJnZtKSk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlJlbW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGluayhu
b0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3Rp
TmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKAorICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVk
IHRodW5rIGZvciByZW1vdGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5NDVk
ZjFkNWVlMS4uNTg5ZTcwMDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4Miw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBkZjE4MGZiYWQxYzc5MWVjNzNjZjZiOWNhM2Y0YjQ0MjhjNDZiYTg0Li5mNGI5ODk3
YzdkMzFkMDgyZmM1NDY3ZGZhOGRjZWI1YzE1NTEzNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAtMzY2
LDYgKzM2Nyw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyRXZhbFNjcmlwdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhckdDKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyQ2xlYXJLZXB0T2JqZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRS
ZXBvcnQpOwpAQCAtNjQ5LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCBkb2xsYXIsICJnYyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ZG9sbGFyLCAiY2xlYXJLZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2JqZWN0
cywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5jdGlv
bkRvbGxhckdsb2JhbE9iamVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpOb25lKSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJpc1Jl
bW90ZUZ1bmN0aW9uIiwgZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAgICAg
ICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xv
YmFsIiksIGdsb2JhbFRoaXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9tQWNj
ZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAgLTIw
ODQsNiArMjA4NywxOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJH
bG9iYWxPYmplY3RGb3IsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
RXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAgICBK
U1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oaXNSZW1vdGVGdW5jdGlvbih2bSwgYXJnKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0LCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNjc0MjA2NTIzZDFjNGJjZGVlOGM1MDBhMDcxMzE2
MTVjMjQxZTU4YS4uNzM4ZTdmNGUxMjdlMTdkZWYyZjQ1OWM5OGJhMGE3NzI1MDU2NTk4YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAg
LTE2Myw4ICsxNjMsOSBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVzc2FnZVN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICBtZXNzYWdlVmFsdWUg
PSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbWVzc2Fn
ZVZhbHVlKQorICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICFtZXNzYWdlVmFsdWUuaXNQcmltaXRp
dmUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgbWVzc2FnZVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogfQogCkBAIC0xOTQs
NyArMTk1LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVTdHJpbmcoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbmFtZVZhbHVlKQorICAgIGlmICghbmFtZVZhbHVl
IHx8ICFuYW1lVmFsdWUuaXNQcmltaXRpdmUoKSkKICAgICAgICAgcmV0dXJuICJFcnJvciJfczsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCBiMzFjZmMxYzkwNWU5Njg0YTlhNzgxZTQ3ZGYxNmEw
ZmFhYzgzYzM2Li4xZDUyYWJmNTg1YzJiYWJlZDZjODRiNTk5NzRiYmE5NjczZGEwZmE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogCiAgICAgICAgIEpTQ2VsbCogY2FsbGVl
ID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAKLSAgICAgICAgaWYgKGNhbGxlZSAmJiAo
Y2FsbGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVl
LT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSkKKyAgICAgICAgaWYgKGNhbGxlZSAmJiAoY2Fs
bGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVlLT5p
bmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpIHx8IGNhbGxlZS0+dHlwZSgp
ID09IFByb3h5T2JqZWN0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKIAogICAgICAgICBpZiAoIW1faGFzRm91bmRGcmFtZSAmJiBjYWxsZWUgIT0gbV90
YXJnZXRDYWxsZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uY3BwCmluZGV4IDc2NzMxNThjNjRmMjU2ZTFiNDI5YTRjZmNmNThmOTFlYWZi
ZGQwNGIuLmQ1YmM0OTQwOTU3ZTU1MmJmNjRhNTBhNTkwMmMxMTBjMTUyNmRiOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkBA
IC0xODksNiArMTg5LDEwIEBAIEpTR2xvYmFsT2JqZWN0KiBnZXRGdW5jdGlvblJlYWxtKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgICAgICBv
YmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4ob2JqZWN0KS0+dGFyZ2V0RnVuY3Rpb24o
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgeworICAgICAgICAgICAgb2JqZWN0ID0g
anNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihvYmplY3QpLT50YXJnZXRGdW5jdGlvbigpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBpZiAob2JqZWN0LT50eXBl
KCkgPT0gUHJveHlPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2Fz
dDxQcm94eU9iamVjdCo+KG9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmNwcAppbmRleCBmZjVmMTkyNDY5MGY2MmY0OGM1MTM2NWI1MmU2YzU2M2I0ZTYy
ODlkLi5iODE3NTliY2E3ZWE4ZDU0MmJjOTJkMTFmZjI4N2I1MGQ4MmYzNzZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKQEAgLTIwNSw2ICsyMDUsOCBA
QCBjb25zdCBjaGFyKiBpbnRyaW5zaWNOYW1lKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAg
IHJldHVybiAiSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYyI7CiAgICAgY2FzZSBCb3VuZEZ1bmN0
aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJCb3VuZEZ1bmN0aW9uQ2FsbEludHJp
bnNpYyI7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiAiUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljIjsKICAgICBjYXNlIEpTTWFwR2V0SW50
cmluc2ljOgogICAgICAgICByZXR1cm4gIkpTTWFwR2V0SW50cmluc2ljIjsKICAgICBjYXNlIEpT
TWFwSGFzSW50cmluc2ljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMu
aAppbmRleCA4ZTY4ZTdlNzRmYjc4Y2RiZDMzMjRjZmJmMGEyNWVkNmQyMGQ2ZDU4Li40YWUzNjUx
YjU3NWUyMzE1OGJmNjg5NjBiNmRjY2MwOWE1N2JhZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaApAQCAtMTE4LDYgKzExOCw3IEBAIGVudW0gSW50cmluc2lj
IDogdWludDhfdCB7CiAgICAgVHlwZWRBcnJheUVudHJpZXNJbnRyaW5zaWMsCiAgICAgSXNUeXBl
ZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAg
ICBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCiAgICAgSlNNYXBHZXRJbnRyaW5zaWMsCiAg
ICAgSlNNYXBIYXNJbnRyaW5zaWMsCiAgICAgSlNNYXBTZXRJbnRyaW5zaWMsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCmluZGV4IDY4YzBlNWJjMmVhMDRiMzAyZGM0M2QyNDhh
YjUxODhmNGIzZTMwZmYuLmE2OTkzMTU5MDk5Y2NjMWI3Mzk2YTk3YzU4ZmQ0ZWUzMWE1YzE4MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC05OSw2ICs5OSw3IEBA
IHN0cnVjdCBKU1R5cGVSYW5nZSB7CiAgICAgbWFjcm8oSlNTeW1ib2xUYWJsZU9iamVjdCwgSlNU
eXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5cGU6Ok1vZHVsZUVudmlyb25tZW50VHlwZSkgXAog
ICAgIG1hY3JvKEpTU2NvcGUsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpXaXRo
U2NvcGVUeXBlKSBcCiAgICAgbWFjcm8oU3RyaW5nT2JqZWN0LCBKU1R5cGU6OlN0cmluZ09iamVj
dFR5cGUsIEpTVHlwZTo6RGVyaXZlZFN0cmluZ09iamVjdFR5cGUpIFwKKyAgICBtYWNybyhTaGFk
b3dSZWFsbU9iamVjdCwgSlNUeXBlOjpTaGFkb3dSZWFsbVR5cGUsIEpTVHlwZTo6U2hhZG93UmVh
bG1UeXBlKSBcCiAKIAogLy8gRm9yd2FyZCBkZWNsYXJlIHRoZSBjbGFzc2VzIGJlY2F1c2UgdGhl
eSBtYXkgbm90IGFscmVhZHkgZXhpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCmluZGV4IDhhNjBhOWY5ZThmNjY5NDJiNWI4NWM1ZGE1YWI1MTY2YTU4
ODM0ZDAuLmQ5MzdiMzZiMzA0NTc0NDBjZWE4YmVhNTE4ZDE5ODE5YTY0YTlkNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTVG9XYXNtSUNDYWxsZWUuaCIKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMTIzLDggKzEyNCw4
IEBAIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zCiAgICAgQVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+
Z2V0Q29uc3RydWN0RGF0YSA9PSAmSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk7CiAgICAg
QVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENh
bGxEYXRhKTsKIAotICAgIC8vIEpTQm91bmRGdW5jdGlvbiBpbnN0YW5jZXMgdXNlIGZpbmlzaENy
ZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVpciBuYW1lIHN0cmlu
ZyAvIGxlbmd0aC4KLSAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4o
dm0pKTsKKyAgICAvLyBKU0JvdW5kRnVuY3Rpb24vSlNSZW1vdGVGdW5jdGlvbiBpbnN0YW5jZXMg
dXNlIGZpbmlzaENyZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVp
ciBuYW1lIHN0cmluZyAvIGxlbmd0aC4KKyAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91
bmRGdW5jdGlvbj4odm0pICYmICF0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkp
OwogCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KGxlbmd0aCksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQpAQCAtMjUyLDYgKzI1MywxMiBA
QCBKU1N0cmluZyogSlNGdW5jdGlvbjo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICAgICAgSlNWYWx1ZSBzdHJpbmcgPSBqc01ha2VOb250cml2aWFsU3RyaW5nKGds
b2JhbE9iamVjdCwgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lU3RyaW5nKCksICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHN0cmluZyk7CisgICAgfSBlbHNl
IGlmIChpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgSlNSZW1vdGVG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHRoaXMpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEpTVmFs
dWUgc3RyaW5nID0ganNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJmdW5jdGlv
biAiLCBmdW5jdGlvbi0+bmFtZVN0cmluZygpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0i
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
IHJldHVybiBhc1N0cmluZyhzdHJpbmcpOwogICAgIH0KIAogICAgIGlmIChpc0hvc3RGdW5jdGlv
bigpKQpAQCAtNTcxLDYgKzU3OCw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlMZW5ndGgoVk0m
IHZtKQogICAgIGRvdWJsZSBsZW5ndGggPSAwOwogICAgIGlmICh0aGlzLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KHZtKSkKICAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTQm91bmRGdW5jdGlv
bio+KHRoaXMpLT5sZW5ndGgodm0pOworICAgIGVsc2UgaWYgKHRoaXMtPmluaGVyaXRzPEpTUmVt
b3RlRnVuY3Rpb24+KHZtKSkKKyAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rp
b24qPih0aGlzKS0+bGVuZ3RoKHZtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKCFpc0hv
c3RGdW5jdGlvbigpKTsKICAgICAgICAgbGVuZ3RoID0ganNFeGVjdXRhYmxlKCktPnBhcmFtZXRl
ckNvdW50KCk7CkBAIC02MjQsNyArNjMzLDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcgbmFtZSkKIAogSlNG
dW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5l
ZWRlZChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgJiYgIXRo
aXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpc0hvc3RPckJ1aWx0
aW5GdW5jdGlvbigpICYmICF0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAh
dGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKQogICAgICAgICByZXR1cm4gUHJv
cGVydHlTdGF0dXM6OkVhZ2VyOwogICAgIFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlm
eUxhenlMZW5ndGhJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmIChpc0xhenkobGF6eUxlbmd0aCkpCkBAIC02MzgsNyArNjQ3LDcgQEAgSlNGdW5jdGlvbjo6
UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZChWTSYg
dm0sIEpTR2xvYmEKIEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5
TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NF
UlQoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSk7Ci0gICAgaWYgKGlzQnVpbHRpbkZ1bmN0aW9u
KCkgfHwgdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9uPih2bSkpIHsKKyAgICBpZiAoaXNC
dWlsdGluRnVuY3Rpb24oKSB8fCB0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSB8
fCB0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAgUHJvcGVy
dHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5TGF6eUxlbmd0aElmTmVlZGVkKHZtLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChpc0xhenkobGF6eUxlbmd0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gbGF6eUxlbmd0aDsKQEAgLTY5NSw2ICs3MDQsMTQgQEAgSlNGdW5j
dGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5Qm91bmROYW1lSWZOZWVk
ZWQoVk0mIHZtLCBKU0dsb2IKICAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMgPSBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHk7
CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwogICAgICAgICBwdXREaXJl
Y3Qodm0sIG5hbWVJZGVudCwgc3RyaW5nLCBpbml0aWFsQXR0cmlidXRlcyk7CisgICAgfSBlbHNl
IGlmICh0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgRnVu
Y3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5lbnN1cmVSYXJlRGF0YSh2bSk7CisgICAg
ICAgIEpTU3RyaW5nKiBuYW1lID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPih0aGlzKS0+bmFt
ZU1heUJlTnVsbCgpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICBuYW1lID0ganNF
bXB0eVN0cmluZyh2bSk7CisgICAgICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1dGVzID0gUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5Owor
ICAgICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsKKyAgICAgICAgcHV0RGlyZWN0
KHZtLCBuYW1lSWRlbnQsIG5hbWUsIGluaXRpYWxBdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgcmV0
dXJuIFByb3BlcnR5U3RhdHVzOjpSZWlmaWVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDg0NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJh
OWZjZmQ4ZmMuLmMzMThkNWUxMTgzNzNlMGE4YzU4ZWUwMzU5ZWU5YzI3ZTBlMjQ3YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAg
ICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1Jl
bW90ZUZ1bmN0aW9uKFZNJikgY29uc3Q7CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2Iw
YWQ5NzIxMmU4OGY5ODdhNWRiMDguLmE4ODZjZDc1ZWZhODYyNmVhMTc0YzdiODQ4ODhkNzEzMzNl
MDYxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0
YWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc4LDYgKzc5LDExIEBAIGlubGluZSBib29s
IEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1
cm4gIWlzSG9zdEZ1bmN0aW9uKCkgJiYganNFeGVjdXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCk7CiB9CiAKK2lubGluZSBib29sIEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rp
b24oVk0mIHZtKSBjb25zdAoreworICAgIHJldHVybiBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9u
Pih2bSk7Cit9CisKIGlubGluZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9uOjpuYXRp
dmVGdW5jdGlvbigpCiB7CiAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpA
QCAtOTgsNiArMTA0LDExIEBAIGlubGluZSBib29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFs
dWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKQogICAgIHJldHVybiBmdW5j
dGlvbi0+bmF0aXZlRnVuY3Rpb24oKSA9PSBuYXRpdmVGdW5jdGlvbjsKIH0KIAoraW5saW5lIGJv
b2wgaXNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlLmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKTsKK30KKwogaW5saW5lIGJvb2wg
SlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9u
UmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKQEAgLTExNCw2ICsxMjUsOCBA
QCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTmFtZSgpIGNvbnN0CiAKIGlubGlu
ZSBib29sIEpTRnVuY3Rpb246OmNhbkFzc3VtZU5hbWVBbmRMZW5ndGhBcmVPcmlnaW5hbChWTSYp
CiB7CisgICAgLy8gSlNSZW1vdGVGdW5jdGlvbiBuZXZlciBoYXMgYSAnbmFtZScgZmllbGQsIHJl
dHVybiB0cnVlCisgICAgLy8gdG8gYXZvaWQgYWxsb2NhdGluZyBhIEZ1bmN0aW9uUmFyZURhdGEu
CiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBG
dW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CkBAIC0xNTksNyAr
MTcyLDcgQEAgaW5saW5lIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmVuc3VyZVJhcmVE
YXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoSlNHbG9iYWwKIAogaW5saW5lIEpTU3RyaW5nKiBKU0Z1
bmN0aW9uOjphc1N0cmluZ0NvbmN1cnJlbnRseShWTSYgdm0pIGNvbnN0CiB7Ci0gICAgaWYgKGlu
aGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpbmhlcml0czxKU0JvdW5kRnVu
Y3Rpb24+KHZtKSB8fCBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChpc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUoKSktPmFzU3RyaW5nQ29u
Y3VycmVudGx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKaW5kZXggMjhhMjFkYTY2ZTBkZjI4NjZlOThhNjkzNmJlN2Q3MTExOGQxZDFj
ZS4uYTkwNzY3OTg4ZWJjNmM3NzljZmYzOGNmNzYzMzRkZTNjOGNiZTcwZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQwLDYg
KzE0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgpAQCAtNzcwLDYgKzc3MSwx
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgW10gKGNvbnN0
IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpT
TmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBp
bml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgICAgIH0pOworICAg
IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQu
b3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CiAgICAgSlNG
dW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uID0gbnVsbHB0cjsKQEAgLTE1MzEsNiArMTUzNiwxNCBAQCBjYXBpdGFsTmFtZSAjIyBDb25z
dHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFs
TmFtZQogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgY3JlYXRlUHJp
dmF0ZVN5bWJvbCkpOwogICAgICAgICB9KTsKIAorICAgIC8vIFNoYWRvd1JlYWxtcworICAgIG1f
bGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6
OmNyZWF0ZVJlbW90ZUZ1bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygp
LCBjcmVhdGVSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKyAgICBtX2xpbmtUaW1lQ29u
c3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojppc1JlbW90ZUZ1
bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7
CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0
PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBpc1JlbW90ZUZ1bmN0
aW9uKSk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIC8vIFdl
YkFzc2VtYmx5IFN0cmVhbWluZyBBUEkKICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojp3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1p
bmdJbnRlcm5hbCldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5p
dCkgewpAQCAtMjI1OSw2ICsyMjcyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3Qt
Pm1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7Cisg
ICAgdGhpc09iamVjdC0+bV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZW5lcmF0b3JGdW5jdGlvblN0cnVj
dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCAxYjFkOWI1NTNjNzQ3MmJlYmI2NzQ4OWQ5MmM3N2EzZDkzNjk2ZDJhLi4zYWRmYTM4
ZThhMzI0OWE0NThiY2IxNzQ1YjE4MjY1M2RmNWM4Yjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyMSw2ICs0MjEsNyBAQCBwdWJs
aWM6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKQEAgLTQzNyw2
ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbmF0aXZl
U3RkRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPEFz
eW5jRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5bmNGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0
ZUJhcnJpZXI8QXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwpAQCAtODcyLDYgKzg3NCw3
IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3Jk
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJmYzhhYWIzMTRmYTQ4Y2U3NzRhMDdmNjAwNjllZDgyZDA3YzJhZmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24u
aCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Jl
bW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKwor
SlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24o
dm0sIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQorICAgICwgbV9sZW5ndGgoMC4wKQoreworfQorCitz
dGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0p
KSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFy
Z3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJn
ZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0
aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgd3JhcFJldHVyblZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShn
bG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1z
IG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVu
Y3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVG
dW5jdGlvbih2bSkpOworICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihyZW1vdGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFw
cGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkp
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5o
YXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRv
IGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQorCisgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0g
Y2FsbCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5W
YWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpT
UmVtb3RlRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1v
dGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSkpOworICAgIEpTT2JqZWN0KiB0YXJnZXRG
dW5jdGlvbiA9IHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpOworICAgIEpTR2xvYmFs
T2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0
KCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgYXJn
cy5hcHBlbmQod3JhcHBlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFz
T3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNhbGxE
YXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2Fs
bCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5WYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBBU1NFUlQoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPT0gMSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oSlNDOjppc1JlbW90ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID09IDIpOworICAgIEpTVmFsdWUgdGFyZ2V0RnVuY3Rpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIEFTU0VSVCh0YXJnZXRGdW5jdGlvbi5pc0NhbGxhYmxlKHZtKSk7
CisKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJn
ZXRGdW5jdGlvbi5hc0NlbGwoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGRlc3RpbmF0aW9uR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmIChhdXRvIHNoYWRv
d1JlYWxtID0ganNEeW5hbWljQ2FzdDxTaGFkb3dSZWFsbU9iamVjdCo+KHZtLCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2Jq
ZWN0ID0gc2hhZG93UmVhbG0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRhcmdldENhbGxhYmxlKSkpOworfQorCitpbmxp
bmUgU3RydWN0dXJlKiBnZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZ2xvYmFsT2JqZWN0LWF3
YXJlIHN0cnVjdHVyZSBjYWNoaW5nCisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+cmVtb3RlRnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKK30KKworSlNSZW1vdGVGdW5jdGlvbiogSlNSZW1vdGVGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IHRhcmdldENhbGxhYmxlKQoreworICAgIEFTU0VSVCh0YXJnZXRDYWxsYWJsZSAmJiB0YXJnZXRD
YWxsYWJsZS0+aXNDYWxsYWJsZSh2bSkpOworICAgIGlmIChhdXRvIHJlbW90ZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHZtLCB0YXJnZXRDYWxsYWJsZSkpIHsKKyAgICAgICAg
dGFyZ2V0Q2FsbGFibGUgPSByZW1vdGUtPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VS
VCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHZtLCB0YXJnZXRDYWxsYWJsZSkpOworICAgIH0KKwor
ICAgIGJvb2wgaXNKU0Z1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSk7Cisg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJlbW90ZUZ1bmN0aW9uKGlz
SlNGdW5jdGlvbik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZW1vdGVGdW5jdGlv
blN0cnVjdHVyZShnbG9iYWxPYmplY3QpOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSBKU1Jl
bW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFy
Z2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNSZW1vdGVGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgLy8gMy4xLjI6IENvcHlOYW1lQW5kTGVuZ3Ro
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKworICAgIFByb3Bl
cnR5U2xvdCBzbG90KG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOworICAgIGJvb2wgdGFyZ2V0SGFzTGVuZ3RoID0gbV90YXJnZXRG
dW5jdGlvbi0+Z2V0T3duUHJvcGVydHlTbG90SW5saW5lKGdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworCisgICAgaWYgKHRhcmdldEhhc0xlbmd0aCkgeworICAgICAgICBKU1ZhbHVlIHRh
cmdldExlbmd0aCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICBkb3VibGUgdGFyZ2V0TGVuZ3RoQXNJbnQgPSB0YXJnZXRMZW5ndGgudG9JbnRlZ2Vy
T3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICBtX2xlbmd0aCA9IHN0ZDo6bWF4KHRhcmdldExlbmd0aEFz
SW50LCAwLjApOworICAgIH0KKworICAgIEpTVmFsdWUgdGFyZ2V0TmFtZSA9IEpTVmFsdWUobV90
YXJnZXRGdW5jdGlvbi5nZXQoKSkuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICBpZiAo
dGFyZ2V0TmFtZS5pc1N0cmluZygpKQorICAgICAgICBtX25hbWVNYXlCZU51bGwuc2V0KHZtLCB0
aGlzLCBhc1N0cmluZyh0YXJnZXROYW1lKSk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Jl
bW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0RnVuY3Rpb24pOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OThmOGFmZTJiNjFjNTJjMzdkNWYwZjczMTFkMzZiMDMyNDNiNzVmOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBB
dXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxs
Rm9ySlNGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9u
Q2FsbEdlbmVyaWMpOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9u
KTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24pOworCisv
LyBKU1JlbW90ZUZ1bmN0aW9uIGNyZWF0ZXMgYSBicmlkZ2UgYmV0d2VlbiBpdHMgbmF0aXZlIFJl
YWxtIGFuZCBhIHJlbW90ZSBvbmUuCisvLyBXaGVuIGludm9rZWQsIGFyZ3VtZW50cyBhcmUgd3Jh
cHBlZCB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSByZWFsbSBib3Vu
ZGFyeS4KKy8vIFRoZSByZXR1cm4gdmFsdWUgYW5kIGFueSBhYnJ1cHQgY29tcGxldGlvbnMgYXJl
IGFsc28gZmlsdGVyZWQuCitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uIGZpbmFsIDogcHVibGljIEpT
RnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Z1bmN0aW9uOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNSZW1vdGVGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgSlNP
YmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5jdGlvbi5nZXQoKTsg
fQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7IHJldHVybiB0YXJn
ZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQorICAgIEpTU3RyaW5nKiBuYW1lTWF5QmVO
dWxsKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lTWF5QmVOdWxsLmdldCgpOyB9CisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghbV9uYW1lTWF5QmVOdWxs
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIEFTU0VSVCghbV9u
YW1lTWF5QmVOdWxsLT5pc1JvcGUoKSk7CisgICAgICAgIGJvb2wgYWxsb2NhdGlvbkFsbG93ZWQg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZU1heUJlTnVsbC0+dHJ5R2V0VmFsdWUoYWxs
b2NhdGlvbkFsbG93ZWQpOworICAgIH0KKworICAgIGRvdWJsZSBsZW5ndGgoVk0mKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1JlbW90ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNP
YmplY3QqIHRhcmdldENhbGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX3RhcmdldEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lTWF5
QmVOdWxsOworICAgIGRvdWJsZSBtX2xlbmd0aDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAppbmRleCA4NDczMDkxMjRhNWY4MTgzOGQ5OTU3NWVlMDM5MWE5NWNlMzVk
ZTg5Li42MjAxMTg2YmIxNzFlNjgwOGJkMmFjZDc4ZWNlNGM1OWQzYjM3YmQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC02MzIsNiArNjMyLDggQEAgc3RhdGljIFRodW5r
R2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMp
CiAgICAgICAgIHJldHVybiByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVu
Y3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5l
cmF0b3I7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNzA5LDYgKzcxMSwyNSBAQCBOYXRpdmVFeGVjdXRh
YmxlKiBWTTo6Z2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25z
dHJ1Y3QpCiAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9
CiAKK05hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5j
dGlvbikKK3sKKyAgICBib29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdl
dE9yQ3JlYXRlID0gWyZdIChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVF
eGVjdXRhYmxlKiB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0
ID0gZ2V0SG9zdEZ1bmN0aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlv
bkNhbGxHZW5lcmljIDogcmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAg
ICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMgOiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMs
CisgICAgICAgICAgICBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3Ry
aW5nKCkpOworICAgICAgICBzbG90ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAg
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
fQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTZlMzBm
ZmI5NDgxMGRkZDEyZGE4Y2NjNzE0NjE5MDYyZDAyZDQwNC4uZDUyODY0ZTlhMDYzOGY3MWFhMDZl
ZTQzZDBiMzIzMDU0OWU2YjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00
MzIsNiArNDMyLDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFj
ZSkKQEAgLTU3Miw2ICs1NzMsOSBAQCBwdWJsaWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiBtX3Nsb3dCb3VuZEV4ZWN1dGFibGU7CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Ns
b3dDYW5Db25zdHJ1Y3RCb3VuZEV4ZWN1dGFibGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+IG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+IG1fc2xvd1JlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJl
ZFdvcmtUaW1lcj4gZGVmZXJyZWRXb3JrVGltZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURl
c3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CkBAIC02ODYsNiArNjkwLDcgQEAgcHVibGljOgogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmlu
c2ljLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRG
dW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDE0MWRmMWUxMDUz
MWEzMTg0NDQxYTcwNDI5ZmMwYzZlNWUyNjkzNC4uZmFlNDlmMjdlNTQ5OTY3MzQ4NTY0OGRjMGQ5
MjExZTI0YTQ5OTgyMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIg
IDxjYWl0cEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBp
bmcgbG9naWMgdG8gYSBuZXcgRnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVz
dWtlIFN1enVraS4KKworICAgICAgICBBZGRzIGEgbmV3IGZpbGUgdGVzdGluZyBDb3B5TmFtZUFu
ZExlbmd0aCBzdHVmZiBpbiB0aGUgU2hhZG93UmVhbG0gcHJvcG9zYWwsCisgICAgICAgIGFuZCBm
aXggdXAgYXNzZXJ0aW9ucyBhYm91dCB0aGlzIGluIHNoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwor
CisgICAgICAgICogc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qczoKKyAgICAgICAgKiBz
dHJlc3Mvc2hhZG93LXJlYWxtLXJlbW90ZS1mdW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFtZS5q
czogQWRkZWQuCisKIDIwMjItMDItMDYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2FzbV0gcmVmLm51bGwgY2hlY2sgc2hvdWxkIGJlIGRvbmUgZmlyc3Qg
aW4gQjMgY2FsbF9yZWYKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1l
dmFsdWF0ZS5qcyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwppbmRl
eCBiMDFkYTFmNTdhOGY5NWI4M2RiMWJlOWNjYmZlODlhZmVhOGZmOGNlLi44MzYxOTIwZTZhZDNk
MDE4Mjc4ZjVmZjE5OGM2YTc3OThjYjQ4OTU4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9z
aGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxt
LWV2YWx1YXRlLmpzCkBAIC04MCw4ICs4MCwxNyBAQCBmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5j
LCBlcnJvclR5cGUsIGFzc2VydGlvbkZuKSB7CiAgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3Rv
dHlwZU9mKHdyYXBwZWRJbnZva2VBbmRBZGQpLCBGdW5jdGlvbi5wcm90b3R5cGUpOwogCiAgICAg
Ly8gbmFtZSBhbmQgbGVuZ3RoIHByb3BlcnRpZXMgZnJvbSB3cmFwcGVkIGZ1bmN0aW9uIGFyZSBh
YnNlbnQKLSAgICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdyYXBw
ZWRJbnZva2VBbmRBZGQsICJsZW5ndGgiKSwgdW5kZWZpbmVkKTsKLSAgICBzaG91bGRCZShPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdyYXBwZWRJbnZva2VBbmRBZGQsICJuYW1lIiks
IHVuZGVmaW5lZCk7CisgICAgbGV0IGxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHdyYXBwZWRJbnZva2VBbmRBZGQsICJsZW5ndGgiKTsKKyAgICBzaG91bGRCZShs
ZW5ndGhEZXNjLnZhbHVlLCAyKTsKKyAgICBzaG91bGRCZShsZW5ndGhEZXNjLndyaXRhYmxlLCBm
YWxzZSk7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy5lbnVtZXJhYmxlLCBmYWxzZSk7CisgICAg
c2hvdWxkQmUobGVuZ3RoRGVzYy5jb25maWd1cmFibGUsIHRydWUpOworCisgICAgbGV0IG5hbWVE
ZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRk
LCAibmFtZSIpOworICAgIHNob3VsZEJlKG5hbWVEZXNjLnZhbHVlLCAiaW52b2tlQW5kQWRkIik7
CisgICAgc2hvdWxkQmUobmFtZURlc2Mud3JpdGFibGUsIGZhbHNlKTsKKyAgICBzaG91bGRCZShu
YW1lRGVzYy5lbnVtZXJhYmxlLCBmYWxzZSk7CisgICAgc2hvdWxkQmUobmFtZURlc2MuY29uZmln
dXJhYmxlLCB0cnVlKTsKIAogICAgIC8vIGNhbid0IHBhc3Mgb2JqZWN0cyBpbnRvIGEgc2hhZG93
IHJlYWxtLXdyYXBwZWQgZnVuY3Rpb24KICAgICBsZXQgbnVtYmVyT2JqID0geyB2YWx1ZU9mKCkg
eyByZXR1cm4gLTEgfSB9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxt
LXJlbW90ZS1mdW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFtZS5qcyBiL0pTVGVzdHMvc3RyZXNz
L3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24tY29weS1sZW5ndGgtYW5kLW5hbWUuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmVjZTEyZDgwMzcxNWUyNmQ1ZDAyZjQ4NzczNTM2MTcyNjkwNzAxOAotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24t
Y29weS1sZW5ndGgtYW5kLW5hbWUuanMKQEAgLTAsMCArMSw0MTQgQEAKKy8vQCByZXF1aXJlT3B0
aW9ucygiLS11c2VTaGFkb3dSZWFsbT0xIikKKworZnVuY3Rpb24gc3VtbWFyaXplRWxlbWVudChl
bGVtZW50KSB7CisgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gIm9iamVjdCIpIHsKKyAgICBpZiAo
ZWxlbWVudCA9PT0gbnVsbCkKKyAgICAgIHJldHVybiAibnVsbCI7CisgICAgaWYgKEFycmF5Lmlz
QXJyYXkoZWxlbWVudCkpCisgICAgICByZXR1cm4gc3VtbWFyaXplQXJyYXkoZWxlbWVudCwgMCk7
CisgIH0KKyAgbGV0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnQpOworICBpZiAocmVz
dWx0Lmxlbmd0aCA+IDIwKSB7CisgICAgbGV0IGMgPSByZXN1bHRbMF07CisgICAgaWYgKGMgPT09
ICJ7IikKKyAgICAgIGMgPSAifSI7CisgICAgcmVzdWx0ID0gYCR7cmVzdWx0LnN1YnN0cigwLCAx
NSl9Li4uJHtjfWA7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gc3VtbWFy
aXplQXJyYXkoYXJyYXksIGluZGV4LCBzaG93SW5kZXgpIHsKKworICBsZXQgcHJlZml4ID0gaW5k
ZXggPT09IDAgPyAiIiA6IGAuLi4ke3N1bW1hcml6ZUVsZW1lbnQoYXJyYXlbaW5kZXggLSAxXSl9
LCBgOworICBsZXQgc3VmZml4ID0gaW5kZXggKyAxIDwgYXJyYXkubGVuZ3RoID8gYCwgJHtzdW1t
YXJpemVFbGVtZW50KGFycmF5W2luZGV4ICsgMV0pfS4uLmAgOiAiIjsKKworICBpZiAocHJlZml4
Lmxlbmd0aCA+IDIwKQorICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIocHJlZml4Lmxlbmd0aCAt
IDIwKTsKKyAgaWYgKHN1ZmZpeC5sZW5ndGggPiAyMCkKKyAgICBzdWZmaXggPSBzdWZmaXguc3Vi
c3RyKDAsIDIwKTsKKyAgZW5kZXIgPSBzaG93SW5kZXggPyBgIChhdCBpbmRleCAke2luZGV4fSlg
IDogIiI7CisgIHJldHVybiBgWyR7cHJlZml4fSR7SlNPTi5zdHJpbmdpZnkoYXJyYXlbaW5kZXhd
KX0ke3N1ZmZpeH1dJHtlbmRlcn1gOworfQorZnVuY3Rpb24gc2hvdWxkQmVBcnJheUVxdWFsKGFj
dHVhbCwgZXhwZWN0ZWQpIHsKKyAgaWYgKChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSAmJiAhQXJy
YXkuaXNBcnJheShhY3R1YWwpKSkKKyAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7SlNP
Ti5zdHJpbmdpZnl9IGJ1dCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbCl9YCk7CisKKyAg
dmFyIGk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyArK2kpIHsKKyAg
ICBsZXQgZSA9IGV4cGVjdGVkW2ldOworICAgIGxldCBhID0gYWN0dWFsW2ldOworICAgIGlmIChl
ID09PSBhKQorICAgICAgY29udGludWU7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpCisgICAg
ICBzaG91bGRCZUFycmF5RXF1YWwoYSwgZSk7CisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3Rl
ZCAke3N1bW1hcml6ZUFycmF5KGV4cGVjdGVkLCBpLCB0cnVlKX0gYnV0IGZvdW5kICR7c3VtbWFy
aXplQXJyYXkoYWN0dWFsLCBpKX1gKQorICB9Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVh
bCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShhY3R1YWwpIHx8IEFycmF5Lmlz
QXJyYXkoZXhwZWN0ZWQpKQorICAgICAgcmV0dXJuIHNob3VsZEJlQXJyYXlFcXVhbChhY3R1YWws
IGV4cGVjdGVkKTsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWApOworfQor
CitmdW5jdGlvbiBzaG91bGRIYXZlRGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcikgeworICBsZXQgYWN0dWFsID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIHByb3BlcnR5TmFtZSk7CisgIGxldCBvcmRlciA9IE9iamVjdC5rZXlzKGRlc2Ny
aXB0b3IpLnNvcnQoKTsKKyAgZm9yIChsZXQga2V5IG9mIG9yZGVyKSB7CisgICAgbGV0IHZhbHVl
ID0gZGVzY3JpcHRvcltrZXldOworICAgIGlmIChbInVuZGVmaW5lZCIsICJib29sZWFuIiwgIm51
bWJlciIsICJzdHJpbmciLCAic3ltYm9sIiwgImJpZ2ludCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1
ZSkgfHwgdmFsdWUgPT09IG51bGwpIHsKKyAgICAgIGlmIChhY3R1YWxba2V5XSAhPT0gdmFsdWUp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVFbGVtZW50KGFj
dHVhbCl9J3MgJyR7a2V5fScgdG8gYmUgJHtzdW1tYXJpemVFbGVtZW50KHZhbHVlKX0sIGJ1dCBm
b3VuZCAke3N1bW1hcml6ZUVsZW1lbnQoYWN0dWFsW2tleV0pfWApOworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7CisgICAgICBpZiAoYWN0dWFsW2tleV0gIT09
IHZhbHVlICYmIFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhhY3R1YWxba2V5XSkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVFbGVtZW50KGFjdHVhbCl9J3Mg
JyR7a2V5fScgdG8gYmUgJHtzdW1tYXJpemVFbGVtZW50KHZhbHVlKX0sIGJ1dCBmb3VuZCAke3N1
bW1hcml6ZUVsZW1lbnQoYWN0dWFsW2tleV0pfWApOworICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBzaG91bGRUaHJvdyhvcCwgZXJyb3JDb25zdHJ1Y3RvciwgZGVzYykgeworICAgIHRyeSB7Cisg
ICAgICAgIG9wKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoIShlIGluc3RhbmNl
b2YgZXJyb3JDb25zdHJ1Y3RvcikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdGhy
ZXcgJHtlfSwgYnV0IHNob3VsZCBoYXZlIHRocm93biAke2Vycm9yQ29uc3RydWN0b3IubmFtZX1g
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRocm93IG5ldyBFcnJv
cihgRXhwZWN0ZWQgJHtkZXNjIHx8ICdvcGVyYXRpb24nfSB0byB0aHJvdyAke2Vycm9yQ29uc3Ry
dWN0b3IubmFtZX0sIGJ1dCBubyBleGNlcHRpb24gdGhyb3duYCk7Cit9CisKK2xldCByZWFsbSA9
IG5ldyBTaGFkb3dSZWFsbTsKKworbGV0IGYgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAg
bGV0IHRlc3QxID0gZnVuY3Rpb24oYSwgYiwgYykgeworICB9OworICByZXR1cm4gdGVzdDE7Cit9
KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiAz
LAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFi
bGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2YWx1
ZTogInRlc3QxIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAg
Y29uZmlndXJhYmxlOiB0cnVlLAorfSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsK
KyAgZnVuY3Rpb24gdGVzdDIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwg
biwgbywgcCkgeworICB9CisgIHJldHVybiB0ZXN0MjsKK30pKClgKTsKKworc2hvdWxkSGF2ZURl
c2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDE2LAorICB3cml0YWJsZTogZmFsc2Us
CisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3Vs
ZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2YWx1ZTogInRlc3QyIiwKKyAgd3JpdGFi
bGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAor
fSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0IGYgPSBmdW5jdGlvbigp
IHsKKyAgfQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgImxlbmd0aCIsIHsKKyAgICB2YWx1
ZTogLUluZmluaXR5LAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHko
ZiwgIm5hbWUiLCB7CisgICAgdmFsdWU6ICIyNyIsCisgICAgd3JpdGFibGU6IHRydWUsCisgICAg
Y29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVy
biBmOworfSkoKWApOworCitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2
YWx1ZTogMCwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29u
ZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsK
KyAgdmFsdWU6ICIyNyIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2Us
CisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9
PiB7CisgIGxldCBmID0gZnVuY3Rpb24oKSB7CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGYsICJsZW5ndGgiLCB7CisgICAgdmFsdWU6IC05Ljc0LAorICAgIHdyaXRhYmxlOiB0cnVlLAor
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoZiwgIm5hbWUiLCB7CisgICAgdmFsdWU6IDU3LAorICAgIHdy
aXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0
cnVlCisgIH0pOworICByZXR1cm4gZjsKK30pKClgKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3Io
ZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDAsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVy
YWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2Ny
aXB0b3IoZiwgIm5hbWUiLCB7CisgIHZhbHVlOiAiIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBl
bnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CisKK2xldCBpbm5l
ckxvZyA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBnbG9iYWxUaGlzLl9sb2cgPSBbXTsK
KyAgZ2xvYmFsVGhpcy5sb2cgPSBmdW5jdGlvbiBsb2coaXRlbSkgeworICAgIGdsb2JhbFRoaXMu
X2xvZy5wdXNoKGl0ZW0pOworICB9OworCisgIHJldHVybiBmdW5jdGlvbiBsb2coKSB7CisgICAg
bGV0IGxvZyA9IGdsb2JhbFRoaXMuX2xvZzsKKyAgICBnbG9iYWxUaGlzLl9sb2cgPSBbXTsKKyAg
ICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobG9nKTsKKyAgfTsKK30pKClgKTsKKworZnVuY3Rpb24g
bG9nKCkgeworICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShpbm5lckxvZygpKTsKKyAgc2hvdWxk
QmUoQXJyYXkuaXNBcnJheShyZXN1bHQpLCB0cnVlKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQgdGFyZ2V0ID0gKGZ1bmN0aW9uKCkg
eworICAgIGxvZyhcYGNhbGxlZFxgKTsKKyAgfSk7CisgIGxldCBwID0gbmV3IFByb3h5KHRhcmdl
dCwgeworICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBwKSB7CisgICAgICBsb2coXGBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5n
ZXRPd25Qcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0KHQsIHApIHsKKyAg
ICAgIGxvZyhcYGdldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmdldCguLi5hcmd1
bWVudHMpOworICAgIH0sCisgICAgZGVmaW5lUHJvcGVydHkodCwgcCwgbykgeworICAgICAgbG9n
KFxgZGVmaW5lUHJvcGVydHkgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQ
cm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0UHJvdG90eXBlT2YodCkgewor
ICAgICAgbG9nKFxgZ2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQ
cm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0UHJvdG90eXBlT2YodCwg
dikgeworICAgICAgbG9nKFxgc2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5zZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaXNFeHRlbnNpYmxl
KHQpIHsKKyAgICAgIGxvZyhcYGlzRXh0ZW5zaWJsZVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0
LmlzRXh0ZW5zaWJsZSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgcHJldmVudEV4dGVuc2lv
bnModCkgeworICAgICAgbG9nKFxgcHJldmVudEV4dGVuc2lvbnNcYCk7CisgICAgICByZXR1cm4g
UmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaGFz
KHQsIHApIHsKKyAgICAgIGxvZyhcYGhhcyBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0
LmhhcyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0KHQsIHAsIHYpIHsKKyAgICAgIGxv
ZyhcYHNldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldCguLi5hcmd1bWVudHMp
OworICAgIH0sCisgICAgZGVsZXRlKHQsIHApIHsKKyAgICAgIGxvZyhcYGRlbGV0ZSBcJHtwfVxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZSguLi5hcmd1bWVudHMpOworICAgIH0sCisg
ICAgb3duS2V5cyh0KSB7CisgICAgICBsb2coXGBvd25LZXlzXGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3Qub3duS2V5cyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgYXBwbHkoKSB7CisgICAg
ICBsb2coXGBhcHBseVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KC4uLmFyZ3VtZW50
cyk7CisgICAgfSwKKyAgICBjb25zdHJ1Y3QoKSB7CisgICAgICBsb2coXGBjb25zdHJ1Y3RcYCk7
CisgICAgICByZXR1cm4gUmVmbGVjdC5hcmd1bWVudExpc3QoLi4uYXJndW1lbnRzKTsKKyAgICB9
LAorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgImxlbmd0aCIsIHsKKyAg
ICBnZXQoKSB7CisgICAgICBsb2coImxlbmd0aCBnZXR0ZXIiKTsKKyAgICAgIHJldHVybiBJbmZp
bml0eTsKKyAgICB9LAorICAgIHNldCgpIHsKKyAgICAgIGxvZygibGVuZ3RoIHNldHRlciIpOwor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAg
IGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQs
ICJuYW1lIiwgeworICAgIGdldCgpIHsKKyAgICAgIGxvZygibmFtZSBnZXR0ZXIiKTsKKyAgICAg
IHJldHVybiBJbmZpbml0eTsKKyAgICB9LAorICAgIHNldCgpIHsKKyAgICAgIGxvZygibmFtZSBz
ZXR0ZXIiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1cm4gcDsKK30pKClgKTsK
KworZigpOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IElu
ZmluaXR5LAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25m
aWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgewor
ICB2YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkQmUobG9nKCksIFsKKyAgImdldCBsZW5n
dGgiLAorICAibGVuZ3RoIGdldHRlciIsCisgICJnZXQgbmFtZSIsCisgICJuYW1lIGdldHRlciIs
CisgICJhcHBseSIsCisgICJjYWxsZWQiCitdKTsKK2YoKTsKK3Nob3VsZEJlKGxvZygpLCBbImFw
cGx5IiwgImNhbGxlZCJdKTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQg
dGFyZ2V0ID0gKGZ1bmN0aW9uKCkgeworICAgIGxvZyhcYGNhbGxlZCAyXGApOworICB9KTsKKyAg
bGV0IHAgPSBuZXcgUHJveHkodGFyZ2V0LCB7CisgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHQsIHApIHsKKyAgICAgIGxvZyhcYGdldE93blByb3BlcnR5RGVzY3JpcHRvciBcJHtwfVxgKTsK
KyAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBnZXQodCwgcCkgeworICAgICAgbG9nKFxgZ2V0IFwke3B9XGApOworICAgICAgcmV0
dXJuIFJlZmxlY3QuZ2V0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBkZWZpbmVQcm9wZXJ0
eSh0LCBwLCBvKSB7CisgICAgICBsb2coXGBkZWZpbmVQcm9wZXJ0eSBcJHtwfVxgKTsKKyAgICAg
IHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAg
ICBnZXRQcm90b3R5cGVPZih0KSB7CisgICAgICBsb2coXGBnZXRQcm90b3R5cGVPZlxgKTsKKyAg
ICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7CisgICAgfSwK
KyAgICBzZXRQcm90b3R5cGVPZih0LCB2KSB7CisgICAgICBsb2coXGBzZXRQcm90b3R5cGVPZlxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7Cisg
ICAgfSwKKyAgICBpc0V4dGVuc2libGUodCkgeworICAgICAgbG9nKFxgaXNFeHRlbnNpYmxlXGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuaXNFeHRlbnNpYmxlKC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBwcmV2ZW50RXh0ZW5zaW9ucyh0KSB7CisgICAgICBsb2coXGBwcmV2ZW50RXh0ZW5z
aW9uc1xgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3Vt
ZW50cyk7CisgICAgfSwKKyAgICBoYXModCwgcCkgeworICAgICAgbG9nKFxgaGFzIFwke3B9XGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuaGFzKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBz
ZXQodCwgcCwgdikgeworICAgICAgbG9nKFxgc2V0IFwke3B9XGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3Quc2V0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBkZWxldGUodCwgcCkgeworICAg
ICAgbG9nKFxgZGVsZXRlIFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlKC4u
LmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBvd25LZXlzKHQpIHsKKyAgICAgIGxvZyhcYG93bktl
eXNcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBhcHBseSgpIHsKKyAgICAgIGxvZyhcYGFwcGx5XGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3QuYXBwbHkoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGNvbnN0cnVjdCgpIHsKKyAg
ICAgIGxvZyhcYGNvbnN0cnVjdFxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFyZ3VtZW50TGlz
dCguLi5hcmd1bWVudHMpOworICAgIH0sCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHko
dGFyZ2V0LCAibGVuZ3RoIiwgeworICAgIGdldCgpIHsgcmV0dXJuIH0sCisgICAgY29uZmlndXJh
YmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0YXJnZXQsICJuYW1lIiwgeworICAgIHZhbHVlOiA1NywKKyAgICBjb25maWd1cmFi
bGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJuIHA7Cit9KSgp
YCk7CisKK2YoKTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVl
OiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1
cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2
YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkQmUobG9nKCksIFsKKyAgImdldCBsZW5ndGgi
LAorICAiZ2V0IG5hbWUiLAorICAiYXBwbHkiLAorICAiY2FsbGVkIDIiCitdKTsKK2YoKTsKK3No
b3VsZEJlKGxvZygpLCBbImFwcGx5IiwgImNhbGxlZCAyIl0pOworCitzaG91bGRIYXZlRGVzY3Jp
cHRvcihmLCAibGVuZ3RoIiwgeworICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZh
bHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYs
ICJuYW1lIiwgeworICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBj
b25maWd1cmFibGU6IHRydWUsCit9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451286</attachid>
            <date>2022-02-08 11:38:51 -0800</date>
            <delta_ts>2022-02-08 12:43:20 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-235382-20220208193850.patch</filename>
            <type>text/plain</type>
            <size>88317</size>
            <attacher name="Caitlin Potter (:caitp)">caitp</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Mzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MDRhNjJhYjIzNmE2NWU5MzY1NjAyZDkyYTA4NDJlNWY4YjlkNzNlLi40ZGY1YTgyYTc2NGM3Njhl
MzhiMDdhNjU0NjljZGE1OWZkNTYzY2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBpbmcgbG9naWMgdG8gYSBuZXcg
RnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAg
ICAgICBJbiB0aGlzIGluaXRpYWwgcGF0Y2gsIHRoZXJlIGlzIHN0aWxsIGEgbG90IG9mIEpTLWJ1
aWx0aW4gbWFjaGluZXJ5LAorICAgICAgICBpbmNsdWRpbmcgc29tZSBkdXBsaWNhdGVkIGZ1bmN0
aW9uYWxpdHkuIEFkZGl0aW9uYWxseSwgSklUIHN1cHBvcnQKKyAgICAgICAgaGFzIG5vdCBiZWVu
IGluY29ycG9yYXRlZCB5ZXQuCisKKyAgICAgICAgQnJvYWRseSwgdGhlIGlkZWEgaXMgdGhhdCB0
aGVyZSBhcmUgY3VzdG9tIGhvb2tzIGZvciBjYWxsaW5nIGEKKyAgICAgICAgSlNSZW1vdGVGdW5j
dGlvbiwgd2hpY2ggcGVyZm9ybSB0aGUgd3JhcHBpbmcgZnVuY3Rpb25hbGl0eS4gVGhpcyBhdm9p
ZHMKKyAgICAgICAgdGhlIG5lZWQgZm9yIGFsbG9jYXRpbmcgY2xvc3VyZXMgd2hpY2ggY29udGFp
biB0aGUgd3JhcHBpbmcgbG9naWMuCisKKyAgICAgICAgVE9ETzoKKyAgICAgICAgLSBKSVQvREZH
L0ZUTCBzdXBwb3J0CisgICAgICAgIC0gc3RydWN0dXJlIGNhY2hpbmcgKHVubmVjZXNzYXJ5IHNp
bmNlIHRoZXNlIGFyZSBub3QgY29uc3RydWN0b3JzPykKKyAgICAgICAgLSBpbXByb3ZlZCBiYXNl
bGluZSBwZXJmCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUu
anM6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAqIGlu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
Lmg6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGVyYXRpb25zLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAg
ICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNp
Yy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNSZW1vdGVGdW5jdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNSZW1vdGVGdW5jdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMjItMDItMDcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDb252ZXJ0IEpTU3RyaW5nJ3Mgbm9uLWF0
b21pYyBXVEY6OlN0cmluZyB0byBhdG9taWMgc3RyaW5nIHdoaWxlIGNvbmN1cnJlbnQgY29tcGls
ZXJzIC8gaGVhcCB0aHJlYWRzIHJ1bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDc4ODM3N2Y2NzEzOTlhMTNiMGI1MTUzMWUwYzI5YzI0NzQzZGI4MjEuLjI3NzdiZTk5YWQx
YjdjMDlkMmI2Yzk1MDIyN2RhYzNlMTczYmNiZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEwODMsNiArMTA4Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5oCiAg
ICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAogICAgIHJ1bnRpbWUvSlNQcm94
eS5oCisgICAgcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKICAgICBydW50aW1lL0pTUnVuTG9v
cFRpbWVyLmgKICAgICBydW50aW1lL0pTU2NvcGUuaAogICAgIHJ1bnRpbWUvSlNTY3JpcHRGZXRj
aFBhcmFtZXRlcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YzFkY2JkMmE2
NzRhNTEzYjA3MTE2MzAwYmM4MzEzNTAwZTZkYzJmLi5kMDQ4MDkxOGNiMDQ3ZDQ0OTgzZWRkNWU2
ZDdhMDFiZTUzZWVlZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzMyw2
ICsxMTMzLDcgQEAKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rp
b25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3
RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNUI0MDMyODAyNzk4RDIwNjAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNDAzMjdFMjc5
OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUI3MENGREUxREI2OUU2NjAwRUMyM0Y5IC8q
IEpTQXN5bmNGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUI3MENGRDgxREI2OUU1QzAwRUMyM0Y5IC8qIEpTQXN5bmNGdW5jdGlvbi5oICov
OyB9OwogCQk1QjcwQ0ZFMDFEQjY5RTY2MDBFQzIzRjkgLyogQXN5bmNGdW5jdGlvblByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENG
REExREI2OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLzsgfTsKIAkJ
NUI3MENGRTIxREI2OUU2NjAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUI3MENGREMxREI2
OUU1QzAwRUMyM0Y5IC8qIEFzeW5jRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtNDA4
NCw2ICs0MDg1LDggQEAKIAkJNTNGQTJBRTIxQ0YzODAzOTAwMjI3MTFEIC8qIExMSW50UHJvdG90
eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0ZEMDREMTFEN0FC
MTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsaW5nQ29udmVudGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNh
bGxpbmdDb252ZW50aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCNDAzMjdF
Mjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90ZUZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
UmVtb3RlRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUI0MDMyN0Yy
Nzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3RlRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNSZW1vdGVGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVC
NzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTVCNzBDRkQ5MURCNjlFNUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBc3luY0Z1bmN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUI3MENGREExREI2OUU1QzAwRUMy
M0Y5IC8qIEFzeW5jRnVuY3Rpb25Qcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXN5bmNGdW5jdGlvblByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzk3MSw2ICs3OTc0LDggQEAKIAkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCiAJCQkJODYyNTUzQ0UxNjEzNkFBNTAw
OUYxN0QwIC8qIEpTUHJveHkuY3BwICovLAogCQkJCTg2MjU1M0NGMTYxMzZBQTUwMDlGMTdEMCAv
KiBKU1Byb3h5LmggKi8sCisJCQkJNUI0MDMyN0YyNzk4RDFGRDAwRjM3OTM5IC8qIEpTUmVtb3Rl
RnVuY3Rpb24uY3BwICovLAorCQkJCTVCNDAzMjdFMjc5OEQxRkQwMEYzNzkzOSAvKiBKU1JlbW90
ZUZ1bmN0aW9uLmggKi8sCiAJCQkJNTM0NjM4NzIxRTcwRDAxNTAwRjEyQUMxIC8qIEpTUnVuTG9v
cFRpbWVyLmNwcCAqLywKIAkJCQk1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29w
VGltZXIuaCAqLywKIAkJCQkxNDg3NEFFMTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAg
Ki8sCkBAIC0xMDY3NSw2ICsxMDY4MCw3IEBACiAJCQkJOTk2QjczMUYxQkRBMDhFRjAwMzMxQjg0
IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2MjU1M0QyMTYxMzZFMUEwMDlGMTdEMCAvKiBKU1Byb3h5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1QjQwMzI4MDI3OThEMjA2MDBGMzc5MzkgLyogSlNSZW1vdGVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3Rl
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYx
MkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291
cmNlcy50eHQKaW5kZXggNzAwYzdiYTk2MmQ1MDAyN2ZiYzY2NDhiOTVmNTAyNzZlMGU2Yjc3Yi4u
M2E5NWM1OGIzZDk5YjliY2U4MzJjMDE3NTgyZGY5NTg0ZDhlY2E4YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dApAQCAtOTAyLDYgKzkwMiw3IEBAIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCiBydW50aW1lL0pTUHJvbWlzZVByb3RvdHlwZS5jcHAKIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAogcnVudGltZS9KU1Byb3h5LmNwcAorcnVudGltZS9KU1Jl
bW90ZUZ1bmN0aW9uLmNwcAogcnVudGltZS9KU1J1bkxvb3BUaW1lci5jcHAKIHJ1bnRpbWUvSlNT
Y29wZS5jcHAKIHJ1bnRpbWUvSlNTY3JpcHRGZXRjaGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAppbmRleCAyODVkZjBkMWExODA5ZGIyMGI0Nzk0
Y2QzMTIwNTllZmM2ZWUwMGUwLi4xODVhYTMxZjYxZDkwNDc1Yzk3YWYwYTFiYjI2M2Y3YjBhOWFm
YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaApA
QCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6CiAgICAgdihERkdUaHVuaykgXAogICAgIHYoRlRMVGh1
bmspIFwKICAgICB2KEJvdW5kRnVuY3Rpb25UaHVuaykgXAorICAgIHYoUmVtb3RlRnVuY3Rpb25U
aHVuaykgXAogICAgIHYoU3BlY2lhbGl6ZWRUaHVuaykgXAogICAgIHYoVmlydHVhbFRodW5rKSBc
CiAgICAgdihXYXNtVGh1bmspIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAppbmRleCA4MGE4N2ViMDA3YTlkMzhjNzE1NDI4OTY1OGY4ODEzODQ2YmM4
ODhkLi5hMDUyNTc0ODc2ZmExNDhhYzk4M2JjNDE3MWY0MTU1YTcwZDNmMGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODksNiArMTg5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMp
IFwKICAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpIFwKICAgICBtYWNybyhz
ZW50aW5lbFN0cmluZykgXAorICAgIG1hY3JvKGNyZWF0ZVJlbW90ZUZ1bmN0aW9uKSBcCisgICAg
bWFjcm8oaXNSZW1vdGVGdW5jdGlvbikgXAogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TaGFkb3dSZWFsbVByb3RvdHlw
ZS5qcwppbmRleCA4ZDg5MDY4OGQ3YTdkMTczYWZkYmY0ZjAxMjgxNTNhNmJlOWE0YzRiLi5hMmI0
MTBiMzY3ZjRmYzkyODU3NmQxOGY3ZTdmMzc4YjQzZWZiYzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2hhZG93UmVhbG1Qcm90b3R5cGUuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1NoYWRvd1JlYWxtUHJvdG90eXBlLmpzCkBAIC0z
MiwzOSArMzIsNyBAQCBmdW5jdGlvbiB3cmFwKGZyb21TaGFkb3dSZWFsbSwgc2hhZG93UmVhbG0s
IHRhcmdldCkKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBpZiAoQGlzQ2FsbGFibGUodGFyZ2V0
KSkgewotICAgICAgICB2YXIgd3JhcHBlZCA9IGZ1bmN0aW9uKC8qIGFyZ3MuLi4gKi8pIHsKLSAg
ICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgICAgICAgdmFy
IHdyYXBwZWRBcmdzID0gQG5ld0FycmF5V2l0aFNpemUobGVuZ3RoKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpCi0gICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGZvciBhcmd1bWVudHMsIHdlIGZsaXAgYGZyb21TaGFkb3dSZWFsbWAg
c2luY2UgdG8KLSAgICAgICAgICAgICAgICAvLyB3cmFwIGEgZnVuY3Rpb24gZnJvbSByZWFsbSBB
IHRvIHdvcmsgaW4gcmVhbG0gQiwgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIHdyYXAg
dGhlIGFyZ3VtZW50cyAoZnJvbSByZWFsbSBCKSB0byB3b3JrIGluIHJlYWxtIEEgYmVmb3JlCi0g
ICAgICAgICAgICAgICAgLy8gY2FsbGluZyB0aGUgd3JhcHBlZCBmdW5jdGlvbgotICAgICAgICAg
ICAgICAgIEBwdXRCeVZhbERpcmVjdCh3cmFwcGVkQXJncywgaW5kZXgsIEB3cmFwKCFmcm9tU2hh
ZG93UmVhbG0sIHNoYWRvd1JlYWxtLCBhcmd1bWVudHNbaW5kZXhdKSk7Ci0KLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5AYXBwbHkoQHVuZGVm
aW5lZCwgd3JhcHBlZEFyZ3MpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IG1zZyA9ICJ3cmFwcGVkIGZ1bmN0aW9uIHRocmV3OiAiICsgZS50b1N0cmlu
ZygpOwotICAgICAgICAgICAgICAgIGlmIChmcm9tU2hhZG93UmVhbG0pCi0gICAgICAgICAgICAg
ICAgICAgIEB0aHJvd1R5cGVFcnJvcihtc2cpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBta1R5cGVFcnJvciA9IEBldmFsSW5SZWFsbShzaGFkb3dS
ZWFsbSwgIihtc2cpID0+IG5ldyBUeXBlRXJyb3IobXNnKSIpOwotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlcnIgPSBta1R5cGVFcnJvci5AYXBwbHkobXNnKTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgZXJyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBAd3JhcChmcm9tU2hhZG93UmVhbG0sIHNoYWRvd1JlYWxtLCByZXN1bHQpOwot
ICAgICAgICB9OwotICAgICAgICBkZWxldGUgd3JhcHBlZFsnbmFtZSddOwotICAgICAgICBkZWxl
dGUgd3JhcHBlZFsnbGVuZ3RoJ107Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB0aGlzIGZ1bmN0aW9u
ICh3cmFwKSB3aWxsIHJ1biB3aXRoIHRoZSBpbmN1YmF0aW5nIHJlYWxtCi0gICAgICAgIC8vIGFj
dGl2ZSwgd2Ugb25seSBuZWVkIHRvIGZpeCB0aGUgcHJvdG90eXBlIG9uIGB3cmFwcGVkYCBpZiB3
ZSBhcmUKLSAgICAgICAgLy8gbW92aW5nIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBpbmN1YmF0aW5n
IHJlYWxtIHRvIHRoZSBzaGFkb3cgcmVhbG0KLSAgICAgICAgaWYgKCFmcm9tU2hhZG93UmVhbG0p
Ci0gICAgICAgICAgICBAbW92ZUZ1bmN0aW9uVG9SZWFsbSh3cmFwcGVkLCBzaGFkb3dSZWFsbSk7
Ci0gICAgICAgIHJldHVybiB3cmFwcGVkOworICAgICAgICByZXR1cm4gQGNyZWF0ZVJlbW90ZUZ1
bmN0aW9uKHRhcmdldCwgZnJvbVNoYWRvd1JlYWxtID8gbnVsbCA6IHNoYWRvd1JlYWxtKTsKICAg
ICB9IGVsc2UgaWYgKEBpc09iamVjdCh0YXJnZXQpKSB7CiAgICAgICAgIEB0aHJvd1R5cGVFcnJv
cigidmFsdWUgcGFzc2luZyBiZXR3ZWVuIHJlYWxtcyBtdXN0IGJlIGNhbGxhYmxlIG9yIHByaW1p
dGl2ZSIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlu
a1RpbWVDb25zdGFudC5oCmluZGV4IGU2NmU4ZmRiMTZhZjBmNjg5ZjBhYmVhNDgwYWVjYjQ1MmFj
OGI5ZjEuLmRmOTk0MmYyMTI1M2IwODI2ZDNhN2Q5MDA0ODhmNmRjYmRkMjc5ZDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAt
MTE3LDYgKzExNyw4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY3JlYXRlUHJpdmF0
ZVN5bWJvbCwgbnVsbHB0cikgXAogICAgIHYoZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBu
dWxscHRyKSBcCiAgICAgdihzZW50aW5lbFN0cmluZywgbnVsbHB0cikgXAorICAgIHYoY3JlYXRl
UmVtb3RlRnVuY3Rpb24sIG51bGxwdHIpIFwKKyAgICB2KGlzUmVtb3RlRnVuY3Rpb24sIG51bGxw
dHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUp
IG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IGI5ZjgxODQ2MGU1NGVjOTIyZjM5NGI2Y2ZlZDIyN2M1YjRhNmMwMWQuLmZjM2E2
YzRmZGFlM2RkODk2NzhjNmJiOWE2NTY5MGI0OGY3ZmFkN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xMTI1Nyw2ICsxMTI1Nyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGdW5jdGlvblRvU3RyaW5nKE5vZGUqIG5v
ZGUpCiAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwg
IldlIGRvbid0IGhhbmRsZSBzdWJjbGFzc2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxv
dyIpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6
RXF1YWwsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cihKU0JvdW5kRnVuY3Rpb246OmluZm8o
KSkpKTsKIAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rp
b24+LCAiV2UgZG9uJ3QgaGFuZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZv
IGJlbG93Iik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyKEpTUmVtb3RlRnVuY3Rpb246
OmluZm8oKSkpKTsKKwogICAgIGdldEV4ZWN1dGFibGUobV9qaXQsIGZ1bmN0aW9uLmdwcigpLCBl
eGVjdXRhYmxlLmdwcigpKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05hdGl2ZUV4ZWN1dGFi
bGUgPSBtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoZXhlY3V0YWJsZS5ncHIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihOYXRpdmVFeGVjdXRhYmxlVHlwZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggN2FjZmNiY2RhN2I1ZDE4MjMzYTU3MjAz
OTUzNTU5ZTU1NjEzN2ZkMi4uOWU1OTliZmZlYzhiOTAwZmQ3MjM4ZWRjNjM5Y2ViNTY0OTQzYTlj
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtODYxMyw2ICs4NjEzLDcgQEAgSUdOT1JFX0NMQU5HX1dBUk5JTkdTX0VORAogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJvdW5kRnVuY3Rpb25D
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Qm91bmRPclJl
bW90ZUZ1bmN0aW9uQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2Nr
IGZ1bmN0aW9uRXhlY3V0YWJsZUNhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFz
aWNCbG9jayBuYXRpdmVFeGVjdXRhYmxlQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
IExCYXNpY0Jsb2NrIHRlc3RQdHIgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtODYyOCw3ICs4NjI5
LDExIEBAIElHTk9SRV9DTEFOR19XQVJOSU5HU19FTkQKICAgICAgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX2ZpbmFsX3Y8SlNCb3VuZEZ1bmN0aW9uPiwgIldlIGRvbid0IGhhbmRsZSBzdWJjbGFz
c2VzIHdoZW4gY29tcGFyaW5nIGNsYXNzSW5mbyBiZWxvdyIpOwogICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwoY2xhc3NJbmZvLCBtX291dC5jb25zdEludFB0cihKU0JvdW5kRnVuY3Rp
b246OmluZm8oKSkpLCB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUobm90Qm91bmRGdW5jdGlvbkNh
c2UpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5v
dEJvdW5kRnVuY3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19maW5hbF92PEpTUmVtb3RlRnVuY3Rpb24+LCAiV2UgZG9uJ3QgaGFu
ZGxlIHN1YmNsYXNzZXMgd2hlbiBjb21wYXJpbmcgY2xhc3NJbmZvIGJlbG93Iik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdEJvdW5kRnVuY3Rpb25DYXNlLCBub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGNsYXNzSW5mbywg
bV9vdXQuY29uc3RJbnRQdHIoSlNSZW1vdGVGdW5jdGlvbjo6aW5mbygpKSksIHVuc3VyZShzbG93
Q2FzZSksIHVuc3VyZShub3RCb3VuZE9yUmVtb3RlRnVuY3Rpb25DYXNlKSk7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RCb3VuZE9yUmVtb3RlRnVu
Y3Rpb25DYXNlLCBuYXRpdmVFeGVjdXRhYmxlQ2FzZSk7CiAgICAgICAgIExWYWx1ZSBleGVjdXRh
YmxlID0gZ2V0RXhlY3V0YWJsZShmdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmJyYW5jaChpc1R5
cGUoZXhlY3V0YWJsZSwgTmF0aXZlRXhlY3V0YWJsZVR5cGUpLCB1bnN1cmUobmF0aXZlRXhlY3V0
YWJsZUNhc2UpLCB1bnN1cmUoZnVuY3Rpb25FeGVjdXRhYmxlQ2FzZSkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCmluZGV4IDgwNmIxN2RlZmI1ZjI2ZWRiMzEzYTg2NDAxOTIyYTY5
MTdkMDA3MDcuLjAxZTFjOTMyYmYzMzcxMjAzNTViOGEwZjAwNmRmY2E3NDdiMTEyNWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAi
SklUU3R1YlJvdXRpbmVTZXQuaCIKICNpbmNsdWRlICJKSVRXb3JrbGlzdElubGluZXMuaCIKICNp
bmNsdWRlICJKU0ZpbmFsaXphdGlvblJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdFJlZi5oIgpAQCAtMzIxOSw2ICsz
MjIwLDcgQEAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKG1vZHVsZU5h
bWVzcGFjZU9iamVjdFNwYWNlLCBtb2R1bGVOYW1lc3AKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVJfU0xPVyhuYXRpdmVTdGRGdW5jdGlvblNwYWNlLCBuYXRpdmVTdGRGdW5jdGlv
bkhlYXBDZWxsVHlwZSwgSlNOYXRpdmVTdGRGdW5jdGlvbikgLy8gSGFzaDoweDcwZWQ2MWU0CiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cocHJveHlPYmplY3RTcGFjZSwg
Y2VsbEhlYXBDZWxsVHlwZSwgUHJveHlPYmplY3QpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1cocHJveHlSZXZva2VTcGFjZSwgY2VsbEhlYXBDZWxsVHlwZSwgUHJveHlS
ZXZva2UpIC8vIEhhc2g6MHhiNTA2YTkzOQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHJlbW90ZUZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUsIEpTUmVtb3Rl
RnVuY3Rpb24pCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1coc2NvcGVk
QXJndW1lbnRzVGFibGVTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlwZSwgU2NvcGVk
QXJndW1lbnRzVGFibGUpCiBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
c2NyaXB0RmV0Y2hQYXJhbWV0ZXJzU3BhY2UsIGRlc3RydWN0aWJsZUNlbGxIZWFwQ2VsbFR5cGUs
IEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzKQogRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUl9TTE9XKHNjcmlwdEZldGNoZXJTcGFjZSwgZGVzdHJ1Y3RpYmxlQ2VsbEhlYXBDZWxsVHlw
ZSwgSlNTY3JpcHRGZXRjaGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFhM2Jj
MWMzYjE5NTM5NmY1YjhkYWQzNDY2ZWMxZGI0OTRiZWE1N2MuLmFkY2ZhYmIzYmQyZjI2NzUwMjM5
NjQ1Nzk3N2JiN2QxN2FmZWEzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTky
Niw2ICs5MjYsNyBAQCBwdWJsaWM6CiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01F
TUJFUihuYXRpdmVTdGRGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RF
RklORV9NRU1CRVIocHJveHlPYmplY3RTcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5UmV2b2tlU3BhY2UpCisgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihyZW1vdGVGdW5jdGlvblNwYWNlKQogICAgIERZTkFNSUNfSVNPX1NVQlNQ
QUNFX0RFRklORV9NRU1CRVIoc2NvcGVkQXJndW1lbnRzVGFibGVTcGFjZSkKICAgICBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoUGFyYW1ldGVyc1NwYWNlKQog
ICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVIoc2NyaXB0RmV0Y2hlclNwYWNl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVk
U2NyaXB0SG9zdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAppbmRleCAzODhjZjA0NWNkOWM4NzkzMjNjOTM2ODE2MmIwM2VmMTVj
YjdmN2U2Li43OGU3NzM0ZTI2MzliN2U5ODhiZDk0NTliMDc2YmY3YmNlNGMwNzFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcApAQCAtMzQ3LDYgKzM0NywxNSBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBhcnJheTsKICAgICB9CisgICAgaWYgKEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU1JlbW90ZUZ1bmN0aW9u
Kj4odm0sIHZhbHVlKSkgeworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIs
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCsrLCBjb25zdHJ1
Y3RJbnRlcm5hbFByb3BlcnR5KGdsb2JhbE9iamVjdCwgInRhcmdldEZ1bmN0aW9uIl9zLCByZW1v
dGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU1ZhbHVlKCkpOworCisgICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CiAK
ICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNEeW5hbWljQ2FzdDxQcm94eU9iamVjdCo+
KHZtLCB2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggNDkxZWE0
NTI3ZmRmNjZiMmIxYmMzMWQ2OWY1NTVlN2U1ZmYzZTY3Ny4uYzBmN2U2YmUwYTY4MzA3ZDVhMDQw
NTc0NzU5Njg3ODA5YmFlMGQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAiSlNNb2R1bGVSZWNvcmQuaCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5RXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKQEAgLTU1NSwxMiArNTU2LDEzIEBAIENhdGNo
SW5mbzo6Q2F0Y2hJbmZvKGNvbnN0IFdhc206OkhhbmRsZXJJbmZvKiBoYW5kbGVyLCBjb25zdCBX
YXNtOjpDYWxsZWUqIGNhbGxlCiAKIGNsYXNzIFVud2luZEZ1bmN0b3IgewogcHVibGljOgotICAg
IFVud2luZEZ1bmN0b3IoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIGJvb2wgaXNUZXJt
aW5hdGlvbiwgSlNWYWx1ZSB0aHJvd25WYWx1ZSwgQ29kZUJsb2NrKiYgY29kZUJsb2NrLCBDYXRj
aEluZm8mIGhhbmRsZXIpCisgICAgVW53aW5kRnVuY3RvcihWTSYgdm0sIENhbGxGcmFtZSomIGNh
bGxGcmFtZSwgYm9vbCBpc1Rlcm1pbmF0aW9uLCBKU1ZhbHVlIHRocm93blZhbHVlLCBDb2RlQmxv
Y2sqJiBjb2RlQmxvY2ssIENhdGNoSW5mbyYgaGFuZGxlciwgYm9vbCYgc2VlblJlbW90ZUZ1Y25j
dGlvbikKICAgICAgICAgOiBtX3ZtKHZtKQogICAgICAgICAsIG1fY2FsbEZyYW1lKGNhbGxGcmFt
ZSkKICAgICAgICAgLCBtX2lzVGVybWluYXRpb24oaXNUZXJtaW5hdGlvbikKICAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCisgICAg
ICAgICwgbV9zZWVuUmVtb3RlRnVuY3Rpb24oc2VlblJlbW90ZUZ1Y25jdGlvbikKICAgICB7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgewpA
QCAtNjA5LDYgKzYxMSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICNlbmRpZgogCisgICAgICAg
IGlmICghbV9jYWxsRnJhbWUtPmlzV2FzbUZyYW1lKCkgJiYgIEpTQzo6aXNSZW1vdGVGdW5jdGlv
bihtX3ZtLCBtX2NhbGxGcmFtZS0+anNDYWxsZWUoKSkgJiYgIW1faXNUZXJtaW5hdGlvbikgewor
ICAgICAgICAgICAgLy8gQ29udGludWUgc2VhcmNoaW5nIGZvciBhIGhhbmRsZXIsIGJ1dCBtYXJr
IHRoYXQgYSBtYXJzaGFsbGluZyBmdW5jdGlvbiB3YXMgb24gdGhlIHN0YWNrIHNvIHRoYXQgd2Ug
Y2FuCisgICAgICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIGV4Y2VwdGlvbiBiZWZvcmUganVtcGlu
ZyB0byB0aGUgaGFuZGxlci4KKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8VW53aW5kRnVuY3Rvcio+
KHRoaXMpLT5tX3NlZW5SZW1vdGVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeURlYnVn
Z2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwpAQCAtNjU3LDggKzY2
NiwzOSBAQCBwcml2YXRlOgogICAgIGNvbnN0IFdhc206OlRhZyogbV93YXNtVGFnIHsgbnVsbHB0
ciB9OwogICAgIGJvb2wgbV9jYXRjaGFibGVGcm9tV2FzbSB7IGZhbHNlIH07CiAjZW5kaWYKKwor
ICAgIGJvb2wmIG1fc2VlblJlbW90ZUZ1bmN0aW9uOwogfTsKIAorLy8gUmVwbGFjZSBhbiBleGNl
cHRpb24gd2hpY2ggcGFzc2VzIGFjcm9zcyBhIG1hcnNoYWxsaW5nIGJvdW5kYXJ5IHdpdGggYSBU
eXBlRXJyb3IgZm9yIGl0cyBoYW5kbGVyJ3MgZ2xvYmFsIG9iamVjdC4KK3N0YXRpYyB2b2lkIHNh
bml0aXplUmVtb3RlRnVuY3Rpb25FeGNlcHRpb24oVk0mIHZtLCBDYWxsRnJhbWUqIGhhbmRsZXJD
YWxsRnJhbWUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQoreworICAgIERlZmVyVGVybWluYXRpb24g
ZGVmZXJTY29wZSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEFTU0VSVChleGNlcHRpb24pOworICAgIEFTU0VSVCghdm0uaXNUZXJtaW5hdGlvbkV4
Y2VwdGlvbihleGNlcHRpb24pKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBoYW5kbGVyQ2FsbEZyYW1lLT5qc0NhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlID0gZXhjZXB0aW9uLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKKyAgICAvLyBBdm9pZCB1c2VyLW9ic2VydmFibGUgVG9TdHJpbmcoKQor
ICAgIFN0cmluZyBleGNlcHRpb25TdHJpbmc7CisgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzUHJp
bWl0aXZlKCkpCisgICAgICAgIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RG
U3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgZWxzZSBpZiAoZXhjZXB0aW9uVmFsdWUuYXNDZWxs
KCktPmluaGVyaXRzPEVycm9ySW5zdGFuY2U+KHZtKSkKKyAgICAgICAgZXhjZXB0aW9uU3RyaW5n
ID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKS0+
c2FuaXRpemVkTWVzc2FnZVN0cmluZyhnbG9iYWxPYmplY3QpOworCisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7IC8vIFdlIG11c3Qgbm90IGhhdmUgZW50ZXJlZCBKUyBhdCB0aGlzIHBv
aW50CisKKyAgICBpZiAoZXhjZXB0aW9uU3RyaW5nLmxlbmd0aCgpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSk7Cit9CisKIE5FVkVSX0lOTElORSBDYXRjaEluZm8gSW50ZXJwcmV0ZXI6OnVud2luZChW
TSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwpAQCAtNjc4LDggKzcxOCwx
NSBAQCBORVZFUl9JTkxJTkUgQ2F0Y2hJbmZvIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBD
YWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2VwdAogCiAgICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2Vw
dGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2FyeS4KICAg
ICBDYXRjaEluZm8gY2F0Y2hJbmZvOwotICAgIFVud2luZEZ1bmN0b3IgZnVuY3Rvcih2bSwgY2Fs
bEZyYW1lLCB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbiksIGV4Y2VwdGlvblZh
bHVlLCBjb2RlQmxvY2ssIGNhdGNoSW5mbyk7CisgICAgYm9vbCBzZWVuUmVtb3RlRnVuY3Rpb24g
PSBmYWxzZTsKKyAgICBVbndpbmRGdW5jdG9yIGZ1bmN0b3Iodm0sIGNhbGxGcmFtZSwgdm0uaXNU
ZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pLCBleGNlcHRpb25WYWx1ZSwgY29kZUJsb2Nr
LCBjYXRjaEluZm8sIHNlZW5SZW1vdGVGdW5jdGlvbik7CiAgICAgU3RhY2tWaXNpdG9yOjp2aXNp
dDxTdGFja1Zpc2l0b3I6OlRlcm1pbmF0ZUlmVG9wRW50cnlGcmFtZUlzRW1wdHk+KGNhbGxGcmFt
ZSwgdm0sIGZ1bmN0b3IpOworCisgICAgaWYgKHNlZW5SZW1vdGVGdW5jdGlvbikgeworICAgICAg
ICBzYW5pdGl6ZVJlbW90ZUZ1bmN0aW9uRXhjZXB0aW9uKHZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlv
bik7CisgICAgICAgIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOyAvLyBjbGVhciBtX25l
ZWRFeGNlcHRpb25DaGVjaworICAgIH0KKwogICAgIGlmICh2bS5oYXNDaGVja3BvaW50T1NSU2lk
ZVN0YXRlKCkpCiAgICAgICAgIHZtLnBvcEFsbENoZWNrcG9pbnRPU1JTaWRlU3RhdGVVbnRpbChj
YWxsRnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBmNzA4Y2I3ZTFmYmI4MjYwY2U3NTc1ZDVkNjgxZWQ3NWEyM2UwZDNkLi5mNjgzYjBj
MWY4YWY4YzA2ZDFjZGM3Yzc5YTI4ZDE1NTFkMDNjMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEzNDUsNiArMTM0NSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcpOwogICAgIHZvaWQgaml0QXNzZXJ0VGFn
c0luUGxhY2UoKTsKICAgICB2b2lkIGppdEFzc2VydEFyZ3VtZW50Q291bnRTYW5lKCk7CisgICAg
aW5saW5lIHZvaWQgaml0QXNzZXJ0Tm9FeGNlcHRpb24oVk0mIHZtKSB7IGppdFJlbGVhc2VBc3Nl
cnROb0V4Y2VwdGlvbih2bSk7IH0KICNlbHNlCiAgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQ
UlJlZykgeyB9CiAgICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KQEAgLTEz
NTUsNiArMTM1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGppdEFzc2VydElzTnVsbChHUFJSZWcp
IHsgfQogICAgIHZvaWQgaml0QXNzZXJ0VGFnc0luUGxhY2UoKSB7IH0KICAgICB2b2lkIGppdEFz
c2VydEFyZ3VtZW50Q291bnRTYW5lKCkgeyB9CisgICAgdm9pZCBqaXRBc3NlcnROb0V4Y2VwdGlv
bihWTSYpIHsgfQogI2VuZGlmCiAKICAgICB2b2lkIGppdFJlbGVhc2VBc3NlcnROb0V4Y2VwdGlv
bihWTSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5k
ZXggOTA4ZmYwNDdhMWIxZWEzMmZhNjI3ZWM5MmJlNThlMGRjMjU1MTVkNC4uMjUwYjc3OWQ2MTQw
ZjM5NWQ3YzYwMmI0YTY0ZDBmYjBlYTQ1M2IzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgogI2lu
Y2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50
LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTExNSw2ICsxMTYsODcgQEAg
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
RnJvbVRodW5rLCB2b2lkLCAoSlNHbG8KICAgICBBU1NFUlQodm0udGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3cpOwogfQogCitzdGF0aWMgSlNWYWx1ZSBnZXRXcmFwcGVkVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHZhbHVlKTsKKworICAg
IGlmICh2YWx1ZS5pc0NhbGxhYmxlKHZtKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1JlbW90ZUZ1bmN0aW9uOjpjcmVhdGUodm0sIHRhcmdldEdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPih2YWx1ZS5hc0NlbGwoKSkpKTsKKworICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11
c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiogY2FsbGVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxlZSkpOwor
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IGNhbGxlZS0+dGFyZ2V0RnVuY3Rpb24oKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoZ2V0V3JhcHBlZFZhbHVlKGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xvYmFsT2JqZWN0LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlciwgRW5jb2RlZEpTVmFsdWUs
IChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkp
Cit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxlZS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBBU1NFUlQo
aXNSZW1vdGVGdW5jdGlvbih2bSwgY2FsbGVlKSk7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFs
dWU6OmVuY29kZShnZXRXcmFwcGVkVmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uVGhyb3dSZW1vdGVGdW5jdGlvbkV4Y2VwdGlvbiwgRW5jb2RlZEpTVmFs
dWUsIChKU1JlbW90ZUZ1bmN0aW9uKiBjYWxsZWUpKQoreworICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKGlzUmVtb3RlRnVuY3Rpb24odm0sIGNhbGxl
ZSkpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisKKyAgICAvLyBXZSBzaG91
bGQgb25seSBiZSBoZXJlIHdoZW4gInJldGhyb3dpbmciIGFuIGV4Y2VwdGlvbgorICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7CisKKyAgICBpZiAoVU5MSUtFTFkodm0uaXNUZXJtaW5hdGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKSkgeworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4
Y2VwdGlvbi0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworCisgICAgU3Ry
aW5nIGV4Y2VwdGlvblN0cmluZyA9IGV4Y2VwdGlvblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdCk7CisgICAgRXhjZXB0aW9uKiB0b1N0cmluZ0V4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgIGlmIChVTkxJS0VMWSh0b1N0cmluZ0V4Y2VwdGlvbiAmJiB2bS5pc1Rlcm1pbmF0
aW9uRXhjZXB0aW9uKHRvU3RyaW5nRXhjZXB0aW9uKSkpIHsKKyAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworCisgICAgaWYgKGV4Y2VwdGlvblN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXhjZXB0aW9uU3RyaW5nKTsK
KworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworfQor
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVGhyb3dJdGVyYXRvclJlc3VsdElz
Tm90T2JqZWN0LCB2b2lkLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAppbmRleCA0YjVkMDExZjkwNmEzMDMyZTJhNWI4NTBhM2EwYjlhNGM2ODM0
YmYzLi5kNWU5ZjVjNzA1YTU4OTM5MDcxMWJhZjczNzBiMDA0YjI2MWZkYjg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtNTIsNiArNTIsNyBAQCBjbGFz
cyBKU0Z1bmN0aW9uOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU0xleGljYWxFbnZp
cm9ubWVudDsKIGNsYXNzIEpTT2JqZWN0OworY2xhc3MgSlNSZW1vdGVGdW5jdGlvbjsKIGNsYXNz
IEpTU2NvcGU7CiBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIEpTVmFsdWU7CkBAIC0xNTUsNiArMTU2
LDkgQEAgSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Mb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lLCB2b2lkLAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25WTUhhbmRsZUV4Y2VwdGlvbiwgdm9pZCwgKFZNKikpOwogSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaywgdm9p
ZCwgKEpTR2xvYmFsT2JqZWN0KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25UaHJvd0l0ZXJhdG9yUmVzdWx0SXNOb3RPYmplY3QsIHZvaWQsIChKU0dsb2JhbE9iamVjdCop
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0V3JhcHBlZFZhbHVlRm9y
Q2FsbGVyLCBFbmNvZGVkSlNWYWx1ZSwgKEpTUmVtb3RlRnVuY3Rpb24qLCBFbmNvZGVkSlNWYWx1
ZSkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRXcmFwcGVkVmFsdWVG
b3JUYXJnZXQsIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiosIEVuY29kZWRKU1Zh
bHVlKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRocm93UmVtb3RlRnVu
Y3Rpb25FeGNlcHRpb24sIEVuY29kZWRKU1ZhbHVlLCAoSlNSZW1vdGVGdW5jdGlvbiopKTsKIAog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJv
ciwgdm9pZCwgKENvZGVCbG9jayopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2ssIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCopKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA0MTliNjk4ZWY4
M2M5NmZjYmQ2MGFiOTVmZDgxYzhjNjMxZGMzMWI5Li5mM2IyMjVkMDAxYjM4OWUzZTQwMjBmMTY5
YjdkODdkODA3YzhmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpJVFRodW5rcy5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24uaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oIgpAQCAtMTQyMSw2ICsxNDIyLDE5MiBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5kRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJiB2
bSkKICAgICAgICAgbGlua0J1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVu
ayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKIH0KIAorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiByZW1vdGVGdW5jdGlvbkNhbGxHZW5l
cmF0b3IoVk0mIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAgaml0LmVtaXRGdW5j
dGlvblByb2xvZ3VlKCk7CisKKyAgICAvLyBTZXQgdXAgb3VyIGNhbGwgZnJhbWUuCisgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworICAgIGppdC5zdG9y
ZTMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApLCBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworCisgICAgdW5zaWdu
ZWQgZXh0cmFTdGFja05lZWRlZCA9IDA7CisgICAgaWYgKHVuc2lnbmVkIHN0YWNrTWlzYWxpZ25t
ZW50ID0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICUgc3RhY2tBbGlnbm1lbnRCeXRlcygpKQor
ICAgICAgICBleHRyYVN0YWNrTmVlZGVkID0gc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gc3RhY2tN
aXNhbGlnbm1lbnQ7CisKKyAgICAvLyBXZSBuZWVkIHRvIGZvcndhcmQgYWxsIG9mIHRoZSBhcmd1
bWVudHMgdGhhdCB3ZSB3ZXJlIHBhc3NlZC4gV2UgYXJlbid0IGFsbG93ZWQgdG8gZG8gYSB0YWls
CisgICAgLy8gY2FsbCBoZXJlIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiBBdCBsZWFzdCBub3Qgc28g
bG9uZyBhcyB0aGUgZ2VuZXJpYyBwYXRoIGRvZXNuJ3QgZG8gYSB0YWlsCisgICAgLy8gY2FsbCwg
c2luY2UgdGhhdCB3b3VsZCBiZSB3YXkgdG9vIHdlaXJkLgorCisgICAgLy8gVGhlIGZvcm11bGEg
Zm9yIHRoZSBudW1iZXIgb2Ygc3RhY2sgYnl0ZXMgbmVlZGVkIGdpdmVuIHNvbWUgbnVtYmVyIG9m
IHBhcmFtZXRlcnMgKGluY2x1ZGluZworICAgIC8vIHRoaXMpIGlzOgorICAgIC8vCisgICAgLy8g
ICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgQ2FsbEZyYW1lSGVh
ZGVyU2l6ZSkgKiBzaXplb2YoUmVnaXN0ZXIpIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKQor
ICAgIC8vCisgICAgLy8gUHJvYmFibHkgd2Ugd2FudCB0byB3cml0ZSB0aGlzIGFzOgorICAgIC8v
CisgICAgLy8gICAgIHN0YWNrQWxpZ24oKG51bVBhcmFtcyArIG51bUZyYW1lTG9jYWxzICsgKENh
bGxGcmFtZUhlYWRlclNpemUgLSBDYWxsZXJGcmFtZUFuZFBDU2l6ZSkpICogc2l6ZW9mKFJlZ2lz
dGVyKSkKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1GcmFtZUxvY2FscyA9IDE7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGxvb3BJbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKDApOwor
CisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6
OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCBH
UFJJbmZvOjpyZWdUMSk7CisKKyAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgLSBDYWxsZXJGcmFtZUFuZFBDOjpz
aXplSW5SZWdpc3RlcnMgKyBudW1GcmFtZUxvY2FscyksIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CisgICAgaml0LmxzaGlmdDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0
LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBpZiAoZXh0cmFTdGFja05lZWRlZCkKKyAgICAgICAg
aml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2tOZWVkZWQpLCBH
UFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50IHJlZ1QxIGhhcyB0aGUgYWN0
dWFsIGFyZ3VtZW50IGNvdW50LCBhbmQgcmVnVDIgaGFzIHRoZSBhbW91bnQgb2Ygc3RhY2sgd2Ug
d2lsbCBuZWVkLgorICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCBzdGFjayBz
cGFjZS4KKworICAgIGppdC5uZWdQdHIoR1BSSW5mbzo6cmVnVDIpOworICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDIpOworICAg
IENDYWxsSGVscGVyczo6SnVtcCBoYXZlU3RhY2tTcGFjZSA9IGppdC5icmFuY2hQdHIoQ0NhbGxI
ZWxwZXJzOjpCZWxvd09yRXF1YWwsIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHZtLmFk
ZHJlc3NPZlNvZnRTdGFja0xpbWl0KCkpLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBUaHJv
dyBTdGFjayBPdmVyZmxvdyBleGNlcHRpb24KKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0JvdW5kRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVu
ayk+KEdQUkluZm86OnJlZ1QzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwor
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb248T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvckZyb21UaHVuaykp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIodm0pOworCisgICAgaGF2ZVN0YWNrU3BhY2UubGluaygmaml0KTsKKyAgICBqaXQu
bW92ZShHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBTZXQgYHRoaXNgIHRvIHVuZGVmaW5lZAorICAgIC8vIE5PVEU6IG5lZWRzIGNv
bmNlbnN1cyBpbiBUQzM5IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dy
ZWFsbS9pc3N1ZXMvMzI4KQorICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKTsKKyAgICBqaXQuc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworCisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKEdQUkluZm86
OnJlZ1Q0LCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyBCZWZvcmUgcHJvY2Vzc2luZyB0aGUg
YXJndW1lbnRzIGxvb3AsIGNoZWNrIHRoYXQgd2UgaGF2ZSBnZW5lcmF0ZWQgSklUIGNvZGUgZm9y
IGNhbGxpbmcKKyAgICAvLyB0byBhdm9pZCBwcm9jZXNzaW5nIHRoZSBsb29wIHR3aWNlIGluIHRo
ZSBzbG93IGNhc2UuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5vQ29kZTsKKyAgICB7CisgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNS
ZW1vdGVGdW5jdGlvbjo6b2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpKSwgR1BSSW5mbzo6cmVnVDIp
OworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEoKSksIEdQUkluZm86
OnJlZ1QyKTsKKyAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNGdW5jdGlvbjo6cmFyZURhdGFUYWcpKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QyLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSwgR1BSSW5mbzo6cmVn
VDIpOworICAgICAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCisgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmVnVDIsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJp
dHlDaGVja0ZvcihDb2RlRm9yQ2FsbCkpLAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOwor
ICAgICAgICBub0NvZGUgPSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICB9CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2Vw
dGlvbkNoZWNrczsKKworICAgIC8vIEFyZ3VtZW50IHByb2Nlc3NpbmcgbG9vcDoKKyAgICAvLyBG
b3IgZWFjaCBhcmd1bWVudCAob3JkZXIgc2hvdWxkIG5vdCBiZSBvYnNlcnZhYmxlKToKKyAgICAv
LyAgICAgaWYgdGhlIHZhbHVlIGlzIGEgUHJpbWl0aXZlLCBjb3B5IGl0IGludG8gdGhlIG5ldyBj
YWxsIGZyYW1lIGFyZ3VtZW50cywgb3RoZXJ3aXNlCisgICAgLy8gICAgIHBlcmZvcm0gd3JhcHBp
bmcgbG9naWMuIElmIHRoZSB3cmFwcGluZyBsb2dpYyByZXN1bHRzIGluIGEgbmV3IEpTUmVtb3Rl
RnVuY3Rpb24sCisgICAgLy8gICAgIGNvcHkgaXQgaW50byB0aGUgbmV3IGNhbGwgZnJhbWUncyBh
cmd1bWVudHMsIG90aGVyd2lzZSBpdCBtdXN0IGhhdmUgdGhyb3duIGEgVHlwZUVycm9yLgorICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0LmJyYW5jaFN1YjMyKENDYWxsSGVscGVyczo6
WmVybywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgbG9vcCA9IGppdC5sYWJlbCgpOworICAg
ICAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoMCkpLmluZGV4ZWRCeShHUFJJbmZvOjpyZWdUMSwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0KSwgdmFsdWVSZWdzKTsKKworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHZhbHVlSXNQcmltaXRpdmU7CisgICAgICAgIHZhbHVlSXNQcmltaXRp
dmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgICAgIHZhbHVl
SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJZk5vdE9iamVjdCh2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKSk7CisKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBqaXQuYWRk
cmVzc0Zvcihsb29wSW5kZXgpKTsKKworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0V3Jh
cHBlZFZhbHVlRm9yVGFyZ2V0KSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVyYXRpb25QdHJU
YWcpOworCisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25HZXRX
cmFwcGVkVmFsdWVGb3JUYXJnZXQpPihHUFJJbmZvOjpyZWdUMCwgdmFsdWVSZWdzKTsKKyAgICAg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICAgICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgT3BlcmF0aW9uUHRyVGFnKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tz
LmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkpOworCisgICAgICAgIGppdC5zZXR1
cFJlc3VsdHModmFsdWVSZWdzKTsKKyAgICAgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAg
ICAgICAgaml0LmxvYWRQdHIoaml0LmFkZHJlc3NGb3IobG9vcEluZGV4KSwgR1BSSW5mbzo6cmVn
VDEpOworCisgICAgICAgIHZhbHVlSXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICAgICAgaml0
LnN0b3JlVmFsdWUodmFsdWVSZWdzLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgw
KS5pbmRleGVkQnkoR1BSSW5mbzo6cmVnVDEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCkpOwor
ICAgICAgICBqaXQuYnJhbmNoU3ViMzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDEpLmxpbmtUbyhsb29wLCAmaml0KTsK
KworICAgICAgICBkb25lLmxpbmsoJmppdCk7CisgICAgfQorCisgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU1JlbW90ZUZ1bmN0aW9uOjpvZmZz
ZXRPZlRhcmdldEZ1bmN0aW9uKCkpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnN0b3JlQ2Vs
bChHUFJJbmZvOjpyZWdUMiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZU9yUmFyZURhdGEo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBqaXQuYnJhbmNo
VGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOworICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgRnVuY3Rpb25SYXJlRGF0YTo6
b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICBoYXNFeGVjdXRhYmxlLmxpbmsoJmppdCk7CisKKyAgICBqaXQubG9hZFB0
cigKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgR1BSSW5mbzo6
cmVnVDAsIEV4ZWN1dGFibGVCYXNlOjpvZmZzZXRPZkpJVENvZGVXaXRoQXJpdHlDaGVja0ZvcihD
b2RlRm9yQ2FsbCkpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAvLyBCYXNlZCBv
biB0aGUgY2hlY2sgYWJvdmUsIHdlIHNob3VsZCBiZSBnb29kIHdpdGggdGhpcy4gT24gQVJNNjQs
IGVtaXRQb2ludGVyVmFsaWRhdGlvbiB3aWxsIGRvIHRoaXMuCisjaWYgQVNTRVJUX0VOQUJMRUQg
JiYgIUNQVShBUk02NEUpCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgY2hlY2tO
b3ROdWxsID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZv
OjpyZWdUMCk7CisgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7
CisgICAgICAgIGNoZWNrTm90TnVsbC5saW5rKCZqaXQpOworICAgIH0KKyNlbmRpZgorCisgICAg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDAsIEpTRW50cnlQdHJUYWcp
OworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBKU0VudHJ5UHRyVGFnKTsKKworICAgIC8v
IFdyYXAgcmV0dXJuIHZhbHVlCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKKyNlbmRpZgorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCByZXN1bHRJc1By
aW1pdGl2ZTsKKyAgICByZXN1bHRJc1ByaW1pdGl2ZS5hcHBlbmQoaml0LmJyYW5jaElmTm90Q2Vs
bChyZXN1bHRSZWdzKSk7CisgICAgcmVzdWx0SXNQcmltaXRpdmUuYXBwZW5kKGppdC5icmFuY2hJ
Zk5vdE9iamVjdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvbjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsK
KyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBPcGVy
YXRpb25QdHJUYWcpOworCisgICAgaml0LmxvYWRDZWxsKENDYWxsSGVscGVyczo6YWRkcmVzc0Zv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgaml0LnNldHVw
QXJndW1lbnRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFdyYXBwZWRWYWx1ZUZvckNhbGxlcik+KEdQ
UkluZm86OnJlZ1QyLCByZXN1bHRSZWdzKTsKKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24o
dm0pOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CisgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbih2bSkp
OworCisgICAgcmVzdWx0SXNQcmltaXRpdmUubGluaygmaml0KTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBleGNlcHRpb25DaGVja3MubGlu
aygmaml0KTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0udG9wRW50cnlGcmFtZSk7CisgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBl
KG9wZXJhdGlvbkxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJnZtKSk7CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uPE9wZXJhdGlvblB0
clRhZz4ob3BlcmF0aW9uTG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdH
UFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIw
LCBPcGVyYXRpb25QdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9w
ZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSk7CisK
KyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZm
ZXI6OlByb2ZpbGU6OlJlbW90ZUZ1bmN0aW9uVGh1bmspOworICAgIGxpbmtCdWZmZXIubGluayhu
b0NvZGUsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5qaXRTdHVicy0+Y3Rp
TmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKHZtKSkpOworICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKAorICAgICAgICBsaW5rQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIlNwZWNpYWxpemVk
IHRodW5rIGZvciByZW1vdGUgZnVuY3Rpb24gY2FsbHMiKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggYTlmZWVlYTkyNGFlMDA3OGQ4NDUxZTE3MmM0YzQ5NDVk
ZjFkNWVlMS4uNTg5ZTcwMDQ2NDNhMjI1MzcyNWFmMmJiOGYwZmYwNWQzMzFlN2E0YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCkBAIC04Miw2ICs4Miw4
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gdHJ1bmNUaHVua0dlbmVy
YXRvcihWTSYpOwogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGJvdW5k
RnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gcmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNJik7CisKICNpZiBFTkFC
TEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAppbmRleCBkZjE4MGZiYWQxYzc5MWVjNzNjZjZiOWNhM2Y0YjQ0MjhjNDZiYTg0Li5mNGI5ODk3
YzdkMzFkMDgyZmM1NDY3ZGZhOGRjZWI1YzE1NTEzNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApA
QCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNGaW5h
bGl6YXRpb25SZWdpc3RyeS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJK
U0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlLmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYXRpdmVTdGRGdW5jdGlvbi5oIgpAQCAtMzY2
LDYgKzM2Nyw3IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyRXZhbFNjcmlwdCk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihmdW5jdGlv
bkRvbGxhckdDKTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9s
bGFyQ2xlYXJLZXB0T2JqZWN0cyk7CiBzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihm
dW5jdGlvbkRvbGxhckdsb2JhbE9iamVjdEZvcik7CitzdGF0aWMgSlNDX0RFQ0xBUkVfSE9TVF9G
VU5DVElPTihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24pOwogc3RhdGljIEpTQ19ERUNM
QVJFX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0KTsKIHN0YXRpYyBKU0Nf
REVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRSZWNlaXZlQnJvYWRjYXN0
KTsKIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGZ1bmN0aW9uRG9sbGFyQWdlbnRS
ZXBvcnQpOwpAQCAtNjQ5LDYgKzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCBkb2xsYXIsICJnYyIsIGZ1bmN0aW9uRG9sbGFyR0MsIDAsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwg
ZG9sbGFyLCAiY2xlYXJLZXB0T2JqZWN0cyIsIGZ1bmN0aW9uRG9sbGFyQ2xlYXJLZXB0T2JqZWN0
cywgMCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSk7CiAg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJnbG9iYWxPYmplY3RGb3IiLCBmdW5jdGlv
bkRvbGxhckdsb2JhbE9iamVjdEZvciwgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5
QXR0cmlidXRlOjpOb25lKSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCBkb2xsYXIsICJpc1Jl
bW90ZUZ1bmN0aW9uIiwgZnVuY3Rpb25Eb2xsYXJJc1JlbW90ZUZ1bmN0aW9uLCAxLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUpKTsKICAgICAgICAgCiAgICAg
ICAgIGRvbGxhci0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiZ2xv
YmFsIiksIGdsb2JhbFRoaXMoKSk7CiAgICAgICAgIGRvbGxhci0+cHV0RGlyZWN0Q3VzdG9tQWNj
ZXNzb3Iodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJJc0hUTUxEREEiKSwKQEAgLTIw
ODQsNiArMjA4NywxOCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJH
bG9iYWxPYmplY3RGb3IsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihmdW5jdGlvbkRvbGxhcklzUmVtb3RlRnVuY3Rpb24sIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRl
RXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGVub3VnaCBhcmd1bWVudHMiX3MpKSk7CisKKyAgICBK
U1ZhbHVlIGFyZyA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oaXNSZW1vdGVGdW5jdGlvbih2bSwgYXJnKSkpOworfQorCiBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oZnVuY3Rpb25Eb2xsYXJBZ2VudFN0YXJ0LCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggNjc0MjA2NTIzZDFjNGJjZGVlOGM1MDBhMDcxMzE2
MTVjMjQxZTU4YS4uNzM4ZTdmNGUxMjdlMTdkZWYyZjQ1OWM5OGJhMGE3NzI1MDU2NTk4YiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKQEAg
LTE2Myw4ICsxNjMsOSBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkTWVzc2FnZVN0
cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICBtZXNzYWdlVmFsdWUg
PSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbWVzc2Fn
ZVZhbHVlKQorICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICFtZXNzYWdlVmFsdWUuaXNQcmltaXRp
dmUoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgbWVzc2FnZVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCkpOwogfQogCkBAIC0xOTQs
NyArMTk1LDcgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZE5hbWVTdHJpbmcoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB9CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKIAotICAgIGlmICghbmFtZVZhbHVlKQorICAgIGlmICghbmFtZVZhbHVl
IHx8ICFuYW1lVmFsdWUuaXNQcmltaXRpdmUoKSkKICAgICAgICAgcmV0dXJuICJFcnJvciJfczsK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAppbmRleCBiMzFjZmMxYzkwNWU5Njg0YTlhNzgxZTQ3ZGYxNmEw
ZmFhYzgzYzM2Li4xZDUyYWJmNTg1YzJiYWJlZDZjODRiNTk5NzRiYmE5NjczZGEwZmE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogCiAgICAgICAgIEpTQ2VsbCogY2FsbGVl
ID0gdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCk7CiAKLSAgICAgICAgaWYgKGNhbGxlZSAmJiAo
Y2FsbGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVl
LT50eXBlKCkgPT0gUHJveHlPYmplY3RUeXBlKSkKKyAgICAgICAgaWYgKGNhbGxlZSAmJiAoY2Fs
bGVlLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KGNhbGxlZS0+dm0oKSkgfHwgY2FsbGVlLT5p
bmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPihjYWxsZWUtPnZtKCkpIHx8IGNhbGxlZS0+dHlwZSgp
ID09IFByb3h5T2JqZWN0VHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKIAogICAgICAgICBpZiAoIW1faGFzRm91bmRGcmFtZSAmJiBjYWxsZWUgIT0gbV90
YXJnZXRDYWxsZWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uY3BwCmluZGV4IDc2NzMxNThjNjRmMjU2ZTFiNDI5YTRjZmNmNThmOTFlYWZi
ZGQwNGIuLmQ1YmM0OTQwOTU3ZTU1MmJmNjRhNTBhNTkwMmMxMTBjMTUyNmRiOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkBA
IC0xODksNiArMTg5LDEwIEBAIEpTR2xvYmFsT2JqZWN0KiBnZXRGdW5jdGlvblJlYWxtKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QpCiAgICAgICAgICAgICBv
YmplY3QgPSBqc0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4ob2JqZWN0KS0+dGFyZ2V0RnVuY3Rpb24o
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKSkgeworICAgICAgICAgICAgb2JqZWN0ID0g
anNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihvYmplY3QpLT50YXJnZXRGdW5jdGlvbigpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBpZiAob2JqZWN0LT50eXBl
KCkgPT0gUHJveHlPYmplY3RUeXBlKSB7CiAgICAgICAgICAgICBhdXRvKiBwcm94eSA9IGpzQ2Fz
dDxQcm94eU9iamVjdCo+KG9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50cmluc2ljLmNwcAppbmRleCBmZjVmMTkyNDY5MGY2MmY0OGM1MTM2NWI1MmU2YzU2M2I0ZTYy
ODlkLi5iODE3NTliY2E3ZWE4ZDU0MmJjOTJkMTFmZjI4N2I1MGQ4MmYzNzZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5jcHAKQEAgLTIwNSw2ICsyMDUsOCBA
QCBjb25zdCBjaGFyKiBpbnRyaW5zaWNOYW1lKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAg
IHJldHVybiAiSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYyI7CiAgICAgY2FzZSBCb3VuZEZ1bmN0
aW9uQ2FsbEludHJpbnNpYzoKICAgICAgICAgcmV0dXJuICJCb3VuZEZ1bmN0aW9uQ2FsbEludHJp
bnNpYyI7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiAiUmVtb3RlRnVuY3Rpb25DYWxsSW50cmluc2ljIjsKICAgICBjYXNlIEpTTWFwR2V0SW50
cmluc2ljOgogICAgICAgICByZXR1cm4gIkpTTWFwR2V0SW50cmluc2ljIjsKICAgICBjYXNlIEpT
TWFwSGFzSW50cmluc2ljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMu
aAppbmRleCA4ZTY4ZTdlNzRmYjc4Y2RiZDMzMjRjZmJmMGEyNWVkNmQyMGQ2ZDU4Li40YWUzNjUx
YjU3NWUyMzE1OGJmNjg5NjBiNmRjY2MwOWE1N2JhZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaApAQCAtMTE4LDYgKzExOCw3IEBAIGVudW0gSW50cmluc2lj
IDogdWludDhfdCB7CiAgICAgVHlwZWRBcnJheUVudHJpZXNJbnRyaW5zaWMsCiAgICAgSXNUeXBl
ZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZEZ1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAg
ICBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCiAgICAgSlNNYXBHZXRJbnRyaW5zaWMsCiAg
ICAgSlNNYXBIYXNJbnRyaW5zaWMsCiAgICAgSlNNYXBTZXRJbnRyaW5zaWMsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCmluZGV4IDY4YzBlNWJjMmVhMDRiMzAyZGM0M2QyNDhh
YjUxODhmNGIzZTMwZmYuLmE2OTkzMTU5MDk5Y2NjMWI3Mzk2YTk3YzU4ZmQ0ZWUzMWE1YzE4MmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC05OSw2ICs5OSw3IEBA
IHN0cnVjdCBKU1R5cGVSYW5nZSB7CiAgICAgbWFjcm8oSlNTeW1ib2xUYWJsZU9iamVjdCwgSlNU
eXBlOjpHbG9iYWxPYmplY3RUeXBlLCBKU1R5cGU6Ok1vZHVsZUVudmlyb25tZW50VHlwZSkgXAog
ICAgIG1hY3JvKEpTU2NvcGUsIEpTVHlwZTo6R2xvYmFsT2JqZWN0VHlwZSwgSlNUeXBlOjpXaXRo
U2NvcGVUeXBlKSBcCiAgICAgbWFjcm8oU3RyaW5nT2JqZWN0LCBKU1R5cGU6OlN0cmluZ09iamVj
dFR5cGUsIEpTVHlwZTo6RGVyaXZlZFN0cmluZ09iamVjdFR5cGUpIFwKKyAgICBtYWNybyhTaGFk
b3dSZWFsbU9iamVjdCwgSlNUeXBlOjpTaGFkb3dSZWFsbVR5cGUsIEpTVHlwZTo6U2hhZG93UmVh
bG1UeXBlKSBcCiAKIAogLy8gRm9yd2FyZCBkZWNsYXJlIHRoZSBjbGFzc2VzIGJlY2F1c2UgdGhl
eSBtYXkgbm90IGFscmVhZHkgZXhpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCmluZGV4IDhhNjBhOWY5ZThmNjY5NDJiNWI4NWM1ZGE1YWI1MTY2YTU4
ODM0ZDAuLmQ5MzdiMzZiMzA0NTc0NDBjZWE4YmVhNTE4ZDE5ODE5YTY0YTlkNWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNSZW1vdGVGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTVG9XYXNtSUNDYWxsZWUuaCIKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtMTIzLDggKzEyNCw4
IEBAIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zCiAgICAgQVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+
Z2V0Q29uc3RydWN0RGF0YSA9PSAmSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0RGF0YSk7CiAgICAg
QVNTRVJUKG1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEgPT0gJkpTRnVuY3Rpb246OmdldENh
bGxEYXRhKTsKIAotICAgIC8vIEpTQm91bmRGdW5jdGlvbiBpbnN0YW5jZXMgdXNlIGZpbmlzaENy
ZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVpciBuYW1lIHN0cmlu
ZyAvIGxlbmd0aC4KLSAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4o
dm0pKTsKKyAgICAvLyBKU0JvdW5kRnVuY3Rpb24vSlNSZW1vdGVGdW5jdGlvbiBpbnN0YW5jZXMg
dXNlIGZpbmlzaENyZWF0aW9uKFZNJikgb3ZlcmxvYWQgYW5kIGxhemlseSBhbGxvY2F0ZSB0aGVp
ciBuYW1lIHN0cmluZyAvIGxlbmd0aC4KKyAgICBBU1NFUlQoIXRoaXMtPmluaGVyaXRzPEpTQm91
bmRGdW5jdGlvbj4odm0pICYmICF0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkp
OwogCiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KGxlbmd0aCksIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CiAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQpAQCAtMjUyLDYgKzI1MywxMiBA
QCBKU1N0cmluZyogSlNGdW5jdGlvbjo6dG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICAgICAgSlNWYWx1ZSBzdHJpbmcgPSBqc01ha2VOb250cml2aWFsU3RyaW5nKGds
b2JhbE9iamVjdCwgImZ1bmN0aW9uICIsIGZ1bmN0aW9uLT5uYW1lU3RyaW5nKCksICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHN0cmluZyk7CisgICAgfSBlbHNl
IGlmIChpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgSlNSZW1vdGVG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHRoaXMpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEpTVmFs
dWUgc3RyaW5nID0ganNNYWtlTm9udHJpdmlhbFN0cmluZyhnbG9iYWxPYmplY3QsICJmdW5jdGlv
biAiLCBmdW5jdGlvbi0+bmFtZVN0cmluZygpLCAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0i
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
IHJldHVybiBhc1N0cmluZyhzdHJpbmcpOwogICAgIH0KIAogICAgIGlmIChpc0hvc3RGdW5jdGlv
bigpKQpAQCAtNTcxLDYgKzU3OCw4IEBAIHZvaWQgSlNGdW5jdGlvbjo6cmVpZnlMZW5ndGgoVk0m
IHZtKQogICAgIGRvdWJsZSBsZW5ndGggPSAwOwogICAgIGlmICh0aGlzLT5pbmhlcml0czxKU0Jv
dW5kRnVuY3Rpb24+KHZtKSkKICAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTQm91bmRGdW5jdGlv
bio+KHRoaXMpLT5sZW5ndGgodm0pOworICAgIGVsc2UgaWYgKHRoaXMtPmluaGVyaXRzPEpTUmVt
b3RlRnVuY3Rpb24+KHZtKSkKKyAgICAgICAgbGVuZ3RoID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rp
b24qPih0aGlzKS0+bGVuZ3RoKHZtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKCFpc0hv
c3RGdW5jdGlvbigpKTsKICAgICAgICAgbGVuZ3RoID0ganNFeGVjdXRhYmxlKCktPnBhcmFtZXRl
ckNvdW50KCk7CkBAIC02MjQsNyArNjMzLDcgQEAgdm9pZCBKU0Z1bmN0aW9uOjpyZWlmeU5hbWUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmcgbmFtZSkKIAogSlNG
dW5jdGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5l
ZWRlZChWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgJiYgIXRo
aXMtPmluaGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpc0hvc3RPckJ1aWx0
aW5GdW5jdGlvbigpICYmICF0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSAmJiAh
dGhpcy0+aW5oZXJpdHM8SlNSZW1vdGVGdW5jdGlvbj4odm0pKQogICAgICAgICByZXR1cm4gUHJv
cGVydHlTdGF0dXM6OkVhZ2VyOwogICAgIFByb3BlcnR5U3RhdHVzIGxhenlMZW5ndGggPSByZWlm
eUxhenlMZW5ndGhJZk5lZWRlZCh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAg
IGlmIChpc0xhenkobGF6eUxlbmd0aCkpCkBAIC02MzgsNyArNjQ3LDcgQEAgSlNGdW5jdGlvbjo6
UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5UHJvcGVydHlJZk5lZWRlZChWTSYg
dm0sIEpTR2xvYmEKIEpTRnVuY3Rpb246OlByb3BlcnR5U3RhdHVzIEpTRnVuY3Rpb246OnJlaWZ5
TGF6eVByb3BlcnR5Rm9ySG9zdE9yQnVpbHRpbklmTmVlZGVkKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NF
UlQoaXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSk7Ci0gICAgaWYgKGlzQnVpbHRpbkZ1bmN0aW9u
KCkgfHwgdGhpcy0+aW5oZXJpdHM8SlNCb3VuZEZ1bmN0aW9uPih2bSkpIHsKKyAgICBpZiAoaXNC
dWlsdGluRnVuY3Rpb24oKSB8fCB0aGlzLT5pbmhlcml0czxKU0JvdW5kRnVuY3Rpb24+KHZtKSB8
fCB0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKICAgICAgICAgUHJvcGVy
dHlTdGF0dXMgbGF6eUxlbmd0aCA9IHJlaWZ5TGF6eUxlbmd0aElmTmVlZGVkKHZtLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmIChpc0xhenkobGF6eUxlbmd0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gbGF6eUxlbmd0aDsKQEAgLTY5NSw2ICs3MDQsMTQgQEAgSlNGdW5j
dGlvbjo6UHJvcGVydHlTdGF0dXMgSlNGdW5jdGlvbjo6cmVpZnlMYXp5Qm91bmROYW1lSWZOZWVk
ZWQoVk0mIHZtLCBKU0dsb2IKICAgICAgICAgdW5zaWduZWQgaW5pdGlhbEF0dHJpYnV0ZXMgPSBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHk7
CiAgICAgICAgIHJhcmVEYXRhLT5zZXRIYXNSZWlmaWVkTmFtZSgpOwogICAgICAgICBwdXREaXJl
Y3Qodm0sIG5hbWVJZGVudCwgc3RyaW5nLCBpbml0aWFsQXR0cmlidXRlcyk7CisgICAgfSBlbHNl
IGlmICh0aGlzLT5pbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgRnVu
Y3Rpb25SYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5lbnN1cmVSYXJlRGF0YSh2bSk7CisgICAg
ICAgIEpTU3RyaW5nKiBuYW1lID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPih0aGlzKS0+bmFt
ZU1heUJlTnVsbCgpOworICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICBuYW1lID0ganNF
bXB0eVN0cmluZyh2bSk7CisgICAgICAgIHVuc2lnbmVkIGluaXRpYWxBdHRyaWJ1dGVzID0gUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5Owor
ICAgICAgICByYXJlRGF0YS0+c2V0SGFzUmVpZmllZE5hbWUoKTsKKyAgICAgICAgcHV0RGlyZWN0
KHZtLCBuYW1lSWRlbnQsIG5hbWUsIGluaXRpYWxBdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgcmV0
dXJuIFByb3BlcnR5U3RhdHVzOjpSZWlmaWVkOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCmluZGV4IDg0NjBkNDJjMDdhMjFmMGEyNjNmZjhlODFiMmM1MDJh
OWZjZmQ4ZmMuLmMzMThkNWUxMTgzNzNlMGE4YzU4ZWUwMzU5ZWU5YzI3ZTBlMjQ3YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKQEAgLTE1MCw2ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0OwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdDsKICAg
ICBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1Jl
bW90ZUZ1bmN0aW9uKFZNJikgY29uc3Q7CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZShKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgbmFtZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oCmluZGV4IDI1ZDYwOTQzMGJiN2RlYjVlY2Iw
YWQ5NzIxMmU4OGY5ODdhNWRiMDguLmE4ODZjZDc1ZWZhODYyNmVhMTc0YzdiODQ4ODhkNzEzMzNl
MDYxOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b25JbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJs
ZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKKyNpbmNsdWRlICJKU1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTmF0aXZlRXhlY3V0
YWJsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTc4LDYgKzc5LDExIEBAIGlubGluZSBib29s
IEpTRnVuY3Rpb246OmlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9uKCkgY29uc3QKICAgICByZXR1
cm4gIWlzSG9zdEZ1bmN0aW9uKCkgJiYganNFeGVjdXRhYmxlKCktPmlzQ2xhc3NDb25zdHJ1Y3Rv
ckZ1bmN0aW9uKCk7CiB9CiAKK2lubGluZSBib29sIEpTRnVuY3Rpb246OmlzUmVtb3RlRnVuY3Rp
b24oVk0mIHZtKSBjb25zdAoreworICAgIHJldHVybiBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9u
Pih2bSk7Cit9CisKIGlubGluZSBUYWdnZWROYXRpdmVGdW5jdGlvbiBKU0Z1bmN0aW9uOjpuYXRp
dmVGdW5jdGlvbigpCiB7CiAgICAgQVNTRVJUKGlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwpA
QCAtOTgsNiArMTA0LDExIEBAIGlubGluZSBib29sIGlzSG9zdEZ1bmN0aW9uKEpTVmFsdWUgdmFs
dWUsIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKQogICAgIHJldHVybiBmdW5j
dGlvbi0+bmF0aXZlRnVuY3Rpb24oKSA9PSBuYXRpdmVGdW5jdGlvbjsKIH0KIAoraW5saW5lIGJv
b2wgaXNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlLmluaGVyaXRzPEpTUmVtb3RlRnVuY3Rpb24+KHZtKTsKK30KKwogaW5saW5lIGJvb2wg
SlNGdW5jdGlvbjo6aGFzUmVpZmllZExlbmd0aCgpIGNvbnN0CiB7CiAgICAgaWYgKEZ1bmN0aW9u
UmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKSkKQEAgLTExNCw2ICsxMjUsOCBA
QCBpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjpoYXNSZWlmaWVkTmFtZSgpIGNvbnN0CiAKIGlubGlu
ZSBib29sIEpTRnVuY3Rpb246OmNhbkFzc3VtZU5hbWVBbmRMZW5ndGhBcmVPcmlnaW5hbChWTSYp
CiB7CisgICAgLy8gSlNSZW1vdGVGdW5jdGlvbiBuZXZlciBoYXMgYSAnbmFtZScgZmllbGQsIHJl
dHVybiB0cnVlCisgICAgLy8gdG8gYXZvaWQgYWxsb2NhdGluZyBhIEZ1bmN0aW9uUmFyZURhdGEu
CiAgICAgaWYgKGlzSG9zdEZ1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBG
dW5jdGlvblJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CkBAIC0xNTksNyAr
MTcyLDcgQEAgaW5saW5lIEZ1bmN0aW9uUmFyZURhdGEqIEpTRnVuY3Rpb246OmVuc3VyZVJhcmVE
YXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoSlNHbG9iYWwKIAogaW5saW5lIEpTU3RyaW5nKiBKU0Z1
bmN0aW9uOjphc1N0cmluZ0NvbmN1cnJlbnRseShWTSYgdm0pIGNvbnN0CiB7Ci0gICAgaWYgKGlu
aGVyaXRzPEpTQm91bmRGdW5jdGlvbj4odm0pKQorICAgIGlmIChpbmhlcml0czxKU0JvdW5kRnVu
Y3Rpb24+KHZtKSB8fCBpbmhlcml0czxKU1JlbW90ZUZ1bmN0aW9uPih2bSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmIChpc0hvc3RGdW5jdGlvbigpKQogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUoKSktPmFzU3RyaW5nQ29u
Y3VycmVudGx5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKaW5kZXggMjhhMjFkYTY2ZTBkZjI4NjZlOThhNjkzNmJlN2Q3MTExOGQxZDFj
ZS4uYTkwNzY3OTg4ZWJjNmM3NzljZmYzOGNmNzYzMzRkZTNjOGNiZTcwZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQwLDYg
KzE0MCw3IEBACiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1Byb21pc2VQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJK
U1JlbW90ZUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJKU1NldEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdJdGVyYXRvci5oIgpAQCAtNzcwLDYgKzc3MSwx
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgW10gKGNvbnN0
IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKICAgICAgICAgICAgIGluaXQuc2V0KEpT
TmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBp
bml0Lm93bmVyLT5tX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgICAgIH0pOworICAg
IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmUuaW5pdExhdGVyKAorICAgICAgICBbXSAoY29uc3Qg
SW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNS
ZW1vdGVGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQub3duZXIsIGluaXQu
b3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKKyAgICAgICAgfSk7CiAgICAgSlNG
dW5jdGlvbiogY2FsbEZ1bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1
bmN0aW9uID0gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiBoYXNJbnN0YW5jZVN5bWJvbEZ1bmN0
aW9uID0gbnVsbHB0cjsKQEAgLTE1MzEsNiArMTUzNiwxNCBAQCBjYXBpdGFsTmFtZSAjIyBDb25z
dHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFs
TmFtZQogICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQudm0sIGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KGluaXQub3duZXIpLCAwLCBTdHJpbmcoKSwgY3JlYXRlUHJp
dmF0ZVN5bWJvbCkpOwogICAgICAgICB9KTsKIAorICAgIC8vIFNoYWRvd1JlYWxtcworICAgIG1f
bGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6
OmNyZWF0ZVJlbW90ZUZ1bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxK
U0NlbGw+JiBpbml0KSB7CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUo
aW5pdC52bSwganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygp
LCBjcmVhdGVSZW1vdGVGdW5jdGlvbikpOworICAgICAgICB9KTsKKyAgICBtX2xpbmtUaW1lQ29u
c3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojppc1JlbW90ZUZ1
bmN0aW9uKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7
CisgICAgICAgICAgICBpbml0LnNldChKU0Z1bmN0aW9uOjpjcmVhdGUoaW5pdC52bSwganNDYXN0
PEpTR2xvYmFsT2JqZWN0Kj4oaW5pdC5vd25lciksIDAsIFN0cmluZygpLCBpc1JlbW90ZUZ1bmN0
aW9uKSk7CisgICAgICAgIH0pOworCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIC8vIFdl
YkFzc2VtYmx5IFN0cmVhbWluZyBBUEkKICAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50Ojp3ZWJBc3NlbWJseUNvbXBpbGVTdHJlYW1p
bmdJbnRlcm5hbCldLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5p
dCkgewpAQCAtMjI1OSw2ICsyMjcyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbkltcGwoSlNDZWxsKiBjZWxsLCBWaXNpdG9yJiB2aXNpdG9yKQogICAgIHRoaXNPYmplY3Qt
Pm1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7CiAgICAgdGhp
c09iamVjdC0+bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRo
aXNPYmplY3QtPm1fbmF0aXZlU3RkRnVuY3Rpb25TdHJ1Y3R1cmUudmlzaXQodmlzaXRvcik7Cisg
ICAgdGhpc09iamVjdC0+bV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3NoYWRvd1JlYWxtT2JqZWN0U3RydWN0
dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9nZW5lcmF0b3JGdW5jdGlvblN0cnVj
dHVyZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAppbmRleCAxYjFkOWI1NTNjNzQ3MmJlYmI2NzQ4OWQ5MmM3N2EzZDkzNjk2ZDJhLi4zYWRmYTM4
ZThhMzI0OWE0NThiY2IxNzQ1YjE4MjY1M2RmNWM4Yjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAgLTQyMSw2ICs0MjEsNyBAQCBwdWJs
aWM6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9mdW5jdGlvbk5hbWVPZmZzZXQ7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9zaGFkb3dSZWFsbU9iamVjdFN0cnVjdHVyZTsKICAgICBXcml0
ZUJhcnJpZXJTdHJ1Y3R1cmVJRCBtX3JlZ0V4cFN0cnVjdHVyZTsKKwogICAgIFdyaXRlQmFycmll
clN0cnVjdHVyZUlEIG1fYXN5bmNGdW5jdGlvblN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXJT
dHJ1Y3R1cmVJRCBtX2FzeW5jR2VuZXJhdG9yRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyU3RydWN0dXJlSUQgbV9nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZTsKQEAgLTQzNyw2
ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fY3VzdG9tR2V0dGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5
PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fY3VzdG9tU2V0dGVyRnVuY3Rpb25TdHJ1Y3R1
cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fbmF0aXZl
U3RkRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmU+IG1fcmVtb3RlRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPEFz
eW5jRnVuY3Rpb25Qcm90b3R5cGU+IG1fYXN5bmNGdW5jdGlvblByb3RvdHlwZTsKICAgICBXcml0
ZUJhcnJpZXI8QXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZT4gbV9hc3luY0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlPiBtX2l0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlOwpAQCAtODcyLDYgKzg3NCw3
IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlXaXRoSW5kaWNlc1N0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5V2l0aEluZGljZXNTdHJ1Y3R1cmUuZ2V0
KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNJbmRpY2VzQXJyYXlTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIHJlbW90ZUZ1bmN0aW9uU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW1vdGVGdW5jdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1
cmUqIG1vZHVsZVJlY29yZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kdWxlUmVjb3Jk
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogbW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1bGVOYW1lc3BhY2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eU9iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPYmplY3RTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJmYzhhYWIzMTRmYTQ4Y2U3NzRhMDdmNjAwNjllZDgyZDA3YzJhZmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0
aW9uLmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBJZ2Fs
aWEgUy5MLgorICogQXV0aG9yOiBDYWl0bGluIFBvdHRlciA8Y2FpdHBAaWdhbGlhLmNvbT4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUmVtb3RlRnVuY3Rpb24u
aCIKKworI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dSZWFsbU9iamVjdC5oIgorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Jl
bW90ZUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNSZW1vdGVGdW5jdGlvbikgfTsKKwor
SlNSZW1vdGVGdW5jdGlvbjo6SlNSZW1vdGVGdW5jdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCisgICAgOiBCYXNlKHZtLCBleGVj
dXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICAsIG1fdGFyZ2V0RnVuY3Rpb24o
dm0sIHRoaXMsIHRhcmdldEZ1bmN0aW9uKQorICAgICwgbV9sZW5ndGgoMC4wKQoreworfQorCitz
dGF0aWMgSlNWYWx1ZSB3cmFwVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmUo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgaWYgKHZhbHVlLmlzQ2FsbGFibGUodm0p
KSB7CisgICAgICAgIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4odmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gSlNSZW1vdGVGdW5jdGlvbjo6
Y3JlYXRlKHZtLCB0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZSgpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgd3JhcEFy
Z3VtZW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJn
ZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9i
amVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1zIG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0
aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUgd3JhcFJldHVyblZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHdyYXBWYWx1ZShn
bG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHRocm93VHlw
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJ2YWx1ZSBwYXNzaW5nIGJldHdlZW4gcmVhbG1z
IG11c3QgYmUgY2FsbGFibGUgb3IgcHJpbWl0aXZlIik7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQpOworfQorCitKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVu
Y3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTUmVtb3Rl
RnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjYWxs
RnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1vdGVGdW5jdGlvbi0+aXNSZW1vdGVG
dW5jdGlvbih2bSkpOworICAgIEpTRnVuY3Rpb24qIHRhcmdldEZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihyZW1vdGVGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSk7CisgICAgSlNHbG9i
YWxPYmplY3QqIHRhcmdldEdsb2JhbE9iamVjdCA9IHRhcmdldEZ1bmN0aW9uLT5nbG9iYWxPYmpl
Y3QoKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAg
SlNWYWx1ZSB3cmFwcGVkVmFsdWUgPSB3cmFwQXJndW1lbnQoZ2xvYmFsT2JqZWN0LCB0YXJnZXRH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhcmdzLmFwcGVuZCh3cmFw
cGVkVmFsdWUpOworICAgIH0KKyAgICBpZiAoVU5MSUtFTFkoYXJncy5oYXNPdmVyZmxvd2VkKCkp
KSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFi
bGUgPSB0YXJnZXRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgIGlmIChleGVjdXRhYmxlLT5o
YXNKSVRDb2RlRm9yQ2FsbCgpKSB7CisgICAgICAgIC8vIEZvcmNlIHRoZSBleGVjdXRhYmxlIHRv
IGNhY2hlIGl0cyBhcml0eSBlbnRyeXBvaW50LgorICAgICAgICBleGVjdXRhYmxlLT5lbnRyeXBv
aW50Rm9yKENvZGVGb3JDYWxsLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfQorCisgICAgYXV0byBj
YWxsRGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNh
bGxEYXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0g
Y2FsbCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRl
ZmluZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5W
YWx1ZShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0NfREVG
SU5FX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxsR2VuZXJpYywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIHJlbW90ZUZ1bmN0aW9uID0ganNDYXN0PEpT
UmVtb3RlRnVuY3Rpb24qPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOworICAgIEFTU0VSVChyZW1v
dGVGdW5jdGlvbi0+aXNSZW1vdGVGdW5jdGlvbih2bSkpOworICAgIEpTT2JqZWN0KiB0YXJnZXRG
dW5jdGlvbiA9IHJlbW90ZUZ1bmN0aW9uLT50YXJnZXRGdW5jdGlvbigpOworICAgIEpTR2xvYmFs
T2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QgPSB0YXJnZXRGdW5jdGlvbi0+Z2xvYmFsT2JqZWN0
KCk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIEpT
VmFsdWUgd3JhcHBlZFZhbHVlID0gd3JhcEFyZ3VtZW50KGdsb2JhbE9iamVjdCwgdGFyZ2V0R2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgYXJn
cy5hcHBlbmQod3JhcHBlZFZhbHVlKTsKKyAgICB9CisgICAgaWYgKFVOTElLRUxZKGFyZ3MuaGFz
T3ZlcmZsb3dlZCgpKSkgeworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBjYWxs
RGF0YSA9IGdldENhbGxEYXRhKHZtLCB0YXJnZXRGdW5jdGlvbik7CisgICAgQVNTRVJUKGNhbGxE
YXRhLnR5cGUgIT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOworICAgIGF1dG8gcmVzdWx0ID0gY2Fs
bCh0YXJnZXRHbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uLCBjYWxsRGF0YSwganNVbmRlZmlu
ZWQoKSwgYXJncyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHdyYXBSZXR1cm5WYWx1
ZShnbG9iYWxPYmplY3QsIHRhcmdldEdsb2JhbE9iamVjdCwgcmVzdWx0KSkpOworfQorCitKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oaXNSZW1vdGVGdW5jdGlvbiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAgICBBU1NFUlQoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPT0gMSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFt
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oSlNDOjppc1JlbW90ZUZ1bmN0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpKSk7
Cit9CisKK0pTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjcmVhdGVSZW1vdGVGdW5jdGlvbiwgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID09IDIpOworICAgIEpTVmFsdWUgdGFyZ2V0RnVuY3Rpb24gPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOworICAgIEFTU0VSVCh0YXJnZXRGdW5jdGlvbi5pc0NhbGxhYmxlKHZtKSk7
CisKKyAgICBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJn
ZXRGdW5jdGlvbi5hc0NlbGwoKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGRlc3RpbmF0aW9uR2xv
YmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OworICAgIGlmICghY2FsbEZyYW1lLT51bmNoZWNrZWRB
cmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGlmIChhdXRvIHNoYWRv
d1JlYWxtID0ganNEeW5hbWljQ2FzdDxTaGFkb3dSZWFsbU9iamVjdCo+KHZtLCBjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKSkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uR2xvYmFsT2Jq
ZWN0ID0gc2hhZG93UmVhbG0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbkdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNh
bGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIH0KKworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTUmVtb3RlRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZGVzdGluYXRpb25HbG9iYWxPYmplY3QsIHRhcmdldENhbGxhYmxlKSkpOworfQorCitpbmxp
bmUgU3RydWN0dXJlKiBnZXRSZW1vdGVGdW5jdGlvblN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZ2xvYmFsT2JqZWN0LWF3
YXJlIHN0cnVjdHVyZSBjYWNoaW5nCisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+cmVtb3RlRnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKK30KKworSlNSZW1vdGVGdW5jdGlvbiogSlNSZW1vdGVGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3Qq
IHRhcmdldENhbGxhYmxlKQoreworICAgIEFTU0VSVCh0YXJnZXRDYWxsYWJsZSAmJiB0YXJnZXRD
YWxsYWJsZS0+aXNDYWxsYWJsZSh2bSkpOworICAgIGlmIChhdXRvIHJlbW90ZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNSZW1vdGVGdW5jdGlvbio+KHZtLCB0YXJnZXRDYWxsYWJsZSkpIHsKKyAgICAgICAg
dGFyZ2V0Q2FsbGFibGUgPSByZW1vdGUtPnRhcmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VS
VCghSlNDOjppc1JlbW90ZUZ1bmN0aW9uKHZtLCB0YXJnZXRDYWxsYWJsZSkpOworICAgIH0KKwor
ICAgIGJvb2wgaXNKU0Z1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih0YXJnZXRDYWxsYWJsZSk7Cisg
ICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldFJlbW90ZUZ1bmN0aW9uKGlz
SlNGdW5jdGlvbik7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZW1vdGVGdW5jdGlv
blN0cnVjdHVyZShnbG9iYWxPYmplY3QpOworICAgIEpTUmVtb3RlRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNSZW1vdGVGdW5jdGlvbj4odm0pKSBKU1Jl
bW90ZUZ1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFy
Z2V0Q2FsbGFibGUpOworCisgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gZnVuY3Rpb247Cit9CisKK3ZvaWQgSlNSZW1vdGVGdW5jdGlvbjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOworCisgICAgLy8gMy4xLjI6IENvcHlOYW1lQW5kTGVuZ3Ro
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKworICAgIFByb3Bl
cnR5U2xvdCBzbG90KG1fdGFyZ2V0RnVuY3Rpb24uZ2V0KCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOworICAgIGJvb2wgdGFyZ2V0SGFzTGVuZ3RoID0gbV90YXJnZXRG
dW5jdGlvbi0+Z2V0T3duUHJvcGVydHlTbG90SW5saW5lKGdsb2JhbE9iamVjdCwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBzbG90KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2
b2lkKCkpOworCisgICAgaWYgKHRhcmdldEhhc0xlbmd0aCkgeworICAgICAgICBKU1ZhbHVlIHRh
cmdldExlbmd0aCA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwor
ICAgICAgICBkb3VibGUgdGFyZ2V0TGVuZ3RoQXNJbnQgPSB0YXJnZXRMZW5ndGgudG9JbnRlZ2Vy
T3JJbmZpbml0eShnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOworICAgICAgICBtX2xlbmd0aCA9IHN0ZDo6bWF4KHRhcmdldExlbmd0aEFz
SW50LCAwLjApOworICAgIH0KKworICAgIEpTVmFsdWUgdGFyZ2V0TmFtZSA9IEpTVmFsdWUobV90
YXJnZXRGdW5jdGlvbi5nZXQoKSkuZ2V0KGdsb2JhbE9iamVjdCwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICBpZiAo
dGFyZ2V0TmFtZS5pc1N0cmluZygpKQorICAgICAgICBtX25hbWVNYXlCZU51bGwuc2V0KHZtLCB0
aGlzLCBhc1N0cmluZyh0YXJnZXROYW1lKSk7CisKKyAgICBzY29wZS5yZWxlYXNlKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+Cit2b2lkIEpTUmVtb3RlRnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW5JbXBsKEpTQ2VsbCogY2VsbCwgVmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1Jl
bW90ZUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3RlRnVuY3Rpb24qPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fdGFyZ2V0RnVuY3Rpb24pOworICAgIHZpc2l0b3IuYXBw
ZW5kKHRoaXNPYmplY3QtPm1fbmFtZU1heUJlTnVsbCk7Cit9CisKK0RFRklORV9WSVNJVF9DSElM
RFJFTihKU1JlbW90ZUZ1bmN0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1JlbW90ZUZ1bmN0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OThmOGFmZTJiNjFjNTJjMzdkNWYwZjczMTFkMzZiMDMyNDNiNzVmOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUmVtb3RlRnVuY3Rpb24uaApAQCAt
MCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKiBB
dXRob3I6IENhaXRsaW4gUG90dGVyIDxjYWl0cEBpZ2FsaWEuY29tPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkF1eGlsaWFyeUJhcnJpZXIuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgPHd0Zi9UYWdnZWRBcnJheVN0b3JhZ2VQdHIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04ocmVtb3RlRnVuY3Rpb25DYWxs
Rm9ySlNGdW5jdGlvbik7CitKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKHJlbW90ZUZ1bmN0aW9u
Q2FsbEdlbmVyaWMpOworSlNDX0RFQ0xBUkVfSE9TVF9GVU5DVElPTihpc1JlbW90ZUZ1bmN0aW9u
KTsKK0pTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oY3JlYXRlUmVtb3RlRnVuY3Rpb24pOworCisv
LyBKU1JlbW90ZUZ1bmN0aW9uIGNyZWF0ZXMgYSBicmlkZ2UgYmV0d2VlbiBpdHMgbmF0aXZlIFJl
YWxtIGFuZCBhIHJlbW90ZSBvbmUuCisvLyBXaGVuIGludm9rZWQsIGFyZ3VtZW50cyBhcmUgd3Jh
cHBlZCB0byBwcmV2ZW50IGxlYWtpbmcgaW5mb3JtYXRpb24gYWNyb3NzIHRoZSByZWFsbSBib3Vu
ZGFyeS4KKy8vIFRoZSByZXR1cm4gdmFsdWUgYW5kIGFueSBhYnJ1cHQgY29tcGxldGlvbnMgYXJl
IGFsc28gZmlsdGVyZWQuCitjbGFzcyBKU1JlbW90ZUZ1bmN0aW9uIGZpbmFsIDogcHVibGljIEpT
RnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Z1bmN0aW9uOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBt
b2RlPgorICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZtLnJlbW90ZUZ1bmN0aW9uU3BhY2U8bW9kZT4oKTsKKyAgICB9CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNSZW1vdGVGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogdGFyZ2V0Q2FsbGFibGUpOworCisgICAgSlNP
YmplY3QqIHRhcmdldEZ1bmN0aW9uKCkgeyByZXR1cm4gbV90YXJnZXRGdW5jdGlvbi5nZXQoKTsg
fQorICAgIEpTR2xvYmFsT2JqZWN0KiB0YXJnZXRHbG9iYWxPYmplY3QoKSB7IHJldHVybiB0YXJn
ZXRGdW5jdGlvbigpLT5nbG9iYWxPYmplY3QoKTsgfQorICAgIEpTU3RyaW5nKiBuYW1lTWF5QmVO
dWxsKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lTWF5QmVOdWxsLmdldCgpOyB9CisgICAgY29uc3Qg
U3RyaW5nJiBuYW1lU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghbV9uYW1lTWF5QmVOdWxs
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIEFTU0VSVCghbV9u
YW1lTWF5QmVOdWxsLT5pc1JvcGUoKSk7CisgICAgICAgIGJvb2wgYWxsb2NhdGlvbkFsbG93ZWQg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZU1heUJlTnVsbC0+dHJ5R2V0VmFsdWUoYWxs
b2NhdGlvbkFsbG93ZWQpOworICAgIH0KKworICAgIGRvdWJsZSBsZW5ndGgoVk0mKSBjb25zdCB7
IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
SlNGdW5jdGlvblR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsgCisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYXJnZXRGdW5jdGlvbigpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1JlbW90ZUZ1bmN0aW9uLCBtX3RhcmdldEZ1bmN0aW9uKTsgfQorCisg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworcHJpdmF0ZToKKyAgICBKU1JlbW90ZUZ1bmN0aW9u
KFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNP
YmplY3QqIHRhcmdldENhbGxhYmxlKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOworCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX3RhcmdldEZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lTWF5
QmVOdWxsOworICAgIGRvdWJsZSBtX2xlbmd0aDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAppbmRleCA4NDczMDkxMjRhNWY4MTgzOGQ5OTU3NWVlMDM5MWE5NWNlMzVk
ZTg5Li42MjAxMTg2YmIxNzFlNjgwOGJkMmFjZDc4ZWNlNGM1OWQzYjM3YmQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC02MzIsNiArNjMyLDggQEAgc3RhdGljIFRodW5r
R2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMp
CiAgICAgICAgIHJldHVybiByYW5kb21UaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIEJvdW5kRnVu
Y3Rpb25DYWxsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gYm91bmRGdW5jdGlvbkNhbGxHZW5l
cmF0b3I7CisgICAgY2FzZSBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWM6CisgICAgICAgIHJl
dHVybiByZW1vdGVGdW5jdGlvbkNhbGxHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNzA5LDYgKzcxMSwyNSBAQCBOYXRpdmVFeGVjdXRh
YmxlKiBWTTo6Z2V0Qm91bmRGdW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25z
dHJ1Y3QpCiAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG1fZmFzdEJvdW5kRXhlY3V0YWJsZSk7CiB9
CiAKK05hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRSZW1vdGVGdW5jdGlvbihib29sIGlzSlNGdW5j
dGlvbikKK3sKKyAgICBib29sIHNsb3dDYXNlID0gIWlzSlNGdW5jdGlvbjsKKyAgICBhdXRvIGdl
dE9yQ3JlYXRlID0gWyZdIChXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+JiBzbG90KSAtPiBOYXRpdmVF
eGVjdXRhYmxlKiB7CisgICAgICAgIGlmIChhdXRvKiBjYWNoZWQgPSBzbG90LmdldCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlZDsKKyAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogcmVzdWx0
ID0gZ2V0SG9zdEZ1bmN0aW9uKAorICAgICAgICAgICAgc2xvd0Nhc2UgPyByZW1vdGVGdW5jdGlv
bkNhbGxHZW5lcmljIDogcmVtb3RlRnVuY3Rpb25DYWxsRm9ySlNGdW5jdGlvbiwKKyAgICAgICAg
ICAgIHNsb3dDYXNlID8gTm9JbnRyaW5zaWMgOiBSZW1vdGVGdW5jdGlvbkNhbGxJbnRyaW5zaWMs
CisgICAgICAgICAgICBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgU3Ry
aW5nKCkpOworICAgICAgICBzbG90ID0gV2VhazxOYXRpdmVFeGVjdXRhYmxlPihyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH07CisKKyAgICBpZiAoc2xvd0Nhc2UpCisgICAg
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX3Nsb3dSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
ICAgIHJldHVybiBnZXRPckNyZWF0ZShtX2Zhc3RSZW1vdGVGdW5jdGlvbkV4ZWN1dGFibGUpOwor
fQorCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gVk06OmdldENUSUludGVy
bmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICNpZiBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggMTZlMzBm
ZmI5NDgxMGRkZDEyZGE4Y2NjNzE0NjE5MDYyZDAyZDQwNC4uZDUyODY0ZTlhMDYzOGY3MWFhMDZl
ZTQzZDBiMzIzMDU0OWU2YjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC00
MzIsNiArNDMyLDcgQEAgcHVibGljOgogICAgIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVIobmF0aXZlU3RkRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9E
RUZJTkVfTUVNQkVSKHByb3h5T2JqZWN0U3BhY2UpCiAgICAgRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUihwcm94eVJldm9rZVNwYWNlKQorICAgIERZTkFNSUNfSVNPX1NVQlNQQUNF
X0RFRklORV9NRU1CRVIocmVtb3RlRnVuY3Rpb25TcGFjZSkKICAgICBEWU5BTUlDX0lTT19TVUJT
UEFDRV9ERUZJTkVfTUVNQkVSKHNjb3BlZEFyZ3VtZW50c1RhYmxlU3BhY2UpCiAgICAgRFlOQU1J
Q19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUihzY3JpcHRGZXRjaFBhcmFtZXRlcnNTcGFjZSkK
ICAgICBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSKHNjcmlwdEZldGNoZXJTcGFj
ZSkKQEAgLTU3Miw2ICs1NzMsOSBAQCBwdWJsaWM6CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxl
PiBtX3Nsb3dCb3VuZEV4ZWN1dGFibGU7CiAgICAgV2VhazxOYXRpdmVFeGVjdXRhYmxlPiBtX3Ns
b3dDYW5Db25zdHJ1Y3RCb3VuZEV4ZWN1dGFibGU7CiAKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+IG1fZmFzdFJlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKyAgICBXZWFrPE5hdGl2ZUV4ZWN1
dGFibGU+IG1fc2xvd1JlbW90ZUZ1bmN0aW9uRXhlY3V0YWJsZTsKKwogICAgIFJlZjxEZWZlcnJl
ZFdvcmtUaW1lcj4gZGVmZXJyZWRXb3JrVGltZXI7CiAKICAgICBKU0NlbGwqIGN1cnJlbnRseURl
c3RydWN0aW5nQ2FsbGJhY2tPYmplY3Q7CkBAIC02ODYsNiArNjkwLDcgQEAgcHVibGljOgogICAg
IE5hdGl2ZUV4ZWN1dGFibGUqIGdldEhvc3RGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiwgSW50cmlu
c2ljLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgRE9NSklUOjpTaWduYXR1cmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZ2V0Qm91bmRG
dW5jdGlvbihib29sIGlzSlNGdW5jdGlvbiwgYm9vbCBjYW5Db25zdHJ1Y3QpOworICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGdldFJlbW90ZUZ1bmN0aW9uKGJvb2wgaXNKU0Z1bmN0aW9uKTsKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBnZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gZ2V0Q1RJTGlua0NhbGwoKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDE0MWRmMWUxMDUz
MWEzMTg0NDQxYTcwNDI5ZmMwYzZlNWUyNjkzNC4uZmFlNDlmMjdlNTQ5OTY3MzQ4NTY0OGRjMGQ5
MjExZTI0YTQ5OTgyMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMi0wMi0wOCAgQ2FpdGxpbiBQb3R0ZXIg
IDxjYWl0cEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtKU0NdIG1vdmUgZnVuY3Rpb24gd3JhcHBp
bmcgbG9naWMgdG8gYSBuZXcgRnVuY3Rpb24gdHlwZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MzgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVz
dWtlIFN1enVraS4KKworICAgICAgICBBZGRzIGEgbmV3IGZpbGUgdGVzdGluZyBDb3B5TmFtZUFu
ZExlbmd0aCBzdHVmZiBpbiB0aGUgU2hhZG93UmVhbG0gcHJvcG9zYWwsCisgICAgICAgIGFuZCBm
aXggdXAgYXNzZXJ0aW9ucyBhYm91dCB0aGlzIGluIHNoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwor
CisgICAgICAgICogc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qczoKKyAgICAgICAgKiBz
dHJlc3Mvc2hhZG93LXJlYWxtLXJlbW90ZS1mdW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFtZS5q
czogQWRkZWQuCisKIDIwMjItMDItMDYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2FzbV0gcmVmLm51bGwgY2hlY2sgc2hvdWxkIGJlIGRvbmUgZmlyc3Qg
aW4gQjMgY2FsbF9yZWYKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1l
dmFsdWF0ZS5qcyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1ldmFsdWF0ZS5qcwppbmRl
eCBiMDFkYTFmNTdhOGY5NWI4M2RiMWJlOWNjYmZlODlhZmVhOGZmOGNlLi44MzYxOTIwZTZhZDNk
MDE4Mjc4ZjVmZjE5OGM2YTc3OThjYjQ4OTU4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9z
aGFkb3ctcmVhbG0tZXZhbHVhdGUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxt
LWV2YWx1YXRlLmpzCkBAIC04MCw4ICs4MCwxNyBAQCBmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5j
LCBlcnJvclR5cGUsIGFzc2VydGlvbkZuKSB7CiAgICAgc2hvdWxkQmUoT2JqZWN0LmdldFByb3Rv
dHlwZU9mKHdyYXBwZWRJbnZva2VBbmRBZGQpLCBGdW5jdGlvbi5wcm90b3R5cGUpOwogCiAgICAg
Ly8gbmFtZSBhbmQgbGVuZ3RoIHByb3BlcnRpZXMgZnJvbSB3cmFwcGVkIGZ1bmN0aW9uIGFyZSBh
YnNlbnQKLSAgICBzaG91bGRCZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdyYXBw
ZWRJbnZva2VBbmRBZGQsICJsZW5ndGgiKSwgdW5kZWZpbmVkKTsKLSAgICBzaG91bGRCZShPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdyYXBwZWRJbnZva2VBbmRBZGQsICJuYW1lIiks
IHVuZGVmaW5lZCk7CisgICAgbGV0IGxlbmd0aERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHdyYXBwZWRJbnZva2VBbmRBZGQsICJsZW5ndGgiKTsKKyAgICBzaG91bGRCZShs
ZW5ndGhEZXNjLnZhbHVlLCAyKTsKKyAgICBzaG91bGRCZShsZW5ndGhEZXNjLndyaXRhYmxlLCBm
YWxzZSk7CisgICAgc2hvdWxkQmUobGVuZ3RoRGVzYy5lbnVtZXJhYmxlLCBmYWxzZSk7CisgICAg
c2hvdWxkQmUobGVuZ3RoRGVzYy5jb25maWd1cmFibGUsIHRydWUpOworCisgICAgbGV0IG5hbWVE
ZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3cmFwcGVkSW52b2tlQW5kQWRk
LCAibmFtZSIpOworICAgIHNob3VsZEJlKG5hbWVEZXNjLnZhbHVlLCAiaW52b2tlQW5kQWRkIik7
CisgICAgc2hvdWxkQmUobmFtZURlc2Mud3JpdGFibGUsIGZhbHNlKTsKKyAgICBzaG91bGRCZShu
YW1lRGVzYy5lbnVtZXJhYmxlLCBmYWxzZSk7CisgICAgc2hvdWxkQmUobmFtZURlc2MuY29uZmln
dXJhYmxlLCB0cnVlKTsKIAogICAgIC8vIGNhbid0IHBhc3Mgb2JqZWN0cyBpbnRvIGEgc2hhZG93
IHJlYWxtLXdyYXBwZWQgZnVuY3Rpb24KICAgICBsZXQgbnVtYmVyT2JqID0geyB2YWx1ZU9mKCkg
eyByZXR1cm4gLTEgfSB9OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc2hhZG93LXJlYWxt
LXJlbW90ZS1mdW5jdGlvbi1jb3B5LWxlbmd0aC1hbmQtbmFtZS5qcyBiL0pTVGVzdHMvc3RyZXNz
L3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24tY29weS1sZW5ndGgtYW5kLW5hbWUuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmVjZTEyZDgwMzcxNWUyNmQ1ZDAyZjQ4NzczNTM2MTcyNjkwNzAxOAotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3NoYWRvdy1yZWFsbS1yZW1vdGUtZnVuY3Rpb24t
Y29weS1sZW5ndGgtYW5kLW5hbWUuanMKQEAgLTAsMCArMSw0MTQgQEAKKy8vQCByZXF1aXJlT3B0
aW9ucygiLS11c2VTaGFkb3dSZWFsbT0xIikKKworZnVuY3Rpb24gc3VtbWFyaXplRWxlbWVudChl
bGVtZW50KSB7CisgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gIm9iamVjdCIpIHsKKyAgICBpZiAo
ZWxlbWVudCA9PT0gbnVsbCkKKyAgICAgIHJldHVybiAibnVsbCI7CisgICAgaWYgKEFycmF5Lmlz
QXJyYXkoZWxlbWVudCkpCisgICAgICByZXR1cm4gc3VtbWFyaXplQXJyYXkoZWxlbWVudCwgMCk7
CisgIH0KKyAgbGV0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnQpOworICBpZiAocmVz
dWx0Lmxlbmd0aCA+IDIwKSB7CisgICAgbGV0IGMgPSByZXN1bHRbMF07CisgICAgaWYgKGMgPT09
ICJ7IikKKyAgICAgIGMgPSAifSI7CisgICAgcmVzdWx0ID0gYCR7cmVzdWx0LnN1YnN0cigwLCAx
NSl9Li4uJHtjfWA7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gc3VtbWFy
aXplQXJyYXkoYXJyYXksIGluZGV4LCBzaG93SW5kZXgpIHsKKworICBsZXQgcHJlZml4ID0gaW5k
ZXggPT09IDAgPyAiIiA6IGAuLi4ke3N1bW1hcml6ZUVsZW1lbnQoYXJyYXlbaW5kZXggLSAxXSl9
LCBgOworICBsZXQgc3VmZml4ID0gaW5kZXggKyAxIDwgYXJyYXkubGVuZ3RoID8gYCwgJHtzdW1t
YXJpemVFbGVtZW50KGFycmF5W2luZGV4ICsgMV0pfS4uLmAgOiAiIjsKKworICBpZiAocHJlZml4
Lmxlbmd0aCA+IDIwKQorICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIocHJlZml4Lmxlbmd0aCAt
IDIwKTsKKyAgaWYgKHN1ZmZpeC5sZW5ndGggPiAyMCkKKyAgICBzdWZmaXggPSBzdWZmaXguc3Vi
c3RyKDAsIDIwKTsKKyAgZW5kZXIgPSBzaG93SW5kZXggPyBgIChhdCBpbmRleCAke2luZGV4fSlg
IDogIiI7CisgIHJldHVybiBgWyR7cHJlZml4fSR7SlNPTi5zdHJpbmdpZnkoYXJyYXlbaW5kZXhd
KX0ke3N1ZmZpeH1dJHtlbmRlcn1gOworfQorZnVuY3Rpb24gc2hvdWxkQmVBcnJheUVxdWFsKGFj
dHVhbCwgZXhwZWN0ZWQpIHsKKyAgaWYgKChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSAmJiAhQXJy
YXkuaXNBcnJheShhY3R1YWwpKSkKKyAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICR7SlNP
Ti5zdHJpbmdpZnl9IGJ1dCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbCl9YCk7CisKKyAg
dmFyIGk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyArK2kpIHsKKyAg
ICBsZXQgZSA9IGV4cGVjdGVkW2ldOworICAgIGxldCBhID0gYWN0dWFsW2ldOworICAgIGlmIChl
ID09PSBhKQorICAgICAgY29udGludWU7CisgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpCisgICAg
ICBzaG91bGRCZUFycmF5RXF1YWwoYSwgZSk7CisgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3Rl
ZCAke3N1bW1hcml6ZUFycmF5KGV4cGVjdGVkLCBpLCB0cnVlKX0gYnV0IGZvdW5kICR7c3VtbWFy
aXplQXJyYXkoYWN0dWFsLCBpKX1gKQorICB9Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVh
bCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShhY3R1YWwpIHx8IEFycmF5Lmlz
QXJyYXkoZXhwZWN0ZWQpKQorICAgICAgcmV0dXJuIHNob3VsZEJlQXJyYXlFcXVhbChhY3R1YWws
IGV4cGVjdGVkKTsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfWApOworfQor
CitmdW5jdGlvbiBzaG91bGRIYXZlRGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcikgeworICBsZXQgYWN0dWFsID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmplY3QsIHByb3BlcnR5TmFtZSk7CisgIGxldCBvcmRlciA9IE9iamVjdC5rZXlzKGRlc2Ny
aXB0b3IpLnNvcnQoKTsKKyAgZm9yIChsZXQga2V5IG9mIG9yZGVyKSB7CisgICAgbGV0IHZhbHVl
ID0gZGVzY3JpcHRvcltrZXldOworICAgIGlmIChbInVuZGVmaW5lZCIsICJib29sZWFuIiwgIm51
bWJlciIsICJzdHJpbmciLCAic3ltYm9sIiwgImJpZ2ludCJdLmluY2x1ZGVzKHR5cGVvZiB2YWx1
ZSkgfHwgdmFsdWUgPT09IG51bGwpIHsKKyAgICAgIGlmIChhY3R1YWxba2V5XSAhPT0gdmFsdWUp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVFbGVtZW50KGFj
dHVhbCl9J3MgJyR7a2V5fScgdG8gYmUgJHtzdW1tYXJpemVFbGVtZW50KHZhbHVlKX0sIGJ1dCBm
b3VuZCAke3N1bW1hcml6ZUVsZW1lbnQoYWN0dWFsW2tleV0pfWApOworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7CisgICAgICBpZiAoYWN0dWFsW2tleV0gIT09
IHZhbHVlICYmIFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhhY3R1YWxba2V5XSkpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtzdW1tYXJpemVFbGVtZW50KGFjdHVhbCl9J3Mg
JyR7a2V5fScgdG8gYmUgJHtzdW1tYXJpemVFbGVtZW50KHZhbHVlKX0sIGJ1dCBmb3VuZCAke3N1
bW1hcml6ZUVsZW1lbnQoYWN0dWFsW2tleV0pfWApOworICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBzaG91bGRUaHJvdyhvcCwgZXJyb3JDb25zdHJ1Y3RvciwgZGVzYykgeworICAgIHRyeSB7Cisg
ICAgICAgIG9wKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoIShlIGluc3RhbmNl
b2YgZXJyb3JDb25zdHJ1Y3RvcikpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdGhy
ZXcgJHtlfSwgYnV0IHNob3VsZCBoYXZlIHRocm93biAke2Vycm9yQ29uc3RydWN0b3IubmFtZX1g
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRocm93IG5ldyBFcnJv
cihgRXhwZWN0ZWQgJHtkZXNjIHx8ICdvcGVyYXRpb24nfSB0byB0aHJvdyAke2Vycm9yQ29uc3Ry
dWN0b3IubmFtZX0sIGJ1dCBubyBleGNlcHRpb24gdGhyb3duYCk7Cit9CisKK2xldCByZWFsbSA9
IG5ldyBTaGFkb3dSZWFsbTsKKworbGV0IGYgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAg
bGV0IHRlc3QxID0gZnVuY3Rpb24oYSwgYiwgYykgeworICB9OworICByZXR1cm4gdGVzdDE7Cit9
KSgpYCk7CisKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVlOiAz
LAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFi
bGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2YWx1
ZTogInRlc3QxIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAg
Y29uZmlndXJhYmxlOiB0cnVlLAorfSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsK
KyAgZnVuY3Rpb24gdGVzdDIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwg
biwgbywgcCkgeworICB9CisgIHJldHVybiB0ZXN0MjsKK30pKClgKTsKKworc2hvdWxkSGF2ZURl
c2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDE2LAorICB3cml0YWJsZTogZmFsc2Us
CisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3Vs
ZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2YWx1ZTogInRlc3QyIiwKKyAgd3JpdGFi
bGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAor
fSk7CisKK2YgPSByZWFsbS5ldmFsdWF0ZShgKCgpID0+IHsKKyAgbGV0IGYgPSBmdW5jdGlvbigp
IHsKKyAgfQorICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgImxlbmd0aCIsIHsKKyAgICB2YWx1
ZTogLUluZmluaXR5LAorICAgIHdyaXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHko
ZiwgIm5hbWUiLCB7CisgICAgdmFsdWU6ICIyNyIsCisgICAgd3JpdGFibGU6IHRydWUsCisgICAg
Y29uZmlndXJhYmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIHJldHVy
biBmOworfSkoKWApOworCitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibGVuZ3RoIiwgeworICB2
YWx1ZTogMCwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgY29u
ZmlndXJhYmxlOiB0cnVlLAorfSk7CitzaG91bGRIYXZlRGVzY3JpcHRvcihmLCAibmFtZSIsIHsK
KyAgdmFsdWU6ICIyNyIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2Us
CisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworCitmID0gcmVhbG0uZXZhbHVhdGUoYCgoKSA9
PiB7CisgIGxldCBmID0gZnVuY3Rpb24oKSB7CisgIH0KKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGYsICJsZW5ndGgiLCB7CisgICAgdmFsdWU6IC05Ljc0LAorICAgIHdyaXRhYmxlOiB0cnVlLAor
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoZiwgIm5hbWUiLCB7CisgICAgdmFsdWU6IDU3LAorICAgIHdy
aXRhYmxlOiB0cnVlLAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0
cnVlCisgIH0pOworICByZXR1cm4gZjsKK30pKClgKTsKKworc2hvdWxkSGF2ZURlc2NyaXB0b3Io
ZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IDAsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVy
YWJsZTogZmFsc2UsCisgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkSGF2ZURlc2Ny
aXB0b3IoZiwgIm5hbWUiLCB7CisgIHZhbHVlOiAiIiwKKyAgd3JpdGFibGU6IGZhbHNlLAorICBl
bnVtZXJhYmxlOiBmYWxzZSwKKyAgY29uZmlndXJhYmxlOiB0cnVlLAorfSk7CisKK2xldCBpbm5l
ckxvZyA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBnbG9iYWxUaGlzLl9sb2cgPSBbXTsK
KyAgZ2xvYmFsVGhpcy5sb2cgPSBmdW5jdGlvbiBsb2coaXRlbSkgeworICAgIGdsb2JhbFRoaXMu
X2xvZy5wdXNoKGl0ZW0pOworICB9OworCisgIHJldHVybiBmdW5jdGlvbiBsb2coKSB7CisgICAg
bGV0IGxvZyA9IGdsb2JhbFRoaXMuX2xvZzsKKyAgICBnbG9iYWxUaGlzLl9sb2cgPSBbXTsKKyAg
ICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobG9nKTsKKyAgfTsKK30pKClgKTsKKworZnVuY3Rpb24g
bG9nKCkgeworICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShpbm5lckxvZygpKTsKKyAgc2hvdWxk
QmUoQXJyYXkuaXNBcnJheShyZXN1bHQpLCB0cnVlKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQgdGFyZ2V0ID0gKGZ1bmN0aW9uKCkg
eworICAgIGxvZyhcYGNhbGxlZFxgKTsKKyAgfSk7CisgIGxldCBwID0gbmV3IFByb3h5KHRhcmdl
dCwgeworICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBwKSB7CisgICAgICBsb2coXGBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5n
ZXRPd25Qcm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0KHQsIHApIHsKKyAg
ICAgIGxvZyhcYGdldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmdldCguLi5hcmd1
bWVudHMpOworICAgIH0sCisgICAgZGVmaW5lUHJvcGVydHkodCwgcCwgbykgeworICAgICAgbG9n
KFxgZGVmaW5lUHJvcGVydHkgXCR7cH1cYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQ
cm9wZXJ0eSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgZ2V0UHJvdG90eXBlT2YodCkgewor
ICAgICAgbG9nKFxgZ2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQ
cm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0UHJvdG90eXBlT2YodCwg
dikgeworICAgICAgbG9nKFxgc2V0UHJvdG90eXBlT2ZcYCk7CisgICAgICByZXR1cm4gUmVmbGVj
dC5zZXRQcm90b3R5cGVPZiguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaXNFeHRlbnNpYmxl
KHQpIHsKKyAgICAgIGxvZyhcYGlzRXh0ZW5zaWJsZVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0
LmlzRXh0ZW5zaWJsZSguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgcHJldmVudEV4dGVuc2lv
bnModCkgeworICAgICAgbG9nKFxgcHJldmVudEV4dGVuc2lvbnNcYCk7CisgICAgICByZXR1cm4g
UmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgaGFz
KHQsIHApIHsKKyAgICAgIGxvZyhcYGhhcyBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0
LmhhcyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgc2V0KHQsIHAsIHYpIHsKKyAgICAgIGxv
ZyhcYHNldCBcJHtwfVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldCguLi5hcmd1bWVudHMp
OworICAgIH0sCisgICAgZGVsZXRlKHQsIHApIHsKKyAgICAgIGxvZyhcYGRlbGV0ZSBcJHtwfVxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZSguLi5hcmd1bWVudHMpOworICAgIH0sCisg
ICAgb3duS2V5cyh0KSB7CisgICAgICBsb2coXGBvd25LZXlzXGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3Qub3duS2V5cyguLi5hcmd1bWVudHMpOworICAgIH0sCisgICAgYXBwbHkoKSB7CisgICAg
ICBsb2coXGBhcHBseVxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KC4uLmFyZ3VtZW50
cyk7CisgICAgfSwKKyAgICBjb25zdHJ1Y3QoKSB7CisgICAgICBsb2coXGBjb25zdHJ1Y3RcYCk7
CisgICAgICByZXR1cm4gUmVmbGVjdC5hcmd1bWVudExpc3QoLi4uYXJndW1lbnRzKTsKKyAgICB9
LAorICB9KTsKKyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgImxlbmd0aCIsIHsKKyAg
ICBnZXQoKSB7CisgICAgICBsb2coImxlbmd0aCBnZXR0ZXIiKTsKKyAgICAgIHJldHVybiBJbmZp
bml0eTsKKyAgICB9LAorICAgIHNldCgpIHsKKyAgICAgIGxvZygibGVuZ3RoIHNldHRlciIpOwor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisgICAgY29uZmlndXJhYmxlOiB0cnVlLAorICAg
IGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQs
ICJuYW1lIiwgeworICAgIGdldCgpIHsKKyAgICAgIGxvZygibmFtZSBnZXR0ZXIiKTsKKyAgICAg
IHJldHVybiBJbmZpbml0eTsKKyAgICB9LAorICAgIHNldCgpIHsKKyAgICAgIGxvZygibmFtZSBz
ZXR0ZXIiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKKyAgICBlbnVtZXJhYmxlOiB0cnVlCisgIH0pOworICByZXR1cm4gcDsKK30pKClgKTsK
KworZigpOworc2hvdWxkSGF2ZURlc2NyaXB0b3IoZiwgImxlbmd0aCIsIHsKKyAgdmFsdWU6IElu
ZmluaXR5LAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25m
aWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgewor
ICB2YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkQmUobG9nKCksIFsKKyAgImdldCBsZW5n
dGgiLAorICAibGVuZ3RoIGdldHRlciIsCisgICJnZXQgbmFtZSIsCisgICJuYW1lIGdldHRlciIs
CisgICJhcHBseSIsCisgICJjYWxsZWQiCitdKTsKK2YoKTsKK3Nob3VsZEJlKGxvZygpLCBbImFw
cGx5IiwgImNhbGxlZCJdKTsKKworZiA9IHJlYWxtLmV2YWx1YXRlKGAoKCkgPT4geworICBsZXQg
dGFyZ2V0ID0gKGZ1bmN0aW9uKCkgeworICAgIGxvZyhcYGNhbGxlZCAyXGApOworICB9KTsKKyAg
bGV0IHAgPSBuZXcgUHJveHkodGFyZ2V0LCB7CisgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHQsIHApIHsKKyAgICAgIGxvZyhcYGdldE93blByb3BlcnR5RGVzY3JpcHRvciBcJHtwfVxgKTsK
KyAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBnZXQodCwgcCkgeworICAgICAgbG9nKFxgZ2V0IFwke3B9XGApOworICAgICAgcmV0
dXJuIFJlZmxlY3QuZ2V0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBkZWZpbmVQcm9wZXJ0
eSh0LCBwLCBvKSB7CisgICAgICBsb2coXGBkZWZpbmVQcm9wZXJ0eSBcJHtwfVxgKTsKKyAgICAg
IHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAg
ICBnZXRQcm90b3R5cGVPZih0KSB7CisgICAgICBsb2coXGBnZXRQcm90b3R5cGVPZlxgKTsKKyAg
ICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7CisgICAgfSwK
KyAgICBzZXRQcm90b3R5cGVPZih0LCB2KSB7CisgICAgICBsb2coXGBzZXRQcm90b3R5cGVPZlxg
KTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnNldFByb3RvdHlwZU9mKC4uLmFyZ3VtZW50cyk7Cisg
ICAgfSwKKyAgICBpc0V4dGVuc2libGUodCkgeworICAgICAgbG9nKFxgaXNFeHRlbnNpYmxlXGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuaXNFeHRlbnNpYmxlKC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBwcmV2ZW50RXh0ZW5zaW9ucyh0KSB7CisgICAgICBsb2coXGBwcmV2ZW50RXh0ZW5z
aW9uc1xgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKC4uLmFyZ3Vt
ZW50cyk7CisgICAgfSwKKyAgICBoYXModCwgcCkgeworICAgICAgbG9nKFxgaGFzIFwke3B9XGAp
OworICAgICAgcmV0dXJuIFJlZmxlY3QuaGFzKC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBz
ZXQodCwgcCwgdikgeworICAgICAgbG9nKFxgc2V0IFwke3B9XGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3Quc2V0KC4uLmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBkZWxldGUodCwgcCkgeworICAg
ICAgbG9nKFxgZGVsZXRlIFwke3B9XGApOworICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlKC4u
LmFyZ3VtZW50cyk7CisgICAgfSwKKyAgICBvd25LZXlzKHQpIHsKKyAgICAgIGxvZyhcYG93bktl
eXNcYCk7CisgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKC4uLmFyZ3VtZW50cyk7CisgICAg
fSwKKyAgICBhcHBseSgpIHsKKyAgICAgIGxvZyhcYGFwcGx5XGApOworICAgICAgcmV0dXJuIFJl
ZmxlY3QuYXBwbHkoLi4uYXJndW1lbnRzKTsKKyAgICB9LAorICAgIGNvbnN0cnVjdCgpIHsKKyAg
ICAgIGxvZyhcYGNvbnN0cnVjdFxgKTsKKyAgICAgIHJldHVybiBSZWZsZWN0LmFyZ3VtZW50TGlz
dCguLi5hcmd1bWVudHMpOworICAgIH0sCisgIH0pOworICBPYmplY3QuZGVmaW5lUHJvcGVydHko
dGFyZ2V0LCAibGVuZ3RoIiwgeworICAgIGdldCgpIHsgcmV0dXJuIH0sCisgICAgY29uZmlndXJh
YmxlOiB0cnVlLAorICAgIGVudW1lcmFibGU6IHRydWUKKyAgfSk7CisgIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSh0YXJnZXQsICJuYW1lIiwgeworICAgIHZhbHVlOiA1NywKKyAgICBjb25maWd1cmFi
bGU6IHRydWUsCisgICAgZW51bWVyYWJsZTogdHJ1ZQorICB9KTsKKyAgcmV0dXJuIHA7Cit9KSgp
YCk7CisKK2YoKTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJsZW5ndGgiLCB7CisgIHZhbHVl
OiAwLAorICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBjb25maWd1
cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYsICJuYW1lIiwgeworICB2
YWx1ZTogIiIsCisgIHdyaXRhYmxlOiBmYWxzZSwKKyAgZW51bWVyYWJsZTogZmFsc2UsCisgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKK30pOworc2hvdWxkQmUobG9nKCksIFsKKyAgImdldCBsZW5ndGgi
LAorICAiZ2V0IG5hbWUiLAorICAiYXBwbHkiLAorICAiY2FsbGVkIDIiCitdKTsKK2YoKTsKK3No
b3VsZEJlKGxvZygpLCBbImFwcGx5IiwgImNhbGxlZCAyIl0pOworCitzaG91bGRIYXZlRGVzY3Jp
cHRvcihmLCAibGVuZ3RoIiwgeworICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZh
bHNlLAorICBjb25maWd1cmFibGU6IHRydWUsCit9KTsKK3Nob3VsZEhhdmVEZXNjcmlwdG9yKGYs
ICJuYW1lIiwgeworICB3cml0YWJsZTogZmFsc2UsCisgIGVudW1lcmFibGU6IGZhbHNlLAorICBj
b25maWd1cmFibGU6IHRydWUsCit9KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>